Unity 中英文转换

在Resources下创建文件夹LanguageTxt,再其创建“Chinese.txt”及“English.txt”(记得保存文本时选择UTF-8)

Chinese.txt

Btn:这是一个按钮

English.txt

Btn:This is a button

在Scripts下创建“LanguageManager.cs”及“UIText.cs”

LanguageManager.cs

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

public enum Language
{
    Chinese,
    English,
}

public class LanguageManager : MonoBehaviour
{

    public List<UIText> uitest;

    public Language language;
    private Dictionary<string, string> Chinesedict = new Dictionary<string, string>();
    private Dictionary<string, string> Englishdict = new Dictionary<string, string>();

    private static LanguageManager instance;

    public static LanguageManager Instance
    {
        get
        {
            return instance;
        }
    }

    private void Awake()
    {
        instance = this;

        GetChineseLanguageContent(Language.Chinese);
        GetChineseLanguageContent(Language.English);
    }

    public IEnumerable Start()
    {
        yield return new WaitForSeconds(1);
    }

    public void ChangeLanguage()
    {
        uitest.Clear();
        uitest = FindObjectsOfType<UIText>().ToList();

        if (language == Language.Chinese)
        {
            language = Language.English;
        }
        else
        {
            language = Language.Chinese;
        }
        for (int i = 0; i < uitest.Count; i++)
        {
            uitest[i].GetTextLanguage(language);
        }
    }

    public void GetChineseLanguageContent(Language lan)
    {
        TextAsset ta = null;
        if (lan == Language.Chinese)
            ta = Resources.Load<TextAsset>("LanguageTxt/Chinese");
        else if (lan == Language.English)
        {
            ta = Resources.Load<TextAsset>("LanguageTxt/English");
        }

        if (ta == null)
        {
            Debug.Log("语言文件为空,请检查");
            return;
        }

        string[] lines = ta.text.Split('\n');

        foreach (string str in lines)
        {
            if (string.IsNullOrEmpty(str))
            {
                continue;
            }
            string[] s = str.Split(':');

            if (lan == Language.Chinese)
            {
                if (!Chinesedict.ContainsKey(s[0]))
                {
                    Chinesedict.Add(s[0], s[1]);
                }
            }
            else if (lan == Language.English)
            {
                if (!Englishdict.ContainsKey(s[0]))
                {
                    Englishdict.Add(s[0], s[1]);
                }
            }
        }
    }

    public string LanguageSetUIText(Language lan, string key)
    {
        if (lan == Language.Chinese)
        {
            if (!Chinesedict.ContainsKey(key))
            {
                return string.Empty;
            }
            else
            {
                return Chinesedict[key];
            }
        }
        else
        {
            if (!Englishdict.ContainsKey(key))
            {
                return string.Empty;
            }
            else
            {
                return Englishdict[key];
            }
        }
    }
}

===========================================================================================

UIText.cs

using UnityEngine;

using UnityEngine.UI;

public delegate void DelegateGetText();

public class UIText : MonoBehaviour
{

    [SerializeField]

    private string key;

    void Start()
    {
        GetTextLanguage(LanguageManager.Instance.language);
    }

    void Update()
    {

    }

    public void GetTextLanguage(Language lan)
    {

        if (!string.IsNullOrEmpty(key))
        {
            string value = LanguageManager.Instance.LanguageSetUIText(lan, key);

            if (!string.IsNullOrEmpty(value))
                GetComponent<Text>().text = value;
        }
    }
}

===========================================================================================

在场景中新建“GameObject”,命名为“LanguageManarger”,添加“LanguageManager.cs”

UI界面新建一个按钮,按钮调用“LanguageManarger”中“ChangeLanguage”方法

按钮下的Text添加“UIText.cs”在“Key”中输入字典名称

文本名称一定要与枚举名称对应上,不然读取不到文本数据

===========================================================================================

