Rimworld Mod制作教程5 Mod的UI编写

废话

如果你的mod有一些全局变量供用户控制,你需要为你的Mod编写一个设置选项面板。
过程非常简单,只需要继承两个类并重写核心方法,分别是Mod和ModSettings。ModSettings负责储存数据,Mod负责绘制UI。

核心内容

1.Mod的UI编写

1.1 Model

MVC中的M层 储存数据相关

using Verse;
namespace test
{
    public class TestSetting:ModSettings
    {
        #region param
        public bool testBool = false;
        public float testFloat = 1f;
        public int testInt = 2500; 
        public UnityEngine.Vector2 scrollPos = UnityEngine.Vector2.zero;
        #endregion
        /// <summary>
        /// 反序列化
        /// </summary>
        public override void ExposeData()
        {
            base.ExposeData();
            Scribe_Values.Look(ref testBool, "TestBool", false);
            Scribe_Values.Look(ref testFloat, "TestFloat", 1f);
            Scribe_Values.Look(ref testInt, "TestInt", 2500);
        }
        /// <summary>
        /// 初始化数据
        /// </summary>
        public void InitData()
        {
            testBool = false;
            testFloat = 1f;
            testInt = 2500;
        }
    }
}

1.2 Controller+View

MVC中的V+C层 视图以及控制逻辑放在这里编写

using UnityEngine;
using Verse;

namespace test
{
    //游戏加载时构造实例
    [StaticConstructorOnStartup]
    public class TestMain : Mod
    {
        public TestSetting testSetting;
        public static TestMain Instance { get; private set; }
        public TestMain(ModContentPack content) : base(content)
        {
            testSetting = GetSettings<TestSetting>();//读取本地数据 设置setting中的mod关联
            Instance = this;
        }
        /// <summary>
        /// mod选项面板中的名字
        /// </summary>
        /// <returns></returns>
        public override string SettingsCategory()
        {
            return "TestCategory";
        }
        /// <summary>
        /// 绘制方法
        /// </summary>
        /// <param name="inRect"></param>
        public override void DoSettingsWindowContents(Rect inRect)
        {
            Rect rect = new Rect(0, 0, 0.9f * inRect.width, 0.8f * inRect.height);
            Listing_Standard ls = new Listing_Standard();
            ls.BeginScrollView(inRect, ref testSetting.scrollPos, ref rect);
            if (ls.ButtonText("恢复默认".Translate())) { testSetting.InitData(); }//按钮与监听
            ls.GapLine(20f);
            ls.Label("布尔测试".Translate());
            ls.CheckboxLabeled("布尔测试", ref testSetting.testBool, "This is a test bool");
            ls.GapLine(20f);
            Text.Font = GameFont.Medium;
            ls.Label("浮点测试".Translate());
            ls.Label(testSetting.testFloat.ToString());
            testSetting.testFloat = ls.Slider(testSetting.testFloat, 100f, 300f);
            Text.Font = GameFont.Small;
            ls.GapLine(20f);
            Text.Font = GameFont.Medium;
            ls.Label("整型测试".Translate());
            ls.Gap(10f);
            Text.Font = GameFont.Small;
            TextFieldNumericLabeled(ls, "整型测试",ref testSetting.testInt,0f,30f);
            ls.EndScrollView(ref rect);
        }
        private void TextFieldNumericLabeled<T>(Listing_Standard  ls,string label, ref T val, float min, float max) where T : struct {
            string s = val.ToString();
            ls.TextFieldNumericLabeled(label,ref val,ref s, min, max);
        }
    }
}


1.3 测试

在这里插入图片描述如果这篇文章对你有帮助,点赞收藏支持一下呗!

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
环世界(RimWorld)是一款自由度很高的沙盒游戏,玩家可以通过MOD来扩展游戏的内容和玩法。制作环世界MOD需要一定的编程和美术基础,以下是一个简单的环世界MOD制作教程: 1. 准备工作:首先需要下载并安装环世界的MOD制作工具,比如Modding Tools包。同时需要一个文本编辑器(如Notepad++)和一些图片处理软件(如Photoshop)。 2. 创建MOD文件夹:在环世界的Mods文件夹下创建一个新的文件夹,这将是你的MOD的根目录。 3. 编写MOD描述文件:在MOD的根目录下创建一个描述文件About文件夹,里面存放MOD的一些基本信息,如作者、版本、说明等。 4. 编写MOD内容:根据你的设想,可以编写新增的角色、任务、建筑、装备等内容。这需要对XML和C#等语言有一定的了解,可以参考环世界的官方文档和教程来进行编写。同时,对于新增的角色或建筑,还需要设计对应的图片和动画。 5. 测试和优化:在制作MOD后,需要进行测试以确保MOD的正确性和稳定性。可以将MOD放到游戏Mods文件夹下进行测试,根据测试结果进行改进。 6. 发布MOD:如果MOD通过了测试并且稳定可用,就可以考虑发布MOD了。可以将MOD上传到环世界社区网站或其他MOD分享平台,供其他玩家下载和使用。 制作环世界MOD是一个需要耐心和技术的过程,但可以让玩家们创造出更多有趣的游戏内容和体验。希望以上简单的教程可以帮助到对环世界MOD制作感兴趣的玩家们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值