有限状态机,目前有俩状态 ![[Pasted image 20240306124321.png]] 状态基类; 初始化的时候,是传参赋值,状态机控制器 ![[Pasted image 20240306124457.png]] 有一个,玩家状态基类: ![[Pasted image 20240306124624.png]] 玩家状态也有俩子类 ![[Pasted image 20240306124543.png]] ![[Pasted image 20240306124553.png]] ![[Pasted image 20240306124600.png]] 状态也是对象池,统一管理 ![[Pasted image 20240306124749.png]] 父类的,进入,退出,更新,仨虚函数 ![[Pasted image 20240306124804.png]] 其中,退出的函数重写,只有移动的状态类,因为前面,它注册了走路声,相关的动画事件函数,退出的时候,需要移除一下动画事件 ![[Pasted image 20240306124852.png]] 状态控制器逻辑 ![[Pasted image 20240306125003.png]] 获取状态,也是从stateDic状态字典 ![[Pasted image 20240306125038.png]] 切换状态的时候,就是退出当前状态,然后切换成,新状态即可 ![[Pasted image 20240306125105.png]] 控制器停止工作: 使用了GetEnumerator遍历所有状态,进行退出 ![[Pasted image 20240306125140.png]] 销毁动画控制器的话,也是统一对象池管理的 ![[Pasted image 20240306125211.png]] 玩家控制脚本,对状态控制器,完成初始化,默认状态是Idle; ![[Pasted image 20240306125256.png]] 运行游戏,移动一下,就可以顺利构建出,完整的playable图例 ![[Pasted image 20240306125356.png]] 动画过渡,如前所述,是用了协程 ![[Pasted image 20240306131211.png]] 动画过渡的具体逻辑 修改权重即可,如果没有过渡时间,就直接硬切 ![[Pasted image 20240306131324.png]] 当前游戏,都没有硬切,过渡时间设定为0.25 ![[Pasted image 20240306131533.png]] 相机控制,用了这个常见插件 ![[Pasted image 20240306131907.png]] 创建入口 ![[Pasted image 20240306131937.png]] ![[Pasted image 20240306132010.png]] 默认相机,会自动加上,这个脚本; 简单修改一下参数 ![[Pasted image 20240306132038.png]] 相机逻辑设置,跟随和看向 ![[Pasted image 20240306132201.png]] 相机跟随鼠标移动 ![[Pasted image 20240306132430.png]] 其他参数,也是摸索,参考设置一下即可