问题描述
我的问题是我的相机在停止鼠标后旋转了一点。
我使用 Cinemachine 虚拟摄像机。 角色随着镜头转动。
脚本不是我写的,但它适用于制造商。 该脚本来自以下播放列表。
https://www.youtube.com/watch?v=CS7MudfyDzM&list=PLyBYG1JGBcd1E4CigRSDE9YdH8syiDY6-
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);
}
}