基本语法 :
public void AddForceAtPosition(Vector3 force,Vector3 position);
public void AddForceAtPosition(Vector3 force,Vector3 position,ForceMode mode);
其中参数force为扭矩向量,参数position为作用点坐标值,参数mode为力的作用方式。
功能说明:此方法用于为参数position增加一个力force,其参考坐标系为世界坐标系,作用方式为mode,默认值为ForceMode.Force。此方法与方法AddForce不同,AddForce方法对刚体的施加力时,不会产生扭矩使物体发生旋转,而AddForceAtPosition方法是在某个坐标点对刚体施加力,这样很可能会产生扭矩使刚体产生旋转,具体如下:
1、当力的作用点在刚体重心时,刚体不会发生旋转;
2、当力的作用点不在刚体重心时,由于作用点的扭矩会使刚体发旋转,但是,当作用力的方向经过刚体 的重心坐标时,不发生旋转。
实例演示:下面通过实例演示方法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()
{
//当力的作用点在刚体提重心时,刚体不发生旋转
A.AddForceAtPosition (m_force, A.transform.position, ForceMode.Force);
//当力的作用点不在刚体重心时,由于作用点的扭矩会使刚体发生旋转
B.AddForceAtPosition (m_force, B.transform.position + new Vector3 (0.0f, 0.3f, 0.0f), ForceMode.Force);
//但是,当力的作用点和刚体重心坐标的差向量与作用力的方向同向时不发生旋转
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 () {
}
}