热点资讯

你的位置:制作软件开发多少钱 > 软件开发价格 > 软件开发资讯 【Unity 实用器用篇】| 游戏多言语处分决策,官方插件Localization 罢了腹地化及多种言语切换

软件开发资讯 【Unity 实用器用篇】| 游戏多言语处分决策,官方插件Localization 罢了腹地化及多种言语切换


发布日期:2024-11-06 08:51    点击次数:200


图片软件开发资讯

图片

弁言 Unity的多言语腹地化是一个很实用的功能,它可以匡助游戏相沿多种言语,让不同言语的玩家都大致更好地体验游戏。而罢了腹地化的决策也有好多种,各个决策之间也各有优劣,背面也会对多个决策进行先容学习。本文就来先容一个特意作用于多言语腹地化的Unity官方插件:Localization 。这个插件肤浅进行游戏的多言语腹地化,让游戏相沿多种言语,底下就来望望该插件的使用秩序吧! 【Unity 实用器用篇】| 游戏多言语处分决策,官方插件Localization 罢了腹地化及多种言语切换 一、多言语腹地化插件 Localization 1.1 先容

Localization是Unity官方推出的腹地化插件,它可以匡助开导者在Unity阵势中罢了多言语相沿。

在Unity中,Localization的职责旨趣是创建多个表格来存储不同言语的不同字符串。

可以通过Localization Tables创建这些表格,表格可以成立不同资源之间的对应关系,一个key对应多个言语的资源。

通过使用Localization插件,开导者可以肤浅地成立和获取现时言语和现时言语地区,从而为游戏或期骗秩序提供多种言语的相沿。

这关于那些需要面向不同地区和不同言语的用户发布游戏或期骗秩序的开导者来说黑白常有效的。

1.2 后果展示

图片

1.3 使用证明

官方文档:官方文档

本文使用的Localization版块为1.4.5,Unity引擎版块为2023.1.9。

后续插件可能会有更新,或者使用老版块的插件时功能使用上可能会有所不同,本体使用时按照我方的版块条目即可。

二、 插件导入并成立 2.1 装配 Localization

掀开菜单栏 Window -> Package Manager ,在搜索框中搜索Localization 并进行装配即可。

要耀眼Packages选拔Unity Registry,否则可能搜不到该插件哦。

图片

2.2 全局成立

掀开菜单栏 Edit -> Project Settings -> Localization -> Create,找到Localization,点击Create创建,并选拔一个文献目次进行文献保存。

图片

点击 Locale Generator 搜索zh和en添加中英文成立,第一次添加时会让咱们选拔一个文献夹目次保存。

图片

Locale Generator 用于添加或移出言语,每添加一种言语也会生成对应的成立文献,然后可以修改默许言语为汉文,如下图所示:

图片

三、多言语映射表 3.1 创建多言语文本成立表

掀开菜单栏 Window -> Asset Management -> Localization Tables ,点击New Table Collection创建表格。

该表格用于成立不同资源之间的对应关系,一个key对应多个言语的资源,可以选拔创建文本表或者资源表。

这里咱们选拔文本表(String Table Collection)使用,写好表名后点击Create就可以创建了,然后选拔一个旅途目次进行保存。

图片

经由上头几个成立后可以在咱们前边保存文献的旅途下看到联系的文献,这里最佳是说明我方的情况选拔适合的文献夹进行料理保存。

图片

3.2 添增多言语文本成立表内容

此时在Localization Tables中添增多言语文本即可,成立内容主如若Key和对应多种言语的文本。

可通过Window -> Asset Management -> Localization Tables 掀开该窗口。

图片

本体阵势中不一定将多言语内容一说念写在一个成立表中,不同的文本内容也可以通过创建多个成立表进行填写,让不同的模块我方料理文本内容亦然一个可以的选拔。

3.3 静态文本

此时在场景中添加一个文本组件Text,然后在该组件右侧菜单处点击Localize,会自动添加一个Localize String Event组件。 (这里也可以手动鄙人面添加Localize String Event组件,不外还要手动成立该组件绑定的Text组件,稍稍贫寒一些,功能都是同样的)

图片

此时在该组件中的String Reference参数中选拔之前成立的多言语文本成立表中的Key即可完成多言语的成立。

图片

此时运行秩序,可以看到该Text组件的文本内容仍是造成咱们成立多言语文本成立表中的Key对应的文本了。

小程序开发

通过Game视图右上角的言语选拔可以切换语种,点击切换不同言语后,Game视图中的文本也会即时的随着切换了。

图片

这么咱们的静态文本就可以通过这种秩序来添增多言语文本成立表中的Key绑定多言语了。

也可以通过剧本抑止言语的切换,测试代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
using UnityEngine.ResourceManagement.AsyncOperations;

