obsidian/笔记文件/2.笔记/第三人称角色控制_第二章.md
2025-03-26 00:02:56 +08:00

4.9 KiB
Raw Permalink Blame History

进入正式游戏的控制脚本

!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