学习内容:b站傅老师的U3D黑魂复刻课程
在角色下创建CameraHandle,将摄像机拖入
PlayerHandle控制水平旋转,CameraHandle控制竖直旋转
定义
public PlayerController pi;
private GameObject playerHandle;
private GameObject cameraHandle;
获取object
void Awake()
{
cameraHandle = transform.parent.gameObject;
playerHandle = cameraHandle.transform.parent.gameObject;
}
使用rotate方法旋转
playerHandle.transform.Rotate(Vector3.up,pi.Jright * 10.0f *Time.deltaTime);
添加速度系数
public float horizontalSpeed = 50.0f;
两个方向的旋转方法调用
void Update()
{
playerHandle.transform.Rotate(Vector3.up,pi.Jright * horizontalSpeed *Time.deltaTime);
cameraHandle.transform.Rotate(Vector3.right,pi.Jup * -verticalSpeed *Time.deltaTime);
}
找到俯角仰角的临界值,设定边界
cameraHandle.transform.eulerAngles = new Vector3(
Mathf.Clamp(cameraHandle.transform.eulerAngles.x,-40,30),0,0);
但是这样俯视可以,仰视会不断鬼畜,注释掉rotate,换一种方法
创建临时变量
tempEulerX -= pi.Jup * verticalSpeed *Time.deltaTime;
tempEulerX = Mathf.Clamp(tempEulerX,-40,30);
cameraHandle.transform.localEulerAngles = new Vector3(
tempEulerX,0,0);
即可实现有边界的视角范围
鼠标控制
如果想要使用鼠标控制的话,可以加入鼠标控制
Jright = Input.GetAxis("Mouse X");
Jup = Input.GetAxis("Mouse Y");
延迟镜头
使镜头出现迟滞跟随,当人物静止时候停下来。
新建空物体camerapos
camera = Camera.main.gameObject;
获取camera
camera = Camera.main.gameObject;
使camera追随cameraPos
camera.transform.position = Vector3.SmoothDamp(camera.transform.position,transform.position,ref cameraDampVelocity,cameraDampValue);
camera.transform.eulerAngles = transform.eulerAngles;