Unity中简单的FPS相机移动

时间:2017-05-01 08:25:27

标签: c# unity3d

我开始了一个新项目。这是一款简单的FPS游戏。教程经常过时,所以我开始自己编写。

玩家的动作很好。相机不是。我将所有数据值存储在数据类

public class CameraMovementData : CameraCommonData // datastore
{
    public float InputHorizontal { get { return Input.GetAxisRaw("Mouse X"); } } // horizontal mouse input

    private float yMin = -70; // player looks down - minimum
    private float yMax = 70; // player looks up - maximum
    public float InputVertical { get { return Mathf.Clamp(Input.GetAxisRaw("Mouse Y"), yMin, yMax); } } // vertical clamped mouse Input

    public float Sensitivity { get { return 30; } } // mouse sensitivity

    public Vector2 Movement { get { return new Vector3(InputHorizontal * Sensitivity * Time.deltaTime, -InputVertical * Sensitivity * Time.deltaTime); } } // the movement direction of the camera
}

在我的控制器中我有这个:

public class CameraMovementController : CameraCommonController // use the values from the datastore
{
    private CameraMovementData data; // instance to the datastore

    private void Start()
    {
        data = new CameraMovementData();
    }

    private void Update()
    {
        data.PlayerTransform.localRotation = data.Movement.x; // Rotate the player on X
        data.CameraTransform.localRotation = data.Movement.y; // Rotate the camera on Y
    }
}

正如您所看到的,我不知道如何在Update方法中编写旋转。

我必须使用localRotation,对吧?

我需要分配什么才能让它发挥作用?

似乎我必须使用

Quaternion.AngleAxis();

但我不知道,作为第二个参数传递什么

1 个答案:

答案 0 :(得分:1)

您经常需要将Camera附加到Player对象,这样您就不必显式检索有关玩家轮换的数据。如果Camera是Player对象的子节点,那么当播放器正在旋转时,Camera也将旋转。你需要做的就是将旋转夹紧在X轴上,这样它就不会翻转。我希望这会清除你可能遇到的一些问题。