我的代码有一个奇怪的错误。相机以玩家(第一人称)为中心,可以使用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);
}
}
正常情况下,当同时按下箭头键时相机开始倾斜,但只有按下一个时也会发生。有人有任何想法吗?
答案 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