提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
这次文章将要设计一个基于摄像机观察方向为基准的角色转向,当玩家处于移动状态时,移动鼠标改变相机方向,则角色面朝方向也会跟着相机改变。当处于静止状态时则不会。
一、设置cinemachine相机
关于设置cinemachine可参考这个文章
【游戏开发教程】Unity Cinemachine快速上手,详细案例讲解(虚拟相机系统 | 新发出品 | 良心教程)
可以参考我的设置


其中Follow和LookAt分别是角色本体、它身上挂在LookRoot;
二、转向设置
1.挂载
在角色身上挂载一个Orientation空物体,这是给角色在旋转时做插值用的

在与移动相关的脚本上挂载

2.转向
void Turn()
{
float h = PlayerInputManager.Instance.MoveInput().x;
float v = PlayerInputManager.Instance.MoveInput().y;
//Vector3 viewDir = player.position - new Vector3(transform.position.x, player.position.y, transform.position.z);//获取面朝向方向
orientation.forward = new Vector3(Camera.main.transform.forward.normalized.x, 0, Camera.main.transform.forward.normalized.z);//相机观察方向
inputDir = orientation.forward * v + orientation.right * h;//相对相机观察方向的输入方向
player.forward = Vector3.Slerp(player.forward, inputDir.normalized, Time.deltaTime * rotateSpeed);
}
orientation.forwad可以获得相机观察方向,inputDir是在相机观察方向基础上进行输入前后左右的判断,然后player.forwar为角色面朝的方向,最后进行插值即可
3.移动
public void Move(Vector3 dir,float speed)
{
if(fsm.isGrounded)
{
fsm.rb.AddForce(dir * speed,ForceMode.Force);
fsm.rb.velocity=Vector3.ClampMagnitude(fsm.rb.velocity, speed);
}
}
关于移动我也仅仅用addForce进行移动,dir为上面的inputDir,speed大家自定义即可,可以Vector3.ClampMagnitude对速度进行限制以防止过大;
4.说明
由于fsm比较复杂,这里我就不说那么细,就是当角色移动时,调用转向和移动,这样就可以实现角色跟着镜头一起转向了,当角色静止时,不进行转向即可
演示

5066

被折叠的 条评论
为什么被折叠?



