Unity发布PC端程序时使用txt文本配置程序参数

前言

工作的时间总是会经历了很多心酸和无奈,当然也有成功的喜悦。因为平时工作很忙,自己在学到新东西的时候只能草草的记在笔记本上,不能和别人一起讨论。这是到了年底才有时间发布自己的第一条博客,希望这是一个好的开端,以后多多记录一下自己学到的知识吧。

关于Unity如何在发布PC端程序时使用txt文本配置程序参数

本人所在公司是一家做展馆展示的公司,我们开发完程序后需要将程序发布出来打包发给在现场的调试人员进行测试(公司人手经常不够,我作为一名程序员还经常灰头土脸地跑现场去测试,真是坑啊),现场的人员经常会根据业主的要求对软件进行修改,比如说播放视频路径、发送的串口信号编码、UDP信号编码、图片的大小等等,如果这些都由程序员来改,程序员需要修改完软件后再将软件重新发布并且打包发给现场人员,这样就无疑就给自己和其他人添加了很多不必要的工作负担(主要是自己懒得一次次给他们改)。所以这时就需要做一个可以有配置文件功能的软件,发给现场让他们自己玩去吧(当然,也不是什么参数都能让他们随便乱改的)。

步骤

1、首先在工程根目录下建立一个StreamingAssets文件夹,并在里面创建一个txt文档,名为Config(名称可以随便取,只要可以获取的到)。在这里插入图片描述2、打开这个txt文件,在里面输入如下测试参数。
在这里插入图片描述3、点击另存为,编码一定要选成UTF-8,点击保存。
在这里插入图片描述4、创建一个脚本,取名为ConfigTest,在其中输入如下代码,点击保存,并将其挂载到场景中的物体上(注意我脚本里的注释)。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;

/// <summary>
/// 配置文件读取
/// </summary>
public class ConfigTest : MonoBehaviour
{
    private string configPath;
    //在实际项目中我一般不会用静态类,在有频繁跳转场景的时候很容易出问题
    //public static Dictionary<string, Dictionary<string, string>> dic;
    public Dictionary<string, Dictionary<string, string>> dic;

    private void Awake()
    {
        //读取配置文件(StreamingAssets)路径
        configPath = Path.Combine(Application.streamingAssetsPath, "Config.txt");
        if (dic == null)
        {
            dic = new Dictionary<string, Dictionary<string, string>>();
            LoadConfig();
        }
    }
    /// <summary>
    /// 读取所有的数据
    /// </summary>
    void LoadConfig()
    {
        string[] lines = null;
        if (File.Exists(configPath))
        {
            lines = File.ReadAllLines(configPath);
            BuildDic(lines);
        }
    }
    /// <summary>
    /// 处理所有数据
    /// </summary>
    /// <param name="lines"></param>
    private void BuildDic(string[] lines)
    {
        string mainKey = null;//主键
        string subKey = null;//子键
        string subValue = null;//值
        foreach (var item in lines)
        {
            string line = null;
            line = item.Trim();//去除空白行
            if (!string.IsNullOrEmpty(line))
            {
                if (line.StartsWith("["))//取主键
                {
                    mainKey = line.Substring(1, line.IndexOf("]") - 1);
                    if (dic.ContainsKey(mainKey))
                    {
                        return;
                    }
                    dic.Add(mainKey, new Dictionary<string, string>());
                }
                else//取主键
                {
                    var configValue = line.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                    subKey = configValue[0].Trim();
                    subValue = configValue[1].Trim();
                    subValue = subValue.StartsWith("\"") ? subValue.Substring(1) : subValue;
                    dic[mainKey].Add(subKey, subValue);
                }
            }
        }
    }
}

在这里插入图片描述4、再创建一个测试脚本,在其中输入如下代码,点击保存,并将其挂载到场景中的物体上,并将挂载这ConfigTest脚本的物体拖拽到该物体的测试脚本上。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test0 : MonoBehaviour
{
    //配置文件类
    public ConfigTest configtest;
    //整型参数1、2、3
    int number1, number2, number3;
    //浮点型参数4、5、6
    float number4, number5, number6;
    //字符串参数
    string zi0, zi1, zi2;

	// Use this for initialization
	void Start ()
    {
        BeginString();
        StartCoroutine(ToShowThis());
	}

    /// <summary>
    /// 初始化字符串
    /// </summary>
    void BeginString()
    {
        number1 = int.Parse(configtest.dic["整型"]["int0"]);
        number2 = int.Parse(configtest.dic["整型"]["int1"]);
        number3 = int.Parse(configtest.dic["整型"]["int2"]);
        number4 = float.Parse(configtest.dic["浮点型"]["float0"]);
        number5 = float.Parse(configtest.dic["浮点型"]["float1"]);
        number6 = float.Parse(configtest.dic["浮点型"]["float2"]);
        zi0 = configtest.dic["字符串型"]["string0"];
        zi1 = configtest.dic["字符串型"]["string1"];
        zi2 = configtest.dic["字符串型"]["string2"];
    }

    /// <summary>
    /// 使用一个协程,将txt文档里的数据打印出来
    /// </summary>
    /// <returns></returns>
    IEnumerator ToShowThis()
    {
        yield return new WaitForSeconds(0.1f);
        Debug.Log(number1.ToString());
        Debug.Log(number2.ToString());
        Debug.Log(number3.ToString());
        Debug.Log(number4.ToString());
        Debug.Log(number5.ToString());
        Debug.Log(number6.ToString());
        Debug.Log(zi0 + zi1 + zi2);
    }
}

在这里插入图片描述
5、运行程序,可以看到txt文档里的参数被打印出来了。
在这里插入图片描述6、基本用法就是这样了,还是需要在实际工作中多练多学,才能熟能生巧,用起来游刃有余。

工程相关

视频讲解

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波波斯维奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值