有限状态机,目前有俩状态
![[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]]
其他参数,也是摸索,参考设置一下即可