按照Milo Yip大大的思路写了个脚本,在FixedUpdate(Unity文档里写着:, the FixedUpdate function is recommended as the place to apply forces and change Rigidbody settings)计算合力。
public class ForceTest : MonoBehaviour {

    public const float FixedUpdateTimeStep = 0.02f;

    private Vector3 previousVelocity, currentVelocity;

    new Rigidbody rigidbody;
   
    public Vector3 acceleration;

    public Vector3 force;

    public Vector3 addiingForce = new Vector3(0, 1, 0);

    public ForceMode addingForceMode = ForceMode.Impulse;
    void Start () {
        rigidbody = GetComponent<Rigidbody>();
    }
	
	void FixedUpdate () {
      
        previousVelocity = currentVelocity;
        currentVelocity = rigidbody.velocity;
        acceleration = new Vector3((currentVelocity - previousVelocity).x / FixedUpdateTimeStep,
                                   (currentVelocity - previousVelocity).y / FixedUpdateTimeStep,
                                   (currentVelocity - previousVelocity).z / FixedUpdateTimeStep);
        force = acceleration * rigidbody.mass;
        rigidbody.AddForce(addiingForce, addingForceMode);
    }
}

用一个Scale为1的Cube做实验:发现ForceMode为Force或者Acceleration的时候是比较符合牛顿第几定律F=ma的,但是始终有一点误差,记录如图(默认还有-9.8的重力,所以合力应该是0):

Rigibody组件截图:

  1. Force模式:

2.Impulse模式:

3.Velocity Change模式:
4.Acceleration模式:
添加其他方向力的情况:
  1. Force模式:
  2. Acceleration模式:
注意:要是通过力来控制物体,请不要再用Transform来控制物体的位置和移动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值