1.第三人称视角控制
通过Package Manager 安装CineMachine
1) 最简单的方法使用freeLook虚拟相机
常用的调整为:
1.观察目标:
将要看的目标放在这里。
2输入控制:
把你想用来控制的虚拟轴(就是InputManager里的)的名字输入进去就行。默认是填mouse那个输入轴。
注意:似乎不支持New InputSystem。所以在用New InputSystem时要么用在projectSetting/player里改成both设置。
要么自己写脚本去调用这个组件中的Input Axis Value值
//第三人称相机
public CinemachineFreeLook thridPersonVCam;
…
thridPersonVCam.m_XAxis.m_InputAxisValue = mov.x; //x轴旋转
thridPersonVCam.m_YAxis.m_InputAxisValue = mov.y; //y轴旋转
…
2) 是我在一个项目中实现的方法:
参考了unity官方视频:https://www.bilibili.com/video/BV1Xa4y1j7iP
就是先让虚拟摄像机看向角色身上的子物体,玩家通过控制子物体的旋转来控制虚拟摄像机的朝向。但是要解决一个问题,就是子物体会随着父物体一起旋转的问题。视频中的解决方法是在移动或射击时强制将角色转向视角方向,同时将视点子物体的yz轴local的旋转值置零。
但是我是想实现个能在移动是也能自由观察的相机,所以采用了一个更简单但可能更耗性能的方法,就是在脚本内部另外保存一个实际子物体应该的世界坐标下的旋转值。在每次的lateUpdate里将子物体的世界坐标的旋转值强制改为这个脚本中的值。实现效果如下:
实现的主要脚本如下:
public class ViewController : MonoBehaviour
{
[Tooltip("相机左右旋转速度")] public float rotSpeedLR = 100f;
//用来给调整灵敏度的UI进行最大最小值的限制
[Tooltip("相机左右旋转最大速度")] public float maxRotSpeedLR = 360f;
[Tooltip("相机左右旋转最小速度")] public float minRotSpeedLR = 90f;
[Tooltip("左右是否反向")] public bool LRInvert;
[Tooltip("相机上下旋转速度")] public float rotSpeedUD = 50f;
//用来给调整灵敏度的UI进行最大最小值的限制
[Tooltip("相机上下旋转最大速度")] public float maxRotSpeedUD = 360f;
[Tooltip("相机上下旋转最小速度")] public float minRotSpeedUD = 90f;
[Tooltip("上下是否反向")