Unity战斗框架 技能框架
- Demo获取地址*:
- 1.简介
- 2.技能对象
- 2.1 技能触发
- 2.2 技能执行
- 2.2.1 技能单元处理器
- 2.3 技能接受
- 2.开发流程
- 2.1 技能数据配置
- 2.2 技能数据读取
- 2.3 技能发射器初始化
- 2.4 技能发射器触发
- 2.4 技能伤害触发
Demo获取地址*:
1.简介
该框架基本可以概括为以下这句话:
释放某技能后,先左斩一下(播个动画放个特效),触发怪物浮空,再点一下,右斩一下(播个动画放个特效),触发怪物掉血伤害
- 先左斩后右斩,说明技能需要是一个链状的触发结构
- 再点一下,技能链间需要有对应的连接器,检测连接条件
- 播放动画、音效,说明需要其具体的处理器
- 触发伤害,说明需要拥有时机
- 触发浮空或掉血伤害,说明需要有多种伤害的触发方式
2.技能对象
2.1 技能触发
- 技能释放器:用于技能触发、包含技能链之间的链接逻辑,是一个技能的入口
- 技能链连接器:用于检测技能链单元之间的连接条件,如果不满足,则到该单元就中断,如满足,则进入下一个单元
2.2 技能执行
2.2.1 技能单元处理器
所有单元处理器结束后,该技能单元才算结束
- 动画技能单元处理器
- 时间技能单元处理器
- 特效技能单元处理器
…
可自行扩展
2.3 技能接受
- 伤害触发器:做触发时机的监听,当触发时通过技能所提供的区域获取该范围内的技能接收器
- 技能接收器:做技能的接收,然后按照对应的伤害类型触发伤害解算器
- 伤害解算器:通过伤害类型相对应的参数触发伤害,要求该接收器具有对应的受伤害能力
- 受伤害能力接口:例如减HP、浮空,需要实现对应的受伤害能力
2.开发流程
2.1 技能数据配置
- 通常开发都是数据驱动的:
(1)技能链数据:
(2)技能单位数据: - 使用Excel主要是为了方便配置人员配置,在程序上应当转化为效率较高的数据格式,即ScriptableObject
2.2 技能数据读取
这里主要直接使用Resources.Load
2.3 技能发射器初始化
- 根据ID取得对应的数据,设置到技能发射器中
- 发射器内部会根据技能数据中的技能链数据创建技能单元出来(动、静态数据要做到分离)
- 根据对应的技能会初始化对应的技能处理器,然后再添加进同步容器中(所有处理器都处理完后该技能单元才算结束)
- 此时伤害触发器也在其中初始化了,主要负责时机和区域的提供
2.4 技能发射器触发
- 使用对应的发射器开始发射
- 如果技能是未被触发的,会检测技能链的触发条件是否满足,如果技能是进行状态的,则会进行连接器的检测(例如连击的判断,如果没有在一阶段的状态下继续点击,则退出该技能)
- 一旦进入执行状态,则会触发技能单元处理器
(1)动画处理器:
根据动画的执行事件来判断是否结束
(2)时间处理器:
根据是否超时来判断是否结束
(3)特效处理器:
根据特效是否加载结束判断是否结束
…
可以通过在技能发射器中去写定究竟是以哪一个处理器结束为准
2.4 技能伤害触发
- 技能伤害的触发主要由配置来决定:
目前主要是根据时间和根据特效触发两种
- 这里着重讲一下根据特效触发,特效加载时会在特效身上取得一个特效控制器基类,继承于这个基类的都将实现对应的伤害触发时机和伤害区域获取接口
- 这样特效就可以根据是使用时间,还是使用Unity的触发器来进行触发
- 触发完后也可以根据具体的返回伤害区域
- 伤害区域将会交由环境系统去计算,返回该范围内的技能接收器,并接受这个技能
6.技能接收器会根据对应的伤害类型触发对应的受伤能力