欢迎书友访问PO18脸红心跳
首页说好做交互电影,独立游戏什么鬼 第67章 杂交版的实现

第67章 杂交版的实现

    对於穿越前的那个世界来说,植物大战殭尸的二次开发並不非常容易。
    每一种独特的新玩法都相当於是从头开始做了一遍。
    这自然跟这部作品本身的架构有点关係。
    这款09年就已经发售了的作品基於c++开发,使用的並不是现代那些成熟完整的游戏框架,在各个方面都有一定的缺陷。
    但林琅从头做一遍,自然不会再老老实实地去一比一照抄,从开发之初,他就选用了c#作为主架构的首选语言。
    哪怕不藉助harmonyx这种注入补丁,他也能够轻鬆加入各种模组支持。
    得益於他內置的程序集加载器,只要模组的结构符合规范,便可以在启动游戏时动態热加载这些置於外部资源中的模组。
    也因此,增加新的植物、殭尸、玩法等的工作量也得以骤降。
    对於植物大战殭尸这款游戏来说,杂交版的完整体量已经完全可以当作dlc来卖了。
    不过林琅不打算这么做,也不准备完整復刻杂交版出来。
    毕竟只是一个用来当作模组开发教学的项目,只要能利用到那些接口就足够了。
    过於繁多的內容反而会打击玩家的创造热情,这些应该由他们自己去发掘。
    这套体系想要实现起来非常简单。
    一个完全面向对象的高级语言,对於游戏来说是非常优雅的。
    首先这些所有新增的植物,自然还是要遵循植物大战殭尸的底层逻辑,继承自同一个基类,也就是实体类。
    为了便於使用,林琅已经提前对实体类进行了诸多衍生实现。
    比如殭尸类、植物类、射弹类等,它们皆出自实体,却又各有不同。
    而这些子类也自然都有著易用的实现。
    就如林琅现在打算做的『双发仙人掌』,自然就继承自植物类中的『射手类』。
    顾名思义,不论是豌豆射手、双发豌豆、机枪、还是双向等,它们皆可以继承自该类。
    只需要覆写它內置的发射函数和弹丸种类的定义,便可以定製出一款截然不同的植物。
    而对於不会编程的玩家来说,林琅也贴心的准备了一个完全可视化的工具。
    射速、弹速、子弹类型、子弹路径、击中行为……
    他几乎为所有可以设想到的情况都预置了接口,实现了一套完全数据化驱动的体系。
    这套机制可以让玩家在完全0代码基础的条件下肆意发挥自己的想像力。
    你甚至可以做出一个发射樱桃炸弹的机枪射手!
    没错,弹丸可不一定要是豌豆或是尖刺之类的。
    林琅一不做二不休,乾脆將子弹的限制移除,让所有基於实体类的实现都可以被当作弹丸。
    而为了兼容这一点,他又將子弹的移动剥离成单独的脚本,以动態掛载的形式实现。
    这套机制非常巧妙,它就像是把所有东西都给『插件化』了一般。
    我们大可以將任何东西都视作一个容器,一个能够填入任何脚本的容器。
    比如子弹,直接为它掛载『移动脚本』和『击中脚本』,就可以仅靠修改这两个脚本的参数的情况下让子弹千变万化。
    最可怕的是,这个所谓的『脚本』,同样是一个可以隨意继承实现的类。
    不过想要自定义新的脚本就很难在不编程的情况下做到了。
    这套体系便是整个模组api的核心逻辑。
    基於此,可以开发出无数匪夷所思的充满想像力的另类玩法。
    不过对於脚本的灵活应用,林琅打算留给他已经想好了的第二款模组。
    当下这款自然还是集中在让大家了解如何新增自定义的植物和殭尸等。
    继承自豌豆,將发射函数延迟片刻额外执行一次,並將子弹的引用替换成仙人掌刺。
    仅仅如此操作,一个双发仙人掌便做出来了,当然他还需要为其准备一套美术素材。
    同样的逻辑,阳光炸弹只需要继承自樱桃炸弹,为爆炸击杀后添加一个生成一坨阳光的效果即可。
    有射手类,当然也会有投手类,儘管它们都出自一个叫『攻击型植物』的父类。
    这样的设计虽然非常便於理解和使用,但並非像看上去那样完美。
    复杂的重重嵌套带来的是代码的高度耦合,这其实並不符合编程追求的解耦思想。
    一环套一环的层层依赖,带来的结果是灾难性的可维护性。
    假设某一天林琅突然想要动一动实体类这个万物源根,就有可能一脚踢翻整座『屎山』。
    不过所见即所得,这对於模组开发者而言却是一件好事。
    不消多会儿,林琅便为几种常见的植物类型都做好了变种版本。
    但这还没完,儘管可以直接为它们设置好阳光消耗,直接载入到卡池中,但他还是选择了另一种方式。
    回到主菜单的那个墓碑之上,这玩意儿其实並不像肉眼看上去那样排列了几个按钮来实现。
    事实上这整个ui都是完全程序化生成的,邪门到家。
    为什么要捨近求远的搞成这样的设计呢,这自然也是为了模组作者。
    只需要在mod类的主入口中声明一个『菜单类』,执行註册,它便可以就这么直接显示在墓碑之上。
    藉由此,模组作者只要想,甚至可以完全在不靠注入的情况下对整个ui体系都做出客制化修改。
    也就是所谓的『资源包』、“数据包”功能。
    林琅在主菜单加入了一个『合成』按钮,只要点击,就可以跳转到一个特殊的场景。
    將植物卡组合在一起,只要符合他设置的配方,便可以解锁杂交版的植物。
    当然这整个合成卡牌的场景也是完全程序化的,只不过是调用了內置的『卡槽』类,又调用ui工具生成了一个显示所有持有卡牌的仓库。
    对於0基础用户,林琅则是在开发工具中设置了一个可视化的ui设计工具,拖拽组件到对应位置即可。
    一整套下来,一个全新的玩法便诞生了。
    接下来便是运行工具包中的『编译打包』工具,调用他准备好的程序集將一切都编译成模组文件。
    “来来来,又整新活了,来玩玩看。”


同类推荐: 娇门吟(H)武道从练刀开始这些书总想操我_御书屋逆战苍穹不朽灵魂仙绝恋逆凡之巅双穴少女和她的触手男友