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

时间:2019-03-13 17:22:01

标签: c# unity3d move rigid-bodies

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

2 个答案:

答案 0 :(得分:3)

transform.translate:

使用这种方法,您基本上可以远程传输GameObject,而无需考虑     物理也不是对撞机。如果您附有RigidBody,那么这是相当昂贵的。

AddForce:

通过此操作,您将为GameObject的RigidBody添加力量,因此所有     运动将考虑物理和对撞机。

如果您需要移动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);
}

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

没有测试代码,但是应该可以。

答案 1 :(得分:1)

有时候您不想在游戏中使用物理,因为它使用了很多计算能力,还有很多其他用例,开发人员不需要使用物理来移动对象或与之碰撞其他对象并不重要。