第一人称 space 船舶俯仰和偏航问题

1st person space ship pitch and yaw isue

一段时间以来,我一直在尝试使用不同的教程来获得一个不错的第一人称(驾驶舱视图)飞船控制系统。我尝试仅使用鼠标、仅键盘和组合,但我在所有教程中都遇到同样的问题。即使是这行简单的代码也能做到:

    transform.position += transform.forward * Time.deltaTime * 90f;
    transform.Rotate( Input.GetAxis("Vertical"), Input.GetAxis("Horizontal"), 0.0f);

我一直遇到的问题是,如果我推销就可以了。它我偏航它确定。但是,如果我同时执行这两项操作(所以我选择对角线),它也会使我的船在 Z 轴上旋转并弄乱我的方向。我尝试将 z 旋转锁定在刚体中,但这也无济于事。我尝试自己编写代码,交替应用扭矩并简单地旋转,遵循一些教程,包括这个:Tutorial 但不断遇到旋转问题。

我想做的是一款像老游戏一样操控的游戏Helbender

你们中有人知道我可以让飞船控制器正常工作的方法吗?

----编辑-----

现在更进一步了。它不再打开我的 z 轴,因为我一直将它设置为 0。现在唯一的问题是,如果我尝试循环,船会翻转而不是很好地循环。

        if (Input.GetKey("up"))
    {
        transform.Rotate(transform.right * -ShipPanSpeed * Time.deltaTime, Space.World);
    }

    if (Input.GetKey("down"))
    {
        transform.Rotate(transform.right * ShipPanSpeed * Time.deltaTime, Space.World);
    }

    if (Input.GetKey("left"))
    {
        transform.Rotate(transform.up * -ShipPanSpeed * Time.deltaTime,Space.World);
    }

    if (Input.GetKey("right"))
    {
        transform.Rotate(transform.up * ShipPanSpeed * Time.deltaTime,Space.World);
    }

    float z = transform.eulerAngles.z;
    transform.Rotate(0, 0, -z);

您总是可以尝试为控件创建一个父对象,然后创建一个子对象(太空垃圾),您可以为枢轴旋转但除了旋转之外不附加任何移动。

我的意思是,您可以在 Y 轴上旋转父对象以使其旋转,同时向前或向后移动变换。如果你想向上或向下旋转,你可以向前变换,同时你变换 up/down 乘以你想要旋转的轴

示例:

private void Update(){
  //PARENT--------------------------------------------

  // MOVING FORWARD AND BACKWARD
  transform.position += transform.forward * Input.GetAxis("Vertical") * speed * Time.deltaTime();

  // MOVING RIGHT AND LEFT
  transform.position += transform.right * Input.GetAxis("Horizontal") * speed * Time.deltaTime();

  //PIVOT UP AND DOWN
  transform.position += transform.up * -Input.GetAxis("Mouse Y") * speed * Time.deltaTime();

  //ROTATE AROUND THE Y AXIS
  tranform.Rotate(0f, Input.GetAxis("Horizontal") * rotationspeed, 0f);


}

对于枢轴的宇宙飞船(子),我建议您制作一个空对象,并根据您用来移动 up/down 和 forward/backward 的输入轴将芯片设置为查看该对象.

希望这对您有所帮助,或者至少让您了解如何制作它:)