3D鼠标瞄准相机第3人垂直C#

时间:2015-06-09 02:41:18

标签: c# unity3d 3d camera

我试图制作鼠标瞄准镜,水平和垂直旋转我的播放器,看看播放器并保持恒定的距离。 在那个版本它工作正常,但我也不能使它成为横向。 每个版本的相机都会冻结,我自己也会旋转我的播放器。 我是编程的新手,所以我可以通过正确的target.transform.eulerAngles.y分配给垂直但我不能这样做。

public class MouseAimCamera : MonoBehaviour {
    public GameObject target;
    public float rotateSpeed = 5;
    Vector3 offset;

    void Start() {
        offset = target.transform.position - transform.position;
    }

    void LateUpdate() {
        float horizontal = Input.GetAxis("Mouse X") * rotateSpeed;
        target.transform.Rotate(0, horizontal, 0);

        float desiredAngle = target.transform.eulerAngles.y;
        Quaternion rotation = Quaternion.Euler(0, desiredAngle, 0);
        transform.position = target.transform.position - (rotation * offset);

        transform.LookAt(target.transform);
    }
}

如果有人能帮助我,我很高兴。

1 个答案:

答案 0 :(得分:2)

这将在世界空间中旋转,在某些角度可能会感觉不对,因为相机并不总是直接朝向。

public class MouseAimCamera : MonoBehaviour {
    public GameObject target;
    public float rotateSpeed = 5;

    void Start() {
        transform.parent = target.transform;
        transform.LookAt(target.transform);
    }

    void LateUpdate() {
        float horizontal = Input.GetAxis("Mouse X") * rotateSpeed;
        float vertical = Input.GetAxis("Mouse Y") * rotateSpeed;
        target.transform.RotateAround(target.transform.position, Vector3.up, horizontal);
        target.transform.RotateAround(target.transform.position, Vector3.left, vertical);
    }
}

这将在本地空间中旋转,并且可能会感觉更自然,具体取决于您尝试构建的内容。这与您原来的解决方案很接近,所以我猜测它并不是您想要的。

public class MouseAimCamera : MonoBehaviour {
    public GameObject target;
    public float rotateSpeed = 5;

    void Start() {
        transform.parent = target.transform;
        transform.LookAt(target.transform);
    }

    void LateUpdate() {
        float horizontal = Input.GetAxis("Mouse X") * rotateSpeed;
        float vertical = Input.GetAxis("Mouse Y") * rotateSpeed;
        target.transform.Rotate(vertical, horizontal, 0);
    }
}