游戏序章战斗模板DEMO设计案(上)

之前讲过要基于Ellan Jiang大神的Unity游戏框架做一个以有限状态机实现的流程控制机制为基础的序章剧情战斗模版DEMO。

因为现在实习公司的序章剧情战斗(注意不是新手引导)完全是程序将整套写死的代码嵌入实现的。也就是说,任何关于序章剧情战斗本身的流程或细节变动,都需要程序开发。我的第一感觉就是,“这么做有问题啊”。

尽管理论上这也是能实现需求效果的,但在实际研发过程中,这么做就造成了很多问题。比如我们目前是多个核心玩法一致的“换皮”项目同时研发的,结果几个新手战都要程序专门排期从头写一遍,之后反复修改和优化也需要程序全程参与。虽说序章阶段确实有必要投入这般的人力,但是也应当以基本的效率为前提,特别是对程序资源紧张的团队来说。而且这样折腾,最后还是因为时间问题,导致很多细节都来不及优化。

作为策划,我认为在这方面,理想的研发情况,应当是程序生产强壮的轮子,策划打磨内容的。

当然,扯了这么多,也不排除我的想法都是错的的可能。不过写一个模版,造一个轮子,总是没有坏处的,就算没什么卵用,也能学习学习嘛。

目前,我的这个DEMO的底层功能已经基于游戏框架封装好了,~~其实框架里很多东西都还是知其然而已,~~ 所以直接开始梳理这个模板本身的设计。因为设计和实现都是自己,所以设计案更偏介绍和“TODO”性质一点,一些表现细节,就在实现过程中即兴发挥了。


开发环境

引擎: Unity2017.3.0f3
语言: C#

开发目标

  1. 做一个战斗小游戏(伪),脱离序章模版,也能够独立运行,并接受多类基本操作,表现操作反馈。
  2. 整理实现出几类基本的序章功能,将它们整合到序章模版中,通过读取配表来实现序章剧情战斗,尽量加强模版本身的可移植性。
  3. 在已有操作接口和订阅事件不变的情况下,对战斗小游戏(伪)的任何改动和拓展都不影响序章,反之亦然。

进入游戏

进入游戏后,会转到主菜单界面(中间的资源载入、场景切换部分已经封装好了,不再表),四个选项吧:常规模式、序章模式、游戏说明、退出游戏。
常规模式和序章模式都会进入游戏战斗场景,不过序章模式会启用游戏序章脚本流程(NB_ProcedureScript),读表控制序章剧情战斗。值得一提的是,按照Ellan Jiang大神的框架设计,既然是用游戏模式(GameMode)区分常规游戏和序章,那么序章的脚本执行也应该是在序章模式的GameMain里才对,我现在的做法可能是在给自己挖坑……不过还好只是个DEMO,就算又坑也不会太深,发现了就当学习了吧。~~也可能我做了一半就发现了其中奥妙,然后转变写法了。~~
游戏说明和退出游戏不多说了。

游戏战斗部分

