如何在Rigidbody2D上正确使用.MoveRotation,.rotation,.MovePosition和.position?

时间:2019-06-12 18:09:55

标签: c# unity3d

出于学习目的,我正在尝试制作“太空射击”型游戏。我在使用Rigidbody2D移动飞船时遇到了麻烦。

我已经尝试过在Update(),FixedUpdate()中运行命令并仅使用Rigidbody2D组件(完全不使用Transform)。我还尝试将Rigidbody2D标记为Dynamic和Kinematic,并更改了Simulated属性。什么都没用。

这是我当前(无效)的代码:

Rigidbody2D rb;

void Start()
{
   rb = GetComponent<Rigidbody2D>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Q))
        rb.MoveRotation(angularSpeed * Time.deltaTime);
    if (Input.GetKey(KeyCode.E))
        rb.MoveRotation(-angularSpeed * Time.deltaTime);

    rb.MovePosition(Vector2.up * speed * Time.deltaTime);
}

我希望该代码使按“ Q”键时飞船向左转,按“ E”键时始终向右转。实际结果是,当按下键“ Q”或“ E”时,飞船不会移动,而不会仅旋转抖动(它向右或向左旋转一步,然后不再响应输入)。该代码不会生成任何错误消息或警告,也不会引发任何异常。

1 个答案:

答案 0 :(得分:1)

Rigidbody2D.MovePositionRigidbody2D.MoveRotation都期望您希望它们移动到的最终旋转位置的绝对参数。

对于 axios.get(`/data/teasers/${path}`) ,您做的正确,但对于MovePosition,您仅传入了相对旋转更改,但忘记将其添加到当前旋转中。


应该是

MoveRotation