starvalor吧 关注:549贴子:6,075

抛砖引玉 ShipModelData分析

只看楼主收藏回复

作为一个没用过unity的半吊子...资源模型部分已经超纲,因此不会涉及相关内容,只能确定ShipModelData(舰船模板)和2d贴图与 3D模型在不同的地方加载。
以游戏内月神(Thoth, ID 94)为模板,进行魔改。先贴一张初始数据图。
缓更


IP属地:重庆1楼2025-08-17 04:19回复
    首先是名字。
    Thoth是埃及神话的神祗,翻译在根目录\Language\chinese_main.txt内,不涉及代码,自行替换。包含游戏内的一些残留英文,也是在这里。
    顺便一提,游戏内的所有文本都是硬编码读取语言包替换, 因此图内对不齐是...程序员的锅,你切成英语就齐了,并且字体也要丰富不少。


    IP属地:重庆2楼2025-08-17 04:24
    回复
      2026-05-07 08:02:11
      广告
      不感兴趣
      开通SVIP免广告
      能改基础属性这些是吧,期待哦


      IP属地:广东来自Android客户端3楼2025-08-17 04:45
      收起回复
        需要工具 dnSpy (反编译源码、修改源码), Visaul Studio(编译mod)。
        游戏内第一次、可能也是唯一一次初始化ShipDataModel类,在ShipDB类的LoadDatabaseForce()方法,因此,代码修改我们定在LoadDatabaseForce()方法之后,如果直接修改源码则在LoadDatabaseForce()末尾处添加即可。
        首先通过{ ShipModelData shipModelData = shipModels.Find((ShipModelData s) => s.id == 94) ; }获取到月神模板。
        而Harmony库访问私有成员则需要额外操作。
        ——————————————————————
        首先是 月神的三条词缀,分别为 遭遇更强敌人、护甲加成、穿甲加成。

        如以下代码
        CSharp的数组为定长数组,因此我们需要重新new一个。
        如图,所有ShipBonus的类都是以这个开头、相关类可以通过dnSpy查看, 大多数都是简单数值加成。
        类名绝大部分清晰明了,其中EnhancementSolt是游戏内通过材料改造船体的槽位,初始默认3个;ShipEnhancementEffect则是对改造的数值百分比增强。
        ShipBonusDB.Get(int index)则是获取游戏内置的词缀,使用方法如上,不过数值较低,查看也很麻烦,因此更建议手动添加。
        ... ...
        首先自然自己魔改得很强,那敌人也要更强才对,因此extraBounty我设了个4,默认我猜是1?袭击强度是会乘上extraBounty......所以这条填得很离谱。
        月神词缀属性足够强了,因此就不魔改了,保留一下改造槽位扩展。
        ——————————————————————————
        顺带一提,除了蓝字词缀,还有黄字词缀,位于蓝字词缀之后。
        不过游戏内目前有且仅有新建角色时,添加的那条“AddTrait(129);”,即“低于售价”,这条词缀也是通过ShipBonusDB类添加的。
        某种程度上也是为后续内容搭的框架。
        ——————————————————————————
        ... ...
        瞎叭叭一下,说是ShipBonus,尤其是ShipBonusDB内置的buff,实际上是包含了很多船员、船长(玩家)的增益,蛮混乱的。


        IP属地:重庆4楼2025-08-17 05:10
        收起回复
          然后是ShipClass,即船级、类别。
          影响 【炮塔热量冷却速率、热能上限、武器射程、稳定性】等白字内容,是根据类别预制的,不可修改,或是全部修改(?不要吧.. ..)。
          其中游戏内启用了6个级别,但实际上有第七个级别——Kraken;
          相关代码{shipModelData.shipClass = ShipClassLevel.Kraken;},
          不会报错,各位可以去试一试,但我魔改的毕竟是小船,就不动了。


          IP属地:重庆5楼2025-08-17 05:24
          收起回复
            还是贴个图吧,也别太懒。

            ... ...
            原版叫克拉肯级(某著名海怪),这个翻译... ...
            还是回头找个时间让AI跑一下翻译或是校对一下吧,这个翻译好傻。


            IP属地:重庆6楼2025-08-17 05:31
            收起回复
              然后是 ShipRole(舰船角色) 与 manufacturer(阵营归属)
              其中月神可能因为数值太离谱了,因此没有ShipRole的加成。
              而阵营归属则是机械巫师。
              这两条和ShipClass是一样的,也固定buff。要么不改要么全改。
              ——————————————————————————————
              以【快艇】举例,他这两项分别为
              【战士(shipModelData.ShipRole = ShipRole.Fighter)】( 穿甲10% 与 巨物杀手)
              【独立(shipModelData.manufacturer = TFaction.Independent)】(改造槽位+1)
              ——————————————————————————————
              顺带补充一下,巨物杀手之类,也是可以通过上面的蓝色词条获取。


              IP属地:重庆7楼2025-08-17 05:46
              回复
                接下来是舰船的基础属性,这个没什么好说的。
                不过确实是基础属性,具体的转向啊相关属性则是由重量等相关属性计算得来。
                直接贴图,有注释。


                IP属地:重庆8楼2025-08-17 05:53
                回复
                  2026-05-07 07:56:11
                  广告
                  不感兴趣
                  开通SVIP免广告

                  开始偷懒了...如图。
                  因为比较长,就不直接加注释了。
                  ShipModelData.crewSpace就是舰船能用的船员类型与数量。
                  ShipModelData.passengers就是乘客座位。
                  其中从上到下,船员类型分别为:【副驾驶、炮手、机械师、驾驶员、导航员、管理员、文员(参谋和教练)】
                  其实船员类型远不止这几种,还有副船长之类(不如副驾驶)。
                  还有很多很多没实装的类型,有闲可以去自己试试,但这几项几乎已经覆盖全部加成了。
                  ————————————————
                  炮员的加成是按顺序添加炮台,具体什么规则没细测,同一炮台只吃一个炮手加成,建议和炮台相等就行,更多的也没用。
                  ————————————————
                  额外补充,虽然这个后续内容,但是提前说一下,固定炮台是不吃炮手加成的(比如月神的5、6号固定炮台)。


                  IP属地:重庆9楼2025-08-17 06:08
                  回复
                    漏了个机库。
                    机库分【舰船机库】、【无人机机库】两类。
                    【舰船机库】的规则是,可以携带【船级-2】的飞机,比如3级的月神,可以带1级的穿梭机...... ....... emmmmm...
                    【无人机机库】则需要设备配合,而设备自带机库容量,也不会放飞更多的无人机,所以也无用(免费的容量?)。
                    ——————————————
                    //舰船机库
                    shipModelData.hangarShipSpace = 50;
                    //无人机机库
                    shipModelData.hangarDroneSpace = 50;
                    ——————————————
                    需要注意的是货舱、武器舱、机库都会增加船的所占空间大小,因此也不是越高越好。
                    ... ...
                    emmm,感觉还漏了什么... 想起再说吧。


                    IP属地:重庆10楼2025-08-17 06:19
                    回复
                      好叻,接下来是重头戏,也算是“难点”了。
                      关于武器槽位的修改,这部分比较麻烦。实际上我也没完全弄懂,尤其是涉及Unity的GameObject\Transform相关。
                      but! It work.
                      ————————————————————
                      首先是获取到武器槽位

                      普通炮台指几乎所有炮台,包括“固定的脊峰炮台”。
                      而“固定炮台”则十分奇怪,因为...他没有炮台,因为没有炮台,所以也不吃炮手加成。
                      解决方法嘛,那当然是给他添加一个炮台。
                      如上代码,需要注意的是,添加完炮台之后记得给他一个索引。
                      ————————————————————

                      如图,我们修改的是月神5号炮台位,但并不希望修改炮台的基础属性,因此这几条就把它变为一个普通的定点炮台。
                      好叭,也不是那么普通,因为后续要针对这个炮位额外强化,因此标星,并且加上了数量与容量限制。


                      IP属地:重庆11楼2025-08-17 06:43
                      收起回复

                        如图,已注释。
                        值得注意的是,充能、射击、冷却三件套要么默认、要么都设置一下,不然会直接哑火。
                        到这里,你已经可以自定义脊峰炮台了,实际上,上面就是V6B-A的脊峰翻版,当然还有更多属性,请dnSpy里查看。


                        IP属地:重庆12楼2025-08-17 07:06
                        回复

                          如图,... 这里很微妙啊, 因为我对unity真的不了解。
                          但!能用!
                          这个就是游戏内多管炮台的实现原理了。不过一般的多管炮台比如V6B-A的,是从3个炮口射出,也就是说、额外的炮台的transform的值是不一样的。
                          额外炮台也没限制,想加多少加多少,而且消耗等效单一武器。
                          也就是说,记得上debuff,不然太超模了。
                          哪怕这里-25%的伤害,依然等效225%伤害。
                          ————————————————————
                          喔,上面又忘了, 这里补一句,蓄力攻击自带约60%伤害加成。
                          细心的朋友已经发现了,脊峰和多重射击完全不冲突... ...
                          ————————————————————
                          贴个上面修改的实机示例

                          7级克拉肯级的射程加成+脊峰....这是初始采矿光束... ...
                          简易激光整出了点射型的射速... ...


                          IP属地:重庆13楼2025-08-17 07:26
                          回复
                            到此为止,已经可以捏出绝大部分想要的舰船数据了。
                            如果想修改一些常见的舰船...并且不想其他人刷出来...我没测试,也没翻相关代码...日后再说。
                            如果添加新船的话,要修改的地方就多了狸,我发这个贴,就是想看看能不能引一个大佬出来解决问题。
                            ————————————
                            还有一些无关紧要的属性,诸如shipModelData.rarity这种... 有兴趣可以自行添加。
                            最后,全部的代码以及mod... 有人会需要吗? 应该没有吧,没有的话,我就偷个懒不发了。


                            IP属地:重庆14楼2025-08-17 07:37
                            回复
                              2026-05-07 07:50:11
                              广告
                              不感兴趣
                              开通SVIP免广告
                              大佬,后面的图能截图截完整吗,看一会儿就忘了这一堆在哪一类了,谢谢大佬,spinal mount 我昨天还在找在哪里改,今天就看到你的贴了


                              IP属地:河南15楼2025-08-17 10:36
                              收起回复