游戏战斗部分可以想象成是模拟《战斗之心》(BattleHeart)的核心玩法, ~~当然只是模拟意思意思,~~ 将游戏基本表现要素简化到只有plane(代表游戏场景)、shape(代表英雄、敌人等游戏单位)和UI,战斗操作则还是点击单位、点击地面、拖动和点击技能按钮四种。
表现要素:
– plane:
游戏场景,也就是地板,好像没什么好说的,可以变色变贴图。对了,顺便要带个记录场景上所有shape的列表.
– shape:
游戏的基本单位,有ID、阵营、生命值、攻击力、攻击距离、速度、颜色、缩放、技能这些写配表里的字段,以及战斗索引、 位置信息、当前目标、是否自动索敌这些初始化后产生的属性。为了方便,实例化后所有属性都是可以修改的。
1.ID:初始化时读表的索引,在游戏里对shape属性一通魔改后,也可以读ID重新从配表获取初属性(如果ID也被魔改了就没办法了);
2.阵营:敌、我,目前初始化时根据这个决定shape形状,敌-立方,我-球体;
3.生命值:生命值为0时,会调用死亡方法,为了方便就没有生命上限的概念了,~~其实也没方便多少~~。
4.当前目标是否自动索敌:先讲这两个,shape入场后,根据游戏模式(常规or序章)决定是否自动索敌,自动的话,如果当前目标为空,会自动选个不同阵营的shape作为当前目标;
5.攻击力攻击距离:shape的当前目标不为空时,会向当前目标移动,移动到攻击距离范围内后,开始上下跳动,每次跳动会减少目标生命值,减少的值就是攻击力了;
6.速度:shape刷新的速率,影响跳动的频率、移动速度这些;
7.颜色缩放:不解释;
8.技能:技能ID,shape调用技能方法时,会以这个ID为索引,从技能配表里选择具体的方法,~~其实对此DEMO而言,这功能时没必要的,纯属练手~~;
9.战斗索引:每个shape初始化后都会放进场景的shap列表里,方便找,这是索引号,事实上,前面的“当前目标”存的也是目标的战斗索引;
10.位置信息:就用U3D自带的transform。
– UI:
战斗里的UI主要是技能控件,玩家阵营的shape入场后会在屏幕下方,创建一个按钮,按钮样式或者文字根据技能ID读技能配表,在常规模式下,技能按钮创建后默认可用,序章模式默认不可用,需要脚本开启。
点击按钮后,抛出事件指挥shape使用技能shape离场时会关闭按钮。
还有血条、指示器、拖线等表现要素,就不一一列举了(可能会省略一些)。
此外,屏幕左上角还是需要一个退回到主菜单的按钮的。
– 拓展:
1.“是否自动索敌”这类状态属性,如果拓展的话,肯定会增多,之后可以专门做个AI配表,存放这些,然后定义成AIID字段。
2.“速度”很可能还是得拆成攻速、移速、刷新频率。
3.释放技能的条件还可以增加能量或者怒气这些。

基本操作:
– 点击单位:
点击场上的shape会选中,一次只能选中一个。选中我方阵营的shape会将该shape作为“点击地面”和“拖动”的操作对象,同时头顶出现指示器,再次点击同一个shape会取消选择。选中敌方阵营的shape会将其设为为所有我方阵营shape的当前目标,同时其头顶出现指示器,再次点击取消选择,但是不改变我方阵营的当前目标了。
– 点击地面:
选中我方阵营的shape后,点击地面,会让该shape暂时关闭自动索敌,移动到点击位置,然后恢复之前的“是否自动索敌”状态。
– 拖动:
选中我方阵营的shape时,不松开点击进行滑动,滑动距离大于阀值后就视为拖动,游戏会进入子弹时间(游戏速度变慢),松手位置为滑动终点。滑动过程会产生UI拖线表现。当滑动终点在地面时,同“点击地面”操作;在敌方阵营的shape上时,将此敌方shape设为选中的我方shape的当前目标。
– 点击技能按钮:
技能按钮本身就存放了技能释放的主体、技能冷却和技能方法索引,点击后,就抛出事件,指挥技能主体对其当前目标,调用技能方法,并进入冷却。技能冷却时,按钮会变成不可用状态。
– 拓展:
1.点击单位和拖动操作还可以优化,比如拖动终点为我方其他shape时,可以让选中的shap和那个shap互换位置。不过暂时先实现基本需求吧。
2.技能按钮的形式可以更多样化一点,比如拖条、转把之类的,但这就不在DEMO里写了。

序章模版部分

之前想的是,序章模版通过在主菜单点击“序章模式”启用,游戏会被序章流程接管,之后进入序章模式游戏主体。不过写完本文后感觉可能把序章模版的逻辑放到序章模式的游戏主逻辑里更符合框架思想。
所以这里还得再多考虑下,先把游戏主体写完吧。

发表评论

电子邮件地址不会被公开。 必填项已用*标注