进入正式游戏的控制脚本
![[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]]