效果图

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
UnityGameFramework案例源码,包括: 主要对游戏开发过程中常用模块进行了封装,很大程度地规范开发过程、加快开发速度并保证产品质量,是一个重度化的Unity游戏框架。 在最新的 Game Framework 版本中,包含以下 17 个内置模块,后续还将开发更多的扩展模块供开发者使用。 数据结点 (Data Node) – 将任意类型的数据以树状结构的形式进行保存,用于管理游戏运行时的各种数据。 数据表 (Data Table) – 可以将游戏数据以表格(如 Microsoft Excel)的形式进行配置后,使用此模块使用这些数据表。数据表的格式是可以自定义的。 调试器 (Debugger) – 当游戏在 Unity 编辑器中运行或者以 Development 方式发布运行时,将出现调试器窗口,便于查看运行时日志、调试信息等。用户还可以方便地将自己的功能注册到调试器窗口上并使用。 下载 (Download) – 提供下载文件的功能,支持断点续传,并可指定允许几个下载器进行同时下载。更新资源时会主动调用此模块。 实体 (Entity) – 我们将游戏场景中,动态创建的一切物体定义为实体。此模块提供管理实体和实体组的功能,如显示隐藏实体、挂接实体(如挂接武器、坐骑,或者抓起另一个实体)等。实体使用结束后可以不立刻销毁,从而等待下一次重新使用。 事件 (Event) – 游戏逻辑监听、抛出事件的机制。Game Framework 中的很多模块在完成操作后都会抛出内置事件,监听这些事件将大大解除游戏逻辑之间的耦合。用户也可以定义自己的游戏逻辑事件。 有限状态机 (FSM) – 提供创建、使用和销毁有限状态机的功能,一些适用于有限状态机机制的游戏逻辑,使用此模块将是一个不错的选择。 本地化 (Localization) – 提供本地化功能,也就是我们平时所说的多语言。Game Framework 在本地化方面,不但支持文本的本地化,还支持任意资源的本地化,比如游戏中释放烟花特效也可以做出几个多国语言的版本,使得中文版里是“新年好”字样的特效,而英文版里是“Happy New Year”字样的特效。 网络 (Network) – 提供使用 Socket 长连接的功能,当前我们支持 TCP 协议,同时兼容 IPv4 和 IPv6 两个版本。用户可以同时建立多个连接与多个服务器同时进行通信,比如除了连接常规的游戏服务器,还可以连接语音聊天服务器。如果想接入 ProtoBuf 之类的协议库,只要派生自 Packet 类并实现自己的消息包类即可使用。 对象池 (Object Pool) – 提供对象缓存池的功能,避免频繁地创建和销毁各种游戏对象,提高游戏性能。除了 Game Framework 自身使用了对象池,用户还可以很方便地创建和管理自己的对象池。 流程 (Procedure) – 是贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用。 资源 (Resource) – 为了保证玩家的体验,我们不推荐再使用同步的方式加载资源,由于 Game Framework 自身使用了一套完整的异步加载资源体系,因此只提供了异步加载资源的接口。不论简单的数据表、本地化字典,还是复杂的实体、场景、界面,我们都将使用异步加载。同时,Game Framework 提供了默认的内存管理策略(当然,你也可以定义自己的内存管理策略)。多数情况下,在使用 GameObject 的过程中,你甚至可以不需要自行进行 Instantiate 或者是 Destroy 操作。 场景 (Scene) – 提供场景管理的功能,可以同时加载多个场景,也可以随时卸载任何一个场景,从而很容易地实现场景的分部加载。 配置 (Setting) – 以键值对的形式存储玩家数据,对 UnityEngine.PlayerPrefs 进行封装。 声音 (Sound) – 提供管理声音和声音组的功能,用户可以自定义一个声音的音量、是2D声音还是3D声音,甚至是直接绑定到某个实体上跟随实体移动。 界面 (UI) – 提供管理界面和界面组的功能,如显示隐藏界面、激活界面、改变界面层级等。不论是 Unity 内置的 uGUI 还是其它类型的 UI 插件(如 NGUI),只要派生自 UIFormLogic 类并实现自己的界面类即可使用。界面使用结束后可以不立刻销毁,从而等
要将Unity英文版改成中文,可以按照以下步骤进行操作: 1. 在Unity编辑器中,新建一个空的GameObject,并将其命名为"LanguageManager"。 [1] 2. 为这个GameObject添加一个脚本组件,命名为"LanguageManager.cs"。 3. 打开Unity Hub,并找到已安装的Unity编辑器。在安装界面,点击编辑器右侧的齿轮图标,选择添加模块。 4. 在弹出的模块选择界面中,选择中文简体语言进行安装。如果你已经安装过了该模块,则可以跳过这一步。 5. 打开Unity编辑器,在顶部菜单栏选择"Edit",然后选择"Preferences"。 6. 在Preferences窗口中,选择"Languages"选项卡,并将语言设置为"简体中文"。确认后,重启Unity编辑器即可。 7. 在UI界面中新建一个按钮,然后将该按钮的onClick事件关联到"LanguageManager"脚本中的"ChangeLanguage"方法。 通过以上步骤,你可以将Unity英文版改成中文版。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Unity 中英文转换](https://blog.csdn.net/Barrett_/article/details/116697563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Unity设置为中文](https://blog.csdn.net/u012869793/article/details/125036463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值