使用箭头键的相机旋转 - 以对象为中心

时间:2018-04-06 17:59:35

标签: c# unity3d

我的代码有一个奇怪的错误。相机以玩家(第一人称)为中心,可以使用WASD移动。相机通过UPDOWNLEFTRIGHT独立旋转。我希望头部只能向上,向下,向左,向右移动 - 不倾斜或上下颠倒。在开始时它会这样做,但很快相机开始变得有自己的想法。编辑:我相信这是因为,当我向下看/向上看轴变化然后按下左/右时,视图会根据这个新轴改变。

关注玩家的相机代码:

/swbpp

玩家移动代码:

public class FollowPlayer : MonoBehaviour {

    public Transform player;
    public Vector3 offset;
    private int cameraRotSpeed = 100;

    void Update () {
        transform.position = player.position + offset;

         Vector3 v3 = new Vector3(Input.GetAxis("Vertical"), Input.GetAxis("Horizontal"), 0.0f);
         transform.Rotate(v3 * cameraRotSpeed * Time.deltaTime);
    }
}

正常情况下,当同时按下箭头键时相机开始倾斜,但只有按下一个时也会发生。有人有任何想法吗?

2 个答案:

答案 0 :(得分:0)

默认情况下,transform.Rotate出现在" self space"中,相对于变换正在查看的内部坐标系(前进,后退,左右)。你是对的,因为你的操作在本地坐标系上,你的视图搞砸了。

transform.Rotate有一个选项参数来指定要使用的坐标系。您需要全局或世界坐标系,如下所示:

transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime, Space.World);

您可以在此处的Unity文档中找到更多内容:https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

答案 1 :(得分:0)

我实际上今天只知道如何做到这一点 - 有点延迟。感谢@avariant,以激发解决方案。 出于某种原因,默认情况下,坐标系实际上设置为Space.World。我只需要使用Space.Self。 所以要改变Avariant给出的例子:

forEach