在确定了我大概是要做一个 放置 + 文字冒险 类型的游戏之后,我经过大约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!决定就是你了!!!!