【推荐100个unity插件之21】unity实现多语言切换功能——Localization插件的使用

简介: 【推荐100个unity插件之21】unity实现多语言切换功能——Localization插件的使用

前言

游戏先要国际化,实现多语言切换是必不可少的功能,本文将重点关注一款名为Localization的插件。该插件为Unity开发者提供了一种简单而强大的方式来实现应用程序的多语言支持。通过使用本文提供的技巧和指南,你将能够轻松地为你的游戏或应用程序集成多语言切换功能,从而为全球用户提供更加友好和个性化的体验。


在本文中,我们将深入探讨Localization插件的使用方法、优势和注意事项。我们将从导入插件开始,逐步引导你完成设置语言文件、在代码中使用本地化文本等操作。除此之外,我们还将分享一些实用的小贴士和最佳实践,帮助你充分发挥Localization插件的潜力。


无论你是刚入门Unity开发,还是想要为现有项目添加多语言支持,本文都将为你提供宝贵的经验和见解。让我们一起开始,探索如何利用Localization插件为你的Unity应用添加多语言支持吧!

优缺点

优点

  1. 简化多语言支持:本地化插件可以大大简化在应用程序中实现多语言支持的工作,使得开发者能够更容易地管理和维护多语言文本。
  2. 灵活性:一些本地化插件提供了灵活的配置选项,允许开发者根据需求进行定制化设置,比如动态切换语言、支持富文本等。
  3. 社区支持:一些知名的本地化插件拥有庞大的用户群体和活跃的社区支持,能够提供丰富的文档、教程和解决方案,帮助开发者解决本地化中遇到的问题。

缺点

  1. 学习成本:使用新的本地化插件可能需要一定的学习成本,尤其是熟悉插件的API和工作流程。这可能会增加项目开发的时间和成本。
  2. 依赖性:部分本地化插件可能存在版本更新不及时、兼容性问题或者依赖其他库的情况,需要开发者谨慎考虑项目的依赖性。
  3. 性能:不同的本地化插件可能会对应用程序的性能产生不同程度的影响,特别是在多语言文本较多的情况下需要注意性能损耗。

安装

创建配置

选择语言

选择默认语言

这个也设置为英语

创建多语言表数据

创建key

配置不同语言文本

预加载

确保开启了预加载功能

绑定不同多语言文本数据,并显示

绑定文本显示事件

运行效果

语言切换

右上角切换语言

自己编写按钮控制语言切换

实际应用我们肯定不会使用自带的语言切换功能,而是自己代码控制

_localeID对应配置语言的索引

using UnityEngine;
using UnityEngine.Localization.Settings; // 确保包含 UnityEngine.Localization.Settings 命名空间

public class LocaleSelector : MonoBehaviour
{
    private bool active = false; // 用于跟踪是否正在进行语言环境更改的变量

    // 方法:根据 LocaleID 更改语言环境
    public void ChangeLocale(int localeID)
    {
        if (active) // 如果已经有语言环境更改正在进行,直接退出方法
            return;

        StartCoroutine(SetLocale(localeID)); // 启动协程来设置新的语言环境
    }

    // 协程:异步设置语言环境
    IEnumerator SetLocale(int _localeID)
    {
        active = true; // 设置 active 为 true,表示语言环境更改正在进行中

        yield return LocalizationSettings.InitializationOperation; // 等待本地化系统初始化完成

        // 根据 _localeID 设置选定的语言环境
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[_localeID];

        active = false; // 语言环境更改完成后,重置 active 为 false
    }
}

配置

当然,要记住玩家选译的语言,你需要保存localeID,并在游戏开始时加载对应的语言

多语言图片切换

新增Asset Table Collection表格数据

这里使用另外方式配置数据,也就是直接在编辑框配置修改内容

可以看到表内同步配置好了内容

同样绑定更新事件

效果

在构建中使用Localization

我们还需要做一件事来在构建中使用Localization.

新增资源

如果你已经新增过资源,可以选择更新

清理

分析错误修复

分析窗口

点击分析

如果你发现任何错误,请尝试使用“修复所选规则”按钮修复它们。

动态修改多语言文本内容

打开多语言表,配置新的内容

{0}可以理解为我们要动态修改的内容占位

关键是选中这个“智能”复选框。这将允许我们通过代码改变值

代码控制

using UnityEngine;
using UnityEngine.Localization;
using TMPro;

public class ChangeScore : MonoBehaviour
{
    [SerializeField] private LocalizedString localStringScore; // 用于本地化的字符串
    [SerializeField] private TextMeshProUGUI textComp; // 用于显示分数的 TextMeshPro 组件
    private int score; // 分数变量

    // Unity 消息:在对象启用时调用
    private void OnEnable()
    {
        // 设置本地化字符串的参数
        localStringScore.Arguments = new object[] { score };
        // 订阅本地化字符串变化的事件
        localStringScore.StringChanged += UpdateText;
    }

    // Unity 消息:在对象禁用时调用
    private void OnDisable()
    {
        // 取消订阅本地化字符串变化的事件
        localStringScore.StringChanged -= UpdateText;
    }

    // 更新文本的方法,参数为新的字符串值
    private void UpdateText(string value)
    {
        textComp.text = value; // 更新 TextMeshPro 组件的文本
    }

    // 增加分数的方法
    public void IncreaseScore()
    {
        score++; // 增加分数
        localStringScore.Arguments[0] = score; // 更新本地化字符串的参数
        localStringScore.RefreshString(); // 刷新本地化字符串以应用新的参数
    }
}

配置

增加分数按钮配置点击事件

效果

参考

https://www.youtube.com/watch?v=XLv79XcbYXc

目录
相关文章
|
2天前
|
图形学
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
5 0
|
2天前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
6 0
|
2天前
|
数据可视化 大数据 API
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
5 0
|
2天前
|
JSON 开发框架 API
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
6 0
|
2天前
|
图形学
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
7 0
|
2天前
|
数据可视化 C# 图形学
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
8 0
|
2天前
|
图形学
【unity实战】3D水系统,游泳,潜水,钓鱼功能实现
【unity实战】3D水系统,游泳,潜水,钓鱼功能实现
3 0
|
2天前
|
人工智能 图形学
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
7 0
|
2天前
|
图形学
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
6 0
|
2天前
|
存储 JSON 关系型数据库
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
11 2