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