第三人称角色控制_第二章.md 4.9 KB

进入正式游戏的控制脚本

![[Pasted image 20240305155054.png]]

两个布尔,都是true

![[Pasted image 20240305155130.png]]

删掉旧存档,创建一个新的

![[Pasted image 20240305155159.png]]

初始化玩家数据,具体实现; 这里也用到了,前面序列化相关的逻辑

![[Pasted image 20240305155335.png]]

完成初始化之后,会把数据存起来

![[Pasted image 20240305155654.png]]

把玩家数据,用二进制的方式,存到本地文件,作为存档 如果本地文件不存在,就创建即可

![[Pasted image 20240305155900.png]]

![[Pasted image 20240305155819.png]]

然后,初始化数据

![[Pasted image 20240305160044.png]]

加载玩家 移动速度等相关数据; 根据玩家部件数据,加载各个部件 动画的切换,使用的是有限状态机,默认是idle状态的动画

![[Pasted image 20240305160943.png]]

![[Pasted image 20240305160329.png]]

简介:

![[Pasted image 20240305161437.png]]

源码地址

![[Pasted image 20240305161609.png]]

也可以在包管理,直接搜索下载

![[Pasted image 20240305161643.png]]

入口

![[Pasted image 20240305161726.png]]

![[Pasted image 20240305161910.png]]

运行游戏,可以切换页签,查看当前动画播放相关

![[Pasted image 20240305161951.png]]

playabe实现的具体逻辑脚本:

![[Pasted image 20240305173937.png]]

动画节点基类 需要有端口,设置速度 而且也有对象池回收相关

![[Pasted image 20240305174004.png]]

基类有俩继承者,分别是单动画播放,还有混合动画播放

![[Pasted image 20240305174138.png]]

都会这个标签特性,表示池子属性

![[Pasted image 20240305174224.png]]

![[Pasted image 20240305174211.png]]

![[Pasted image 20240305174526.png]]

根据配置,这里有仨动画

![[Pasted image 20240306113203.png]]

初始化 inputCount里面,是有三个动画

![[Pasted image 20240306113355.png]]

运行游戏,创建图的命名就会出现

![[Pasted image 20240306113537.png]]

上下节点,还有两个port端口,用来修改动画改变的权重

![[Pasted image 20240306114057.png]]

切换不同的动画节点,也是需要销毁旧节点 解除跟PlayableGraph的链接,然后把节点,放回对象池

![[Pasted image 20240306114630.png]]

切换用了协程

![[Pasted image 20240306115012.png]]

单次播放动画: 如果是首次播放,就不需要销毁节点,只需要初始化,设置权重即可

![[Pasted image 20240306115048.png]]

混合动画,也是同理

![[Pasted image 20240306115212.png]]

混合动画,会传递两个动画片段

![[Pasted image 20240306115246.png]]

混合动画节点类,有两个初始化函数,其中一个是传递列表,另一个是单独分开两个clip片段

![[Pasted image 20240306115529.png]]

后者是使用的,分别传递两个动画片段

![[Pasted image 20240306115634.png]]

设置端口索引

![[Pasted image 20240306115703.png]]

![[Pasted image 20240306115716.png]]

动画事件的添加 是往事件字典里面加的

![[Pasted image 20240306115926.png]]

![[Pasted image 20240306115953.png]]

角色步行的时候,加上

![[Pasted image 20240306120031.png]]

整一个随机数,播放脚步声

![[Pasted image 20240306120038.png]]

脚本声资源有这些,随机播放一个

![[Pasted image 20240306153318.png]]

播放音效之后,也会回收资源

![[Pasted image 20240306120132.png]]

![[Pasted image 20240306120202.png]]

这个事件函数,会触发动画事件

![[Pasted image 20240306120222.png]]

同名的动画事件,跑步和走路的,都是这个

![[Pasted image 20240306153018.png]]

移动的时候,断点触发

![[Pasted image 20240306120341.png]]

状态切换,用了有限状态机的相关逻辑 设置默认状态是idle

![[Pasted image 20240306120507.png]]

默认播放idle动画

![[Pasted image 20240306120544.png]]

单次:

![[Pasted image 20240306120555.png]]

这是从配置文件,获取动画名字的接口:

![[Pasted image 20240306120617.png]]

默认状态下的update函数,判断输入,切换到move状态

![[Pasted image 20240306120722.png]]

然后,就到了移动的状态节点了; 移动状态用到了,混合动画节点:走路和跑步,走路的index是0,跑步是1; 这里是核心的修改两者权重的逻辑

![[Pasted image 20240306121222.png]]

![[Pasted image 20240306121903.png]]

移动状态初始化,默认是走路的权重

![[Pasted image 20240306121447.png]]

移动状态节点的更新函数; 按住LeftShift的时候,会切换;

![[Pasted image 20240306121552.png]]

相机的旋转和玩家角色的旋转,逻辑处理

![[Pasted image 20240306133337.png]]

![[Pasted image 20240306121753.png]]

运行游戏,角色直走的时候,移动鼠标修改镜头,角色也会跟随旋转

![[Pasted image 20240306133612.png]]

动画的播放速度,影响实际位移速度:

![[Pasted image 20240306122008.png]]

最终在这里触发

![[Pasted image 20240306122114.png]]