微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity3D - Cinemachine - 相机旋转问题

如何解决Unity3D - Cinemachine - 相机旋转问题

我的问题是我的相机在停止鼠标后旋转了一点。

我使用 Cinemachine 虚拟摄像机。 角色随着镜头转动。

脚本不是我写的,但它适用于制造商。 该脚本来自以下播放列表。

https://www.youtube.com/watch?v=CS7MudfyDzM&list=PLyBYG1JGBcd1E4CigRSDE9YdH8syiDY6-

script on character

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Characteraiming : MonoBehavIoUr
{

    public float turnSpeed;
    Camera mainCamera;
    
    public Transform cameraLookAt;
    public Cinemachine.Axisstate xAxis;
    public Cinemachine.Axisstate yAxis;

    // Start is called before the first frame update
    void Start()
    {
        mainCamera = Camera.main;
        Cursor.visible = false;
        Cursor.lockState = CursorLockMode.Locked;
    }

    void FixedUpdate()
    {
        xAxis.Update(Time.fixedDeltaTime);
        yAxis.Update(Time.fixedDeltaTime);

        cameraLookAt.eulerAngles = new Vector3(yAxis.Value,xAxis.Value,0);

        float yawCamera = mainCamera.transform.rotation.eulerAngles.y;
        transform.rotation = Quaternion.Slerp(transform.rotation,Quaternion.Euler(0,yawCamera,0),turnSpeed * Time.fixedDeltaTime);
        Debug.Log(Quaternion.Slerp(transform.rotation,turnSpeed * Time.fixedDeltaTime));
    }

}

解决方法

好的,我修好了。 移动线 cameraLookAt.eulerAngles = new Vector3(yAxis.Value,xAxis.Value,0); 到函数结束。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterAiming : MonoBehaviour
{

    public float turnSpeed;
    Camera mainCamera;
    
    public Transform cameraLookAt;
    public Cinemachine.AxisState xAxis;
    public Cinemachine.AxisState yAxis;

    // Start is called before the first frame update
    void Start()
    {
        mainCamera = Camera.main;
        Cursor.visible = false;
        Cursor.lockState = CursorLockMode.Locked;
    }

    void FixedUpdate()
    {
        xAxis.Update(Time.fixedDeltaTime);
        yAxis.Update(Time.fixedDeltaTime);

        float yawCamera = mainCamera.transform.rotation.eulerAngles.y;
        transform.rotation = Quaternion.Slerp(transform.rotation,Quaternion.Euler(0,yawCamera,0),turnSpeed * Time.fixedDeltaTime);
        
        cameraLookAt.eulerAngles = new Vector3(yAxis.Value,0);
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。