您当前所在位置:首页推荐资讯游戏第三人称人物移动不够丝滑?这份Unity3D游戏开发技术指南收藏好了

游戏第三人称人物移动不够丝滑?这份Unity3D游戏开发技术指南收藏好了

更新:2024-04-23 04:44:27编辑:打听下载归类:推荐资讯人气:7

  如今,不论是3A大作还是热门的RPG游戏都具有非常优秀的任我控制体系,一个连贯性强的移动反馈可以给玩家带来更多的游玩体验,这也是一个游戏是否能够持续收到玩家好评的重要因素。因此国内游戏大厂在招募人才时都十分看重第三人称人物移动控制的基础能力、或者是否具备相关的项目经验。今天来给大家讲讲在Unity3D中如何实现连贯性强的第三人称人物移动控制,而实现一个连贯性强的人物控制体系需要掌握三个基础知识:

  1、Cinemachine的熟练使用

  2、humanoid动画体系的掌握世界十大恐怖灵异事件

  3、移动代码的编写

  本篇文章为纯干货技术类文章,篇幅可能较长,如需领取学习资料或训练营课程,可点击下方卡片免费领取模拟人生4秘籍怎么输入。

  没有项目经验?点击免费参加游戏开发5天训练营,小白也能从0做出一款游戏Demo! >>>前期工作

  准备一个avatar为humanoid模型

  通过unity package下载cinemachine

  准备合适的走路walk以及跑步run动画AnimationCinemachine前期设置

  摄像机采用Cinemachine中的Free Look摄像机,该摄像机总共有三层:

  TopRig、MiddleRig以及BottomRig

  通过设定Camera的Target以及Follow,三层的高度半径等,将摄像机设定在合适的位置动画设置

  动画共有两个:Idle站立以及Run跑步,由于人物是通过骨骼坐标变化来实现动画,因此我们可以将这两个动画作出连贯的转换(Unity自动帮我们实现),通过BlendTree将这两个动画设为同一个Blend层中,由于只有两个动画,因此BlendType只需设置为1D(即1维)代码讲解

游戏第三人称人物移动不够丝滑?这份Unity3D游戏开发技术指南收藏好了

  没有项目经验?点击免费参加游戏开发5天训练营,小白也能从0做出一款游戏Demo! >>>

  toMove值的输入由代码anim.SetFloat()控制,通过玩家输入的InputX以及InputZ形成一个二维向量Vector2,通过sqrMagnitude获取向量大小,跟我们设置的一个阈值进行比较,大于则开始将toMove值往Run的状态移动,否则移向Idle状态。

  同时我们还希望toMove值的变化与我们所输入的值有一定的延迟,这样可以使得toMove值的变化更加平滑,动画的转移也就更平滑——通过插值来实现toMove值的改变。anim.SetBool("parameter", value, dampTime, deltatime),即我们希望parameter的参数经过dampTime秒后达到我们设定的参数value值,每deltaTime执行一次(通常设置为Time.deltaTime即一帧执行一次)

  代码,由两部分组成:移动判断GetInputMagnitude以及进行移动Move

  移动判断包括:获取输入值(input_x,input_z)根据该输入值判断是否大于我们设定的阈值,大于则开始动画变化以及执行Move方法,小于则将动画状态往Idle状态转移。

  Move代码:第三人称中,个人认为的最佳移动方式为,根据摄像机的forward值以及right(left为负,使用判断会很麻烦),并进行归一化(我们只希望得到方向,而并非一个具体的值),因此我们采用Camera.main.transform.forward以及Camera.main.transform.right获取归一化后的值,将我们输入的值分别于forward值以及right值相乘后相加(forward * input_z + right * input_x)便得到我们的实际移动方向desireMoveDirection(这是一个世界坐标向量,因为transform.forward返回的是世界坐标),但实际上这样是不行的,我们在执行相乘相加之前我们要将forward和right的y值设置为0,因为我们只希望这个方向只存在于xoz平面,否则人物会发生朝上的旋转。

  接下来就是设置人物转向的问题,当人物行走时,要保证人物的z轴要和相机的z轴一致,由于再之前我们已经获取到了具体方向desireMoveDirection,因此我们只需通过Quaternion.LookRotation(desireMoveDirection)便可获取我们人物旋转所需的四元数(注:以往都是通过目标点.position - transform.position来获得一个指向目标点的方向向量,但在这个案例中,我们已经有了方向,只需将人物的z轴根据四元数旋转到对应位置即可),同样通过插值来实现平滑的旋转transform.roatateion = Quaternion.Lerp(transform.rotation, desireMoveRotation, Time.deltaTime)来实现。至此一个简单的第三人称移动已经实现,可在此基础上加入rush加速跑模式,只需修改动画播放速度Animator.speed以及人物移动速度即可。(文末给出参考范例)

  至此,我们已经可以实现自己的第三人称移动控制体系。

  相信在各位反复练习下我们已经能够掌握如何建立第三人称移动控制体系了,但是能够独立完成一个游戏demo还需要学习更多的基础技术点并长期积累项目经验,然而很多同学甚至不知道该怎样获取项目经验,因此我们开设了如《ARPG》、《元气骑士》、《饥荒》等游戏开发训练营,授之以鱼,我们希望同学们通过训练营掌握的是学习方法以及分析问题,解决问题的能力,这也是成为一个游戏开发高手,成为一个高级的开发者必备的能力之一。原价198,现在限时免费领取。

  点此免费参加游戏开发5天训练营,小白也能从0做出一款游戏Demo! >>>

  课程每晚8点以直播方式进行,报名后还会进入专属的学习辅导群,课程大纲如下 :

  现在点击下方卡片就可以免费报名参加!lol灭世魔神狗头

  点此免费参加游戏开发5天训练营,小白也能从0做出一款游戏Demo! >>>

  学完你能收获什么?

  1) 掌握游戏开发基本流程

  2) 掌握游戏开发中角色控制与角色数值开发

  3) 掌握摄像机设定,实现昼夜系统设定2次元女生***

  4) 掌握NPC的智能AI设定与逻辑

  5) 掌握求职阶段准备方式和流程,具备应对面试的能力

  6) 了解游戏开发工程师职业发展路径

  7) 针对个人情况,在直播现场得到职业发展建议

  连续5天,450+分钟

  不仅仅让你做出饥荒游戏Demo,更会让你了解游戏行业求职所面临最重要的问题!电竞传奇

  让你在入行前避过这些坑

  快点击下方立刻免费参加本次训练营吧!

  点此免费参加游戏开发5天训练营,小白也能从0做出一款游戏Demo! >>>

  代码示例

pc月之光太阳之影FD游戏测评~一辉弟弟我可 《原来你也玩原神》第二季