基本語(yǔ)法 :
public void AddForceAtPosition(Vector3 force,Vector3 position);
public void AddForceAtPosition(Vector3 force,Vector3 position,ForceMode mode);
其中參數(shù)force為扭矩向量,參數(shù)position為作用點(diǎn)坐標(biāo)值,參數(shù)mode為力的作用方式。
功能說(shuō)明:此方法用于為參數(shù)position增加一個(gè)力force,其參考坐標(biāo)系為世界坐標(biāo)系,作用方式為mode,默認(rèn)值為ForceMode.Force。此方法與方法AddForce不同,AddForce方法對(duì)剛體的施加力時(shí),不會(huì)產(chǎn)生扭矩使物體發(fā)生旋轉(zhuǎn),而AddForceAtPosition方法是在某個(gè)坐標(biāo)點(diǎn)對(duì)剛體施加力,這樣很可能會(huì)產(chǎn)生扭矩使剛體產(chǎn)生旋轉(zhuǎn),具體如下:
1、當(dāng)力的作用點(diǎn)在剛體重心時(shí),剛體不會(huì)發(fā)生旋轉(zhuǎn);
2、當(dāng)力的作用點(diǎn)不在剛體重心時(shí),由于作用點(diǎn)的扭矩會(huì)使剛體發(fā)旋轉(zhuǎn),但是,當(dāng)作用力的方向經(jīng)過(guò)剛體 的重心坐標(biāo)時(shí),不發(fā)生旋轉(zhuǎn)。
實(shí)例演示:下面通過(guò)實(shí)例演示方法AddForceAtPosition的使用。
using UnityEngine;
using System.Collections;
public class AtForceAtPosition_ts : MonoBehaviour {
public Rigidbody A,B,C;
Vector3 m_force=new Vector3(0.0f,0.0f,10.0f);
void FixedUpdate()
{
//當(dāng)力的作用點(diǎn)在剛體提重心時(shí),剛體不發(fā)生旋轉(zhuǎn)
A.AddForceAtPosition (m_force, A.transform.position, ForceMode.Force);
//當(dāng)力的作用點(diǎn)不在剛體重心時(shí),由于作用點(diǎn)的扭矩會(huì)使剛體發(fā)生旋轉(zhuǎn)
B.AddForceAtPosition (m_force, B.transform.position + new Vector3 (0.0f, 0.3f, 0.0f), ForceMode.Force);
//但是,當(dāng)力的作用點(diǎn)和剛體重心坐標(biāo)的差向量與作用力的方向同向時(shí)不發(fā)生旋轉(zhuǎn)
C.AddForceAtPosition (m_force, C.transform.position + new Vector3 (0.0f, 0.3f, 0.0f), ForceMode.Force);
Debug.Log ("A的歐拉角:" + A.transform.eulerAngles);
Debug.Log ("B的歐拉角:" + B.transform.eulerAngles);
Debug.Log ("C的歐拉角:" + C.transform.eulerAngles);
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}