UnityMod开发教程 03 为游戏创建UMM配置

一. 分析

  对于一般玩家来说,下载了UMM之后,要做的就是打开UMM,选择游戏,选择文件夹,点击安装,然后把下载的mod们放到Mods文件夹下。但是,我们现在这个游戏并不能直接从UMM里找到,因为UMM的配置里面并没有我们想要的游戏。那么就需要我们自己来添加这个配置。
  打开UnityModManagerConfig.xml文件,我们可以很明显的看到这里有很多GameInfo标签,每一个就代表了一个游戏的配置,我们来分析一下最新的这个。

    <!-- 0.21.4 -->
    <GameInfo Name="Metal Unit">
        <Folder>Metal Unit</Folder>
        <ModsDirectory>Mods</ModsDirectory>
        <ModInfo>Info.json</ModInfo>
        <GameExe>MetalUnit.exe</GameExe>
        <EntryPoint>[UnityEngine.UIModule.dll]UnityEngine.Canvas.cctor:After</EntryPoint>
        <StartingPoint>[Assembly-CSharp.dll]TitleMenuController.Awake:After</StartingPoint>
    </GameInfo>

  首先是一行注释,告诉了我们这是新版本添加的游戏,然后是一个GameInfo标签,它里面有6个次级标签。GameInfo标签有一个属性Name="Metal Unit",顾名思义,这是游戏的名字,他是显示在UMM里给玩家看的名字。
  再看次级标签:

  • <Folder>Metal Unit</Folder> 这里声明的是游戏文件夹的名字
  • <ModsDirectory>Mods</ModsDirectory> 这里说明mod存放文件夹的名字
  • <ModInfo>Info.json</ModInfo> 这里说明mod描述文件的名字
  • <GameExe>MetalUnit.exe</GameExe> 这里说明游戏程序的名字
  • <EntryPoint>[UnityEngine.UIModule.dll]UnityEngine.Canvas.cctor:After</EntryPoint> 这里说明的是Mod管理器的入口点,一般情况下我们不需要动它,让管理器从Canvas进入是个不错的选择
  • <StartingPoint>[Assembly-CSharp.dll]TitleMenuController.Awake:After</StartingPoint> 这里说明的是进入游戏后启动Mod管理器的地方,一般都是以游戏主界面UI或者游戏管理器作为开始点

二. 实践

  分析之后,让我们来为UMM添加撒币双冠的配置,上面的几个不需要多说,照样子填写即可,我们重点来找一下开始点,因为每个游戏的逻辑都不一样,这里需要我们自己找。打开Dnspy,然后在游戏文件夹Kingdom Two Crowns/KingdomTwoCrowns_Data/Managed下找到Assembly-CSharp.dll,如果你学习过Unity,那么应该会知道,这是游戏逻辑编译的结果,我们将它拖入到Dnspy。
  导入之后,点开AC(Assembly-CSharp的简称),点开AC.dll,我们能看到一堆命名空间,有谷歌的,有DG的等等,这些一般都是开发者使用的插件,或者他们公司以命名空间组织游戏结构的话,也会在这里显示。Unity中的脚本默认都是没有命名空间的,所以我们打开{},就可以看到撒币洋洋洒洒的几百个类。大致浏览一遍,看到了Game,Menu等适合当作开始点的类,这里我们使用Game,将开始点定位在Game类的Awake函数。
  完成的配置如下:

    <GameInfo Name="撒币:双冠">
        <Folder>Kingdom Two Crowns</Folder>
        <ModsDirectory>Mods</ModsDirectory>
        <ModInfo>Info.json</ModInfo>
        <GameExe>KingdomTwoCrowns.exe</GameExe>
        <EntryPoint>[UnityEngine.UIModule.dll]UnityEngine.Canvas.cctor:After</EntryPoint>
        <StartingPoint>[Assembly-CSharp.dll]Game.Awake:After</StartingPoint>
    </GameInfo>

  注:在Unity的组件生命周期中,Awake在构造函数之后,Start之前,一般用于初始化初始化工作。
  写好配置后,我们保存文件,重新打开UMM,就可以看到我们的撒币:双冠了,然后我们直接安装上,接下来开始正式的开发Mod。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。