先简单演示下技能编辑器的功能。我们最初使用unity版本为5.4.0,现升级到5.6.4p4。
- 缘起
在一个新组建的团队里,只有一个策划兼制作人,加我一个客户端(公司美术内包),需要在一个月之内快速出一个ACT动作的demo,demo需要有至少三个角色和若干小兵,demo通过评审会正式立项。当时我并没有做过这类act游戏,对这类游戏所知甚少,在策划的讲解,以及恶补了一些文章后,我们定下了计划:
1,在半个月内做一个技能编辑器,要支持编辑动作每一帧的攻击受击框,配置按键指令的招式转换,以及各种攻击数据的配置。
为了提高后续策划的工作效率,技能编辑器,必不可少。
2,同时制定美术制作动作的规范,以及我们如何切分动作,动作的复用和衔接
3,第三周做runtime的战斗逻辑,第四周整合资源,编辑器的配置,出demo包
- 计划
时间紧,任务重,我给自己的任务是不加班完成,并尽可能将编辑器功能提前完成,给后续留出更多的调整和debug的时间,所以,需要:
1,尽可能和新策划搞清楚需求,做prototype的推演,推演editor下如何配置,runtime如何执行。有经验的程序,会花更多的时间在前期的需求整理和逻辑推演上。
2,和美术梳理工作流程,让美术可以立刻开始做事情,后续能和我们的编辑器很好地对接。所以,在demo阶段,美术只提供模型fbx和动画fbx,剩下由程序整合。
- 分析和选择
接下来,有几个技术点,需要做出选择:
1,是使用animator 的状态机来做逻辑,还是自己做切换逻辑?
最终选择了自己做逻辑切换,核心就是工作流可定制。
2,是使用unity的GUI来做编辑器,还是UGUI做?
最终选择用UGUI,主要是怕用GUI时间来不及。另一个原因是我希望策划能在一个技能编辑器下做所有的操作,流程一体化不要那种在A prefab上挂个脚本,再在B prefab上挂个脚本,最后把A和B拖到C prefab脚本的field上这种编辑方式,这不利于策划理顺思路。(可对比白鹭引擎一堆Editor和Unity All in one)
3,如何做编辑器数据的序列化?
最终选择了自己做序列化,最主要的是数据和资源分离,以及热更新。
4,是使用unity自带的Collider(物理系统)来做碰撞,还是自己做碰撞检测?
因为我们是横版游戏,所以,按传统的格斗游戏做法,只需要做box,而且是不需要旋转的box,自己实现的复杂度大大降低,那肯定自己做更可控。
简单总结下选择方案的思路:
- 没有方案是对所有项目都合适的,选择适合自己项目类型以及开发周期,人员配置的方案
- 要着重考虑数据和资源的分离,热更新。考虑好和美术,策划的衔接工作流程,这些比逻辑本身更重要
- 可控性和开源,尽量使用自己熟悉和可控的实现方式,尽量选择开源的插件和工具
- 关于ACT游戏,我的理解
我作为非act游戏玩家,我理解的act游戏和mmorg,arpg这类游戏的战斗表现上,区别如下:
所以,arpg是介于act游戏和mmorpg之间,arpg和act游戏,有着重大的区别(按策划的话:市面上太多所谓动作游戏,只能说是arpg)。
act游戏,需要:
- 快速的操作反馈,需要玩家衔接好操作,才能输出最大化
- 招式衔接的丰富,不同招式下,不同时刻,不同按键,要切换到不同的招式
- 打击反馈的丰富,被击需要有动作反馈,轻中重,浮空等各种击中方式,被击者需要不同的动作反馈
以上是一个非act玩家,做为程序开发者的理解,方便我区分当年做MMO的经验。
- 开动:以数据为基础来搭建框架
编辑器的目的是为了数据,所以,对于技能(这里只包含按键触发的主动技能)的数据组织如下:
- ActorCfg:角色数据的根,包含所有角色相关数据
- ActorAttr:基础数据,包含资源prefab id,移动速度,重力,指令起始招式id等
- ActInfo:一个动作的信息,对应美术制作的一个动画(animation)
- FrameInfo:每一帧的信息,一般包含攻击,被击框的信息(position,scale),以及一些复杂逻辑使用的标记
- SkillInfo:招式信息。每个招式可以由一个或多个动作(ActInfo)组成,并可以选择动作的帧范围,这样最大程度地复用美术动作,并可以由策划自由发挥,组合出新的动画。
- BoxInfo:不同类型的box,不同信息。比如攻击,被击,霸体等不同box的信息不同。
- HitInfo:攻击类box,击中以后的数据配置
- ChangeCtrl:切换招式的数据。比如在帧范围(0~10内)触发了指令(Up),切换到招式xx
- SkillCtrl:各种技能处理,播放音效,特效,设置速度等等
- Trigger:各种判断条件,条件达成,才会执行ChangeCtrl或SkillCtrl
以上是主要的数据模块,ActInfo主要保存每一帧框的位置缩放信息,SkillInfo保存各种ChangeCtrl和SkillCtrl,并用Trigger来做为生效条件。
后续按策划需求对技能编辑器的扩展,更多是SkillCtrl的添加和Trigger的添加。
通过这一套技能编辑处理,策划可以配置出丰富的表现效果。只要数据组织好了,同一数据,有不同的表现形式,这也是基础的MVC的适用。
欢迎关注专栏
Unity 游戏开发总结