当前位置:   article > 正文

Unity 简单的多语言切换方案_unity多语言字体

unity多语言字体

准备工作

创建数据Excel表

在这个方案中,我希望Text组件所使用的文本,字体样式等都通过读表的形式完成,这样的话策划有啥需求就能通过修改配置表的形式实现。配置表会有两个:

  1. 字体样式表
StyleName Font FontStyle Size RichText CororR CororG CororB CororA
Main Arial Bold 30 True 50 50 50 255
Battle Arial Normal 40 True 100 100 100 255

StyleName:表示样式名称,同时用作键值
Font:表示需要使用的字体
FontStyle:表示需要使用的字体样式
Size:表示字体的大小
RichText:表示是否支持富文本
ColorRGBA:表示字体的颜色

2.文本表

Style Language_CN LanguageEN
Main 中文 英语

Style:表示样式,需要和字体样式表中的StyleName对应

生成bin文件

这里并非一定要使用bin文件,可根据需求及喜好也可以使用json等形式。为了方便,我使用了ExcelDataReaderExcelDataReader.DataSet两个插件来读取Excel表,这两个插件可通过Nuget安装到解决方案中。

 		//bin文件存放路径
 		private const string _outputPath = "../../../Output/";

        //Excel表路径
        string _inputPath = string.Empty;

        /// <summary>
        /// 生成bin文件
        /// </summary>
        /// <param name="inputPath"></param>
        public void CreateBinaryData(string inputPath)
        {
   
            if (_inputPath != inputPath) _inputPath = inputPath;

            var styleDatas = ReadStyle();
            WriteStyle(styleDatas);
            ReadTextConfig();
        }

        /// <summary>
        /// 从Excel表中读取多语言文本数据
        /// </summary>
        void ReadTextConfig()
        {
   
            List<TextData> datas = new List<TextData>();
            using (var stream = File.Open(_inputPath, FileMode.Open, FileAccess.Read))
            {
   
                using (var reader = ExcelReaderFactory.CreateReader(stream))
                {
   
                    DataSet dataSet = reader.AsDataSet();
                    DataTable textTable = dataSet.Tables[(int)Sheet.TEXT_CONFIG];

                    for (int i = 1; i < textTable.Columns.Count; i++)
                    {
   
                        for (int j = 1; j < textTable.Rows.Count; j++)
                        {
   
                            TextData data = new TextData();
                            data.ID = j + 1;
                            data.Style = textTable.Rows[j][0].ToString();
                            data.Content = textTable.Rows[j][i].ToString();
                            datas.Add(data);
                        }

                        //保存数据
                        WriteLanuage(textTable.Rows[0][i].ToString(), datas);
                        datas.Clear();
                    }
                }
            }
        }

        /// <summary>
        /// 将读取到的多语言数据写成二进制文件
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="datas"></param>
        void WriteLanuage(string tableName, List<TextData> datas)
        {
   
            using (var steam = new FileStream(_outputPath + tableName, FileMode.Create, FileAccess.Write))
            {
   
                using (var writer = new BinaryWriter(steam))
                {
   
                    //先写人Count,读取的使用才知道需要几次才能读完全部数据
                    writer.Write(datas.Count);
                    foreach (var data in datas)
          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/106826?site
推荐阅读
相关标签
  

闽ICP备14008679号