1.技能要素
触发机制–何时以某种方式开启技能的生命周期
技能事件–描述技能发生的原子信息
事件效果–对当前游戏环境造成改变
2.技能的简单定义
技能,是以一种规定的方式进行触发,由一系列技能表现串联的,并对当前游戏环境造成相应影响的事件的集合。它一般具有一定的生命周期,会对游戏数值产生改变,有相应的动画、特效及音效表现。
设计
我们有了一个对技能的简单定义之后,对技能的要素有了一个清晰的把握,对我们设计数据结构,从而有效的描述技能,是有很大帮助的。如何进行抽象,如何设计配置,是我们接下来要思考的问题。
1.Unity下的技能的数据结构及配置设计
Q1:利用Unity的动画控制系统Animator进行事件和表现的绑定?
比较了解Unity中动画系统的同学都知道,Unity中的Animator提供在时间轴上添加Event,而且Event上可以添加脚本,脚本里面可以处理技能事件逻辑,比如释放特效、音效和角色动画等等。我们来看看这个描述技能的过程:
优点:
利用自带的时间轴和Event 事件,方便易用
缺点:
对美术资源的依赖强,需等到各种资源到位才能大致设计出一个完整技能
产生大量技能事件脚本,不易扩展
容易产生冗余帧
Q2:设计数据结构如链表或树来描述技能事件,并做编辑支持?
技能事件无非是一连串 Action 的有效集合,一般的技能都是前一个技能事件发生完,接着触发下一个技能事件,这很明显就是一个链表的结构。比较复杂的技能会出现分支的情形,这种情况下我们可以设计技能树,或者利用继续利用链表,在此基础上增加一些特殊的判定方式。
* 优点:
- 不受表现的制约,设计上灵活且独立,各部门并行开发
- 程序上易扩展,好维护
* 缺点:
- 无编辑器支持,需花一定精力进行编辑器扩展
Q3:那么我们采取哪种方式来定义技能?
我的选择是第二种方式,即设计出一套自己的数据结构来定义技能事件和技能属性,再对整套的数据结构进行编辑器的可视化编辑支持。
原因是:
- 大型游戏开发中,团队协作效率压倒一切,让各部门解除依赖,并行开发
- 编辑器的开发让后续的开发可扩展性强,一次消耗,长期受益
Q4:配置采用Json、XML还是其他?
答案是采用 Unity 自带的 yamal 格式的配置结构–ScriptableObject。
原因是:
- 是ScriptableObject 是Unity 原生支持的一种序列化方式,天生友好支持编辑器扩展
2.Unity下的技能编辑器的设计
策划同学在迭代设计游戏角色和怪物的技能时,必然要面对的一个问题就是工具的设计和优化。量大,复杂度高决定了我们必须扩展编辑器来优化这个Work-Flow
网友评论