Unity:RigidBody2D,如何沿直线移动GameObject(无曲线)

时间:2020-07-18 13:58:13

标签: c# unity3d 2d

Unity movement in straight lines

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

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

目前,我正在尝试沿直线移动对象(无曲率)(请参见图片)。

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

我目前正在通过加力来控制我的GameObject:

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);
}

这个想法是,游戏对象不会变慢,所以它会不断运动(直线运动)。与对象的碰撞显然也很重要!

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

Unity具有一个内置的物理引擎,该引擎基于速度(和碰撞等)计算运动。通过使用Rigidbody2D.AddForce,您可以添加刚体的速度。这意味着,如果先按向上箭头,再按向右箭头,则按向上箭头的速度将保持不变,从而导致对角线速度和弯曲路径。如果需要直线,可以使用Rigidbody2D.velocity 或仅使用Transform.translate。

_playerRB2D.velocity = movement * _speed;

编辑:您说碰撞很重要,所以请保持刚体

或删除苯乙烯2D组件并使用

transform.Translate(movement * _speed);