【指间沙】战斗系统构想

在确定了我大概是要做一个 放置 + 文字冒险 类型的游戏之后,我经过大约5秒钟的思考,决定还是先做战斗部分!主要是因为我觉得战斗系统的实现会比较有趣,而剧情的话,有趣的部分可能更多在于剧本的编写,而不是程序功能上的实现。

在着手编写这个游戏的战斗系统之前,我尝试着做过一个非常简易的HTML版本的Demo。结果发现JS无类型的特点给代码的编写带来了非常好的体验。

比如说,我需要一个“战斗记录”的数据结构用来记录每个回合都发生了什么,此时我只需要编写类似这样的JSON就可以了:

{
    catser = player,
    target = enemy,
    dmg = 20
}

随写随用,非常酸爽!

然而我正打算在Unity中实现这个系统,所以我得用C#来实现这套东西……尽管UnityScript和JS很像,但我此时一点都不想用它。主要是因为我之前从来没用过UnityScript,所以我并不想用UnityScript来实现整个项目,而整个游戏显然包含了除战斗系统之外的很多东西,这些东西我还得用我熟悉的C#来实现。

而我如果想用C#来实现战斗系统的话,我就不得不声明一系列这样的东西。

class CombatRecord {
    Charactor caster;
    Charactor target;
    float dmg;
    public CombatRecord(...) {
        ...
    }
    ....各种构造方法的重载、get、set之类的东西....
}

当然还得编写一大堆配套类,例如用Charactor描述角色,用Skill描述技能……

事实上一开始我确实是这么干的,但是没多久我就觉得有点受不了了,我开始想我什么非得去编写一堆堆的C#类来构建一个一点都不灵活的系统,今后为了继续扩展这个系统,还得编写跟多的一堆堆的C#类。

于是我渐渐意识到,我是不是应该寻找一种办法,能够让我在Unity中使用一种比较灵活的脚本语言,让我从繁杂的数据结构的编写中解脱出来。

我的第一反应就是lua,或者JS。然后立马又觉得应该还是lua,因为UnityScript本身就是某种JS,偏偏我不待见它。而lua小巧而高效,而且有着非常强大的table能够实现各种各样的数据结构。而且情感上来说,lua和游戏编程一直走得非常近。

其实以上的辩证全是废话,真话是:我觉得我作为一个非新手,与其花功夫去学并没有什么X用UnityScript,还不如趁此机会学习一下Lua。

嗯,就这么愉快地决定了!

去Unity的AssetStore搜索了一下,果然有许多现成的lua插件。我幻想了一下在Unity中同时使用C#和lua的美好场景,彻底放弃了用C#来实现战斗系统的念头。

Lua!决定就是你了!!!!

推荐阅读更多精彩内容