我开始了一个新项目。这是一款简单的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();
但我不知道,作为第二个参数传递什么
答案 0 :(得分:1)
您经常需要将Camera附加到Player对象,这样您就不必显式检索有关玩家轮换的数据。如果Camera是Player对象的子节点,那么当播放器正在旋转时,Camera也将旋转。你需要做的就是将旋转夹紧在X轴上,这样它就不会翻转。我希望这会清除你可能遇到的一些问题。