Unity Arpg学习日志一:基于Cinemachine的以摄像机观察方向的基准的转向

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这次文章将要设计一个基于摄像机观察方向为基准的角色转向,当玩家处于移动状态时,移动鼠标改变相机方向,则角色面朝方向也会跟着相机改变。当处于静止状态时则不会。

一、设置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比较复杂,这里我就不说那么细,就是当角色移动时,调用转向和移动,这样就可以实现角色跟着镜头一起转向了,当角色静止时,不进行转向即可


演示

请添加图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值