澜山境 > 网游竞技 > 说好做交互电影,独立游戏什么鬼 > 第六十七章 杂交版的实现

第六十七章 杂交版的实现

    对于穿越前的那个世界来说,植物大战僵尸的二次开发并不非常容易。

    每一种独特的新玩法都相当于是从头开始做了一遍。

    这自然跟这部作品本身的架构有点关系。

    但林琅从头做一遍,自然不会再老老实实

    哪怕不借助HarnyX这种注入补丁,他也能够轻松添加各种模块支持。

    得益于他内置的程序集加载器,只要模块的结构符合规范,便可以在激活游戏时动态热加载这些置于外部资源中的模块。

    也因此,增加新的植物、僵尸、玩法等的工作量也得以骤降。

    对于植物大战僵尸这款游戏来说,杂交版的完整体量已经完全可以当作DLC来卖了。

    不过林琅不打算这么做,也不准备完整复刻杂交版出来。

    毕竟只是一个用来当作模块开发教程的项目,只要能利用到那些接口就足够了。

    过于繁多的内容反而会打击玩家的创造热情,这些应该由他们自己去发掘。

    这套体系想要实现起来非常简单。

    一个完全面向对象的高级语言,对于游戏来说是非常优雅的。

    首先这些所有新增的植物,自然还是要遵循植物大战僵尸的底层逻辑,继承自同一个基类,也就是实体类。

    为了便于使用,林琅已经提前对实体类进行了诸多衍生实现。

    比如僵尸类、植物类、射弹类等,它们皆出自实体,却又各有不同。

    而这些子类也自然都有着易用的实现。

    就如林琅现在打算做的‘双发仙人掌’,自然就继承自植物类中的‘射手类’。

    顾名思义,不论是豌豆射手、双发豌豆、机枪、还是双向等,它们皆可以继承自该类。

    只需要覆写它内置的发射函数和弹丸种类的定义,便可以定制出一款截然不同的植物。

    而对于不会编程的玩家来说,林琅也贴心的准备了一个完全可视化的工具。

    射速、弹速、子弹类型、子弹路径、击中行为……

    他几乎为所有可以设想到的情况都预置了接口,实现了一套完全数据化驱动的体系。

    这套机制可以让玩家在完全0代码基础的条件下肆意发挥自己的想象力。

    你甚至可以做出一个发射樱桃炸弹的机枪射手!

    没错,弹丸可不一定要是豌豆或是尖刺之类的。

    林琅一不做二不休,干脆将子弹的限制移除,让所有基于实体类的实现都可以被当作弹丸。

    而为了兼容这一点,他又将子弹的移动剥离成单独的脚本,以动态挂载的形式实现。

    这套机制非常巧妙,它就象是把所有东西都给‘插件化’了一般。

    我们大可以将任何东西都视作一个容器,一个能够填入任何脚本的容器。

    比如子弹,直接为它挂载‘移动脚本’和‘击中脚本’,就可以仅靠修改这两个脚本的参数的情况下让子弹千变万化。

    最可怕的是,这个所谓的‘脚本’,同样是一个可以随意继承实现的类。

    不过想要自定义新的脚本就很难在不编程的情况下做到了。

    这套体系便是整个模块API的内核逻辑。

    基于此,可以开发出无数匪夷所思的充满想象力的另类玩法。

    不过对于脚本的灵活应用,林琅打算留给他已经想好了的第二款模块。

    当下这款自然还是集中在让大家了解如何新增自定义的植物和僵尸等。

    继承自豌豆,将发射函数延迟片刻额外执行一次,并将子弹的引用替换成仙人掌刺。

    仅仅如此操作,一个双发仙人掌便做出来了,当然他还需要为其准备一套美术素材。

    同样的逻辑,阳光炸弹只需要继承自樱桃炸弹,为爆炸击杀后添加一个生成一坨阳光的效果即可。

    有射手类,当然也会有投手类,尽管它们都出自一个叫‘攻击型植物’的父类。

    这样的设计虽然非常便于理解和使用,但并非象看上去那样完美。

    复杂的重重嵌套带来的是代码的高度耦合,这其实并不符合编程追求的解耦思想。

    一环套一环的层层依赖,带来的结果是灾难性的可维护性。

    假设某一天林琅突然想要动一动实体类这个万物源根,就有可能一脚踢翻整座‘屎山’。

    不过所见即所得,这对于模块开发者而言却是一件好事。

    不消多会儿,林琅便为几种常见的植物类型都做好了变种版本。

    但这还没完,尽管可以直接为它们设置好阳光消耗,直接加载到卡池中,但他还是选择了另一种方式。

    回到主菜单的那个墓碑之上,这玩意儿其实并不象肉眼看上去那样排列了几个按钮来实现。

    事实上这整个UI都是完全程序化生成的,邪门到家。

    为什么要舍近求远的搞成这样的设计呢,这自然也是为了模块作者。

    只需要在Mod类的主入口中声明一个‘菜单类’,执行注册,它便可以就这么直接显示在墓碑之上。

    借由此,模块作者只要想,甚至可以完全在不靠注入的情况下对整个UI体系都做出客制化修改。

    也就是所谓的‘资源包’、“数据包”功能。

    林琅在主菜单添加了一个‘合成’按钮,只要点击,就可以跳转到一个特殊的场景。

    将植物卡组合在一起,只要符合他设置的配方,便可以解锁杂交版的植物。

    当然这整个合成卡牌的场景也是完全程序化的,只不过是调用了内置的‘卡槽’类,又调用UI工具生成了一个显示所有持有卡牌的仓库。

    对于0基础用户,林琅则是在开发工具中设置了一个可视化的UI设计工具,拖拽组件到映射位置即可。

    一整套下来,一个全新的玩法便诞生了。

    接下来便是运行工具包中的‘编译打包’工具,调用他准备好的程序集将一切都编译成模块文档。

    “来来来,又整新活了,来玩玩看。”