角色控制器基类
特性[RequireComponent(Type)]在挂载该脚本时会自动挂载Type类型的组件,这里挂载CharacterController组件
自身重力实现
角色控制器
实现移动,转向逻辑
对应逻辑要执行动画的播放
相机控制(碰撞检测)
这里用一个空物体作为主相机的父亲,相机的鼠标控制旋转逻辑由相机本身GameObject控制,碰撞的距离变化由父物体控制,实现逻辑分离
Physical.SphereCast检测后方是否有物体
obj.TransformPoint(pos) 相对位置转世界位置
攀爬
可以在角色基类里实现
hit.collider.bounds 获取对应碰撞体的轴对齐包围盒,包含了盒子的大小等一些数据,这里主要用于检测墙体高度
在攀爬动作上挂载StateMachineBehaviour脚本,在OnStateUpdate(动画更新)函数中使用_animator.MatchTarget匹配到对应要抓取的位置
抓取位置通过全局事件从角色基类里实现射线检测墙体后传递过来
抓取墙体的高度应为_hitOfClimbWall.collider.bounds.size.y / 2 + _hitOfClimbWall.collider.transform.position.y
事件中心管理器
用于全局调用方法
用Dictionary实现字符串映射对应的事件
使用IEventCenter接口作为Value事件,方便使用泛型父类继承IEventCenter,实现多参数传递
Animator动画相关
使用AnimationStringToHash将动画名称或Animator变量转化为对应得Hash值,实现高速调用
角色招式系统
使用ScriptableObject实现招式逻辑与数据分离
用ComboDataSO存储单个招式,包含招式名称,CD(冷却到可以衔接下一招),伤害等
用ComboSO存储连招,表现为List<ComboDataSO>,提供方法获取对应ComboDataSO的相关信息,方便在实现ComboControl时获取消息
连招攻击间隔由计时器帮助实现,在一招打出时_canCombo=false,用计时器定时在对应CD后执行事件将_canCombo=ture
计时器
分为GameTimer和GameTimerManager
主要作用为倒计时执行事件
音效
使用对象池缓存音效的GameObject,挂载音效播放脚本
音效数据使用ScriptableObject配置
音效播放使用AnimationEvent

评论(0)
暂无评论