【问题标题】:First Person Controller camera rotation doesn't work第一人称控制器相机旋转不起作用
【发布时间】:2018-01-22 23:59:33
【问题描述】:

我正在寻找一些统一的 c# 脚本来更新第一人称控制器 相机旋转变换。更具体地说,我正在运行动画,并且在动画结束时,我在 fps 摄像机变换上设置了“电影摄像机变换”,如何显示代码。对于位置变量,一切正常。但是,旋转变量效果不佳。 该变量获得正确的变换旋转(相同的电影摄影机变换),但我看不到场景的变化。 “第一人称控制器旋转变换” 总是得到最后发生的旋转坐标。 我已经测试过很多旋转函数,比如Rotate(Vector3)、rotation、localRotation、eulerAngles、localEulerAngles....

Vector3 pos, roteuler;
public Camera fpscam, movie;

void getPosRot(){
    roteuler = movie.transform.eulerAngles;
    pos = movie.transform.position;
}

void Update(){
    fps.transform.position = pos;
    fps.transform.eulerAngles = roteuler;
}

【问题讨论】:

  • 尝试使用fps.transform.rotation = movie.transform.rotation?
  • 不起作用:/
  • 即使你把它放在更新中?问题是 Vector3 存储为副本,而不是参考。因此,如果您的电影摄像机位置发生变化,它不会被更新。
  • 我在更改后打印(fps.transform.rotation)和打印(movie.transform.rotation)。它们在 Update() 上是等价的。
  • 你在哪里调用getPosRot()函数?

标签: c# unity3d transform


【解决方案1】:

这是我的 FPS 脚本的相机部分:

public class PlayerController : MonoBehaviour
{
    float RotateX;
    float RotateY;

    public GameObject Camera;

    public float RotationSpeed = 3.0f;
    public float MaxYAxis = 60.0f;
    public float MinYAxis = -48.0f;

    private void Start()
    {

    }

    void Update()
    {
        Rotation();
    }

    void Rotation()
    {
        RotateX += Input.GetAxis("Mouse X") * RotationSpeed;
        RotateY += Input.GetAxis("Mouse Y") * RotationSpeed;
        RotateY = Mathf.Clamp(RotateY, MinYAxis, MaxYAxis);
        Camera.transform.localRotation = Quaternion.Euler(-RotateY, 0f, 0f);
        transform.rotation = Quaternion.Euler(0f, RotateX, 0f);
    }
}

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多