Unity:RigidBody2D,如何直线移动游戏对象(无曲线)

Unity: RigidBody2D, how to move GameObject in straight lines (no curves)

大家好,我是 Unity 的新手,对 Unity 很困惑。

我正在创建一个自上而下的无重力测试游戏,类似于吃豆人(即考虑角色的直线运动)。

目前,我正在尝试沿直线移动对象(没有曲率)(见图)。

我的 GameObject 已附加 RigidBody2D,并且 LinearAngularGravity 设置为 0。

我目前正在通过施加力来控制我的游戏对象:

private Rigidbody2D _playerRB2D;
public float _speed;

private void FixedUpdate()
{
    float moveHorizontal = Input.GetAxis("Horizontal");
    float moveVertical = Input.GetAxis("Vertical");
    Vector2 movement = new Vector2(moveHorizontal, moveVertical);

    _playerRB2D.AddForce(movement * _speed);
}

想法是游戏对象不会减速,因此一直在运动(直线)。与物体的碰撞显然也很重要!

任何帮助或要查看的信息都会有很大帮助,谢谢!

这个想法基本上是在每个改变的方向上重置施加在 rigidBody2D 上的力。 事实上,您必须测试从水平输入的方向对于 x 轴是否大于垂直,对于 y 轴是否相反,因此如果为真,则将相反方向更改为 0f。 您通常会:

Vector2 movement = new Vector2(moveHorizontal < moveVertical ? moveHorizontal: 0f, moveVertical < moveHorizontal ? moveVertical: 0f);
_playerRB2D.velocity = movement * speed;

编辑:通过测试输入值,您可以使用模拟控制器移动您的 RigidBody2D,从而如您所愿地保持直线!

Unity 有一个内置的物理引擎,可以根据速度(和碰撞等)计算运动。通过使用 Rigidbody2D.AddForce,您可以增加刚体的速度。这意味着,如果您按下向上箭头,然后按下向右箭头,按下向上箭头的速度将保持不变,从而导致对角线速度和弯曲路径。如果你想要直线,你可以使用 Rigidbody2D.velocity 或者只使用 Transform.translate.

_playerRB2D.velocity = movement * _speed;

编辑:你说碰撞很重要,所以保留刚体

或移除rigidbody2D组件并使用

transform.Translate(movement * _speed);