有人能告诉我 AddForce 和 transform.translate 之间的区别吗?

1 c# move rigid-bodies unity-game-engine

我正在尝试移动一个游戏对象,但我发现这两个最流行的函数可以移动对象。我知道这两者之间的区别在于使用 AddForce 时需要一个刚体,而 Transform.translate 中不需要刚体。我只是想确保我在游戏中使用了正确的功能。这两个功能的功能有什么不同吗?我正在一个有障碍物的无限平面上移动一个立方体。我认为当然需要刚体,但我想知道 Transform.translate 有什么用?

Ber*_*rme 5

转换.translate:

使用这种方法,您基本上可以远程传输游戏对象,而不考虑物理和碰撞器。如果您连接了 RigidBody,这个非常昂贵。

加力:

有了这个,您将向 GameObject 的 RigidBody 添加力,因此所有运动都将考虑物理和碰撞器。

如果您需要移动刚体(如播放器),我建议使用MovePosition。它比 AddForce 更精确并使用物理马达。

编辑:

例子:

public float movementSpeed= 5f; //for instance

void FixedUpdate()
{

    Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0 , Input.GetAxisRaw("Vertical"));
    rigidbody.MovePosition(transform.position + direction * movementSpeed * Time.fixedDeltaTime);
}
Run Code Online (Sandbox Code Playgroud)

调整运动速度以更快或更慢。

没有测试代码,但它应该可以工作。