public class LanguageManager : MonoBehaviour
{
    AsyncOperationHandle m_InitializeOperation;
    private Locale _chineseLocale;
    private Locale _englishLocale;

    void Start()
    {
        // SelectedLocaleAsync will ensure that the locales have been initialized and a locale has been selected.
        m_InitializeOperation = LocalizationSettings.SelectedLocaleAsync;
        if (m_InitializeOperation.IsDone)
        {
            InitializeCompleted(m_InitializeOperation);
        }
        else
        {
            m_InitializeOperation.Completed += InitializeCompleted;
        }
    }

    void InitializeCompleted(AsyncOperationHandle obj)
    {
        var locales = LocalizationSettings.AvailableLocales.Locales;
        for (int i = 0; i < locales.Count; ++i)
        {
            var locale = locales[i];
            if (locale.LocaleName == "Chinese (Simplified) (zh)")
            {
                _chineseLocale = locale;
            }
            else if (locale.LocaleName == "English (en)")
            {
                _englishLocale = locale;
            }
        }
    }

    public void SwitchChinese()
    {
        LocalizationSettings.Instance.SetSelectedLocale(_chineseLocale);
    }
    public void SwitchEnglish()
    {
        LocalizationSettings.Instance.SetSelectedLocale(_englishLocale);
    }
}

将该剧本挂载到场景中,并在场景中添加两个Button差别绑定切换中英文的秩序即可。

图片

上述剧本代码也可以换成下方这种,更疏漏奸猾的秩序切换言语。

using UnityEngine;
using UnityEngine.Localization.Settings;

public class LanguageManager : MonoBehaviour
{
    public void SwitchChinese()
    {
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[0];
    }
    public void SwitchEnglish()
    {
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[1];
    }
}

索引值为Localization 的成立项中的多种言语的规矩,如下方第一个言语为汉文则索引为0。

图片

3.2 动态文本

除了可以成立静态文本,也可以在代码中获取对应的文本并进当作态成立,底下看一下动态文本的成立秩序。

成立动态文本的秩序有好多种,可以看情况选拔,具体旨趣可以在官方文档仔细查阅,这里就径直写几种秩序的使用示例。

1.最疏漏奸猾的秩序,径直动态读表赋值。

using UnityEngine;
using UnityEngine.Localization.Settings;
using UnityEngine.UI;

public class TestLocalization : MonoBehaviour
{
    public Text text;

    void Start()
    {
        var loadingResult = LocalizationSettings.StringDatabase.GetTableEntry("UITestTable", "ui_Test");
        text.text = loadingResult.Entry.GetLocalizedString();
    }
}

GetTableEntry() 第一个参数为多言语成立表的名字,第二个参数为该表内部的Key。

通过秩序传入多言语成立表的名字及对应多言语的Key即可完成动态文本赋值。

不外要耀眼的是字符串表可能不会立即可用,举例在腹地化系统运转动本领或尚未加载表时。

为了保障起见,可以确保该多言语成立表被加载出之后再进行赋值,可以来看第二种秩序的使用示例。

2.恭候言语成立表运转动之后在赋值。

using System.Collections;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine;
using UnityEngine.Localization.Settings;
using UnityEngine.UI;

public class TestLocalization : MonoBehaviour
{
    public Text text;

    void Start()
    {
        StartCoroutine(LoadStrings());
    }

    IEnumerator LoadStrings()
    {
        // A string table may not be immediately available such as during initialization of the localization system or when a table has not been loaded yet.
        var loadingOperation = LocalizationSettings.StringDatabase.GetTableAsync("UITestTable");
        yield return loadingOperation;
    
        if (loadingOperation.Status == AsyncOperationStatus.Succeeded)
        {
            var stringTable = loadingOperation.Result;
            text.text = stringTable.GetEntry("ui_Test").GetLocalizedString();
        }
        else
        {
            Debug.LogError("Could not load String Table\n" + loadingOperation.OperationException.ToString());
        }
    }
}

3.运转动时得回该多言语成立表,事件动态更新文本。

using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Tables;
using UnityEngine.UI;

public class Demo : MonoBehaviour
{
    public Text Name;
    private LocalizedStringTable stringTable = new LocalizedStringTable { TableReference = "UITestTable" };

    void OnEnable()
    {
        stringTable.TableChanged += LoadStrings;
    }

    void OnDisable()
    {
        stringTable.TableChanged -= LoadStrings;
    }

    void LoadStrings(StringTable stringTable)
    {
        Name.text = GetLocalizedString(stringTable, "ui_Test");
    }

    static string GetLocalizedString(StringTable table, string entryName)
    {
        var entry = table.GetEntry(entryName);
        return entry.GetLocalizedString();
    }
}

以上几种秩序都可以通俗使用,说明本体需求选拔适合的即可。

四、资源多言语映射表

除了上头说到的文本的腹地化除外,Localization 还相沿资源腹地化,使用秩序与成立文本的秩序雷同,底下来看一下。

掀开菜单栏 Window -> Asset Management -> Localization Tables ,点击New Table Collection创建表格。

该表格用于成立不同资源之间的对应关系,一个key对应多个言语的资源,这里选拔创建一个资源成立表(AssetsTable Collection),写好表名后点击Create就可以创建了,然后选拔一个旅途目次进行保存。

图片

创建完之后与文本成立的处理方式同样,在表中添加Key以及资源的内容,测试示举例下:

图片

然后在场景中添加一个Image组件,在右侧菜单点击Localize(或者我方添加组件),选拔咱们添加的资源成立表中的Key即可完成。

图片

后果如下,可以使用秩序抑止切换言语,也可以通过右上角进行切换。

图片

五、映射表 导入/导出 Excel 便于料理

当阵势中的文本量相比多的时候,使用Localization Table的秩序会有些难以操作未便于料理。

是以此时可以推敲将Localization Table导出为Excel表格对文本进行料理,Localization 是相沿Table的导入和导出的,底下来看一下若何操作。

5.1 导出Localization Table为CSV

掀开Localization Tables,然后右键Localization Table,选拔 Export -> CSV...导出。

图片

选拔一个文献目次进行保存,就可以看到导出的Excel表格内容了,即是Localization Table中的内容。

图片

5.2 修改Excel中并再行导入

在导出的Excel表格中咱们可以进行增点窜查的操作对表格进行料理,这么比径直在Localization Table中料理要应酬的多。

图片

修改完之后可以在导入Localization Table中,要耀眼的是修改完之后要改成UTF-8的编码姿色再保存文献,否则导入之后汉文会领会乱码。

如果不知说念若何径直保存为UTF-8的编码姿色,可以使用Notepad++等器用转一下就可以了。

图片

点击Import -> CSV...选拔对应的文献进行导入。

图片

这么就可以看到从Excel中修改后的内容导入到Localization Table中啦。

图片

乱码问题:https://blog.csdn.net/shishuijun/article/details/129961436

六、Build

如果需要打包项倡导话还需要对Localization Tables进行Build一次,秩序也很疏漏,底下看一下若何操作。

掀开菜单栏 Window -> Asset Management -> Addressables -> Groups。

图片

然后在该窗口中选拔Build -> New Build -> Defaul Build Script 进行Build,恭候Build完成即可。

图片

归来 Localization 器用的优点在于该插件是Unity引擎原生处分决策,使用时只需要通过Package Manger导入即可。导入及成立都相比疏漏,关于一些文本量不是很大的阵势来说,该决策终点的适合。当阵势对文本量需求终点大的时候,就需要伙同Excel来料理了。整理来说后果可以,操作疏漏易上手,基本功能都有,是值得学习的一款多言语腹地化处分决策。

🎁🎁🎁 临了给大家推选一个功能王人全而况很好用的 IP代理网站:IPIDEA

使用这个代理IP,可以很应酬地探望被阻滞的网站,幸免被跟踪和监控,保护我方的秘密和安全。而况这个代理IP还可以匡助咱们加快网页的加载速率,提升职责着力。

目下使用这个相连(https://share.ipidea.net/YYYYYY)注册的新用户还可以径直白嫖最少300M的流量,注册认证后最高可以送7.5G流量哦!

加上最比年终也有当作,优惠力度如故蛮大的,有需要的小伙伴可以去搞一下试试,注册 == 白嫖。

上期奖号和值为97,最近十期和值分别为116 105 118 106 100 103 84 137 64 97,最近十期和值分布在64-137之间。综合分析本期预计红球和值出现在123左右。

上期龙头开出奇数号码05,近10期龙头奇数号码开出7次,偶数号码开出3次,制作软件开发多少钱本期优先考虑奇数号码,龙头参考05。

如果对此终点感酷爱之前莫得效过或者不会使用的小伙伴也无谓焦炙,在官网都有详备的教程可以看,背面偶而辰的话也可以出一期教程匡助大家快速上手使用的哦!

🎬 博客主页:https://xiaoy.blog.csdn.net

🎥 本文由 呆呆敲代码的小Y 原创 🙉

🎄 学习专栏推选:Unity系统学习专栏

🌲 游戏制作专栏推选:游戏制作

🌲Unity实战100例专栏推选:Unity 实战100例 教程

🏅 接待点赞 👍 储藏 ⭐留言 📝 如有失实敬请指正!

📆 未来很长,值得咱们全力奔赴更好意思好的生涯✨

------------------❤️分割线❤️-------------------------

图片

图片

图片

图片

本站仅提供存储奇迹,扫数内容均由用户发布,如发现存害或侵权内容,请点击举报。