Unity realiza multilingüe

En el desarrollo de juegos, es muy importante realizar una función multilingüe. Aquí hay una manera de implementar multilingüe en Unity.

  1. Crear archivos de idioma

        Primero, cree una carpeta llamada "Localización" en su proyecto. Cree una subcarpeta dentro de esta carpeta llamada "Idiomas". En la carpeta "Idiomas", cree un script separado para cada idioma. Por ejemplo, para inglés, cree un script llamado "en_US.cs". En este script, todas las cadenas que deben traducirse se almacenan en pares clave-valor. Aquí hay un ejemplo:

public static class en_US {
    public static string PLAY = "Play";
    public static string OPTIONS = "Options";
    // other strings
}

        En scripts en otros idiomas, traduce las cadenas correspondientes a texto en ese idioma. Por ejemplo, para chino, puede crear un script llamado "zh_CN.cs" con el siguiente contenido:                                                        

public static class zh_CN {
    public static string PLAY = "开始游戏";
    public static string OPTIONS = "选项";
    // other strings
}

        2. Cree una clase de administrador de localización 

        A continuación, cree un script de C# llamado "LocalizationManager" en el proyecto. Este script es responsable de cargar y cambiar entre diferentes idiomas y proporciona métodos para obtener cadenas en archivos de idioma.

// LocalizationManager.cs

using System.Collections.Generic;
using UnityEngine;

public class LocalizationManager : MonoBehaviour {
    // 单例模式:确保只有一个实例存在,可以在整个游戏中被访问
    public static LocalizationManager Instance { get; private set; }

    // 字典:存储文本字符串和对应的键值对
    private Dictionary<string, string> localizedText;
    // 当前语言,默认为英文
    private string currentLanguage = "en_US";

    private void Awake() {
        // 单例模式:确保只有一个实例存在
        if (Instance == null) {
            Instance = this;
            DontDestroyOnLoad(gameObject);
            LoadLocalizedText(currentLanguage);
        }
        else {
            Destroy(gameObject);
        }
    }

    /// <summary>
    /// 加载指定语言的文本文件并解析为键值对,存储到字典中
    /// </summary>
    private void LoadLocalizedText(string language) {
        // 创建新的字典
        localizedText = new Dictionary<string, string>();

        // 加载文本文件
        TextAsset textAsset = Resources.Load<TextAsset>("Localization/Languages/" + language);
        // 分行解析文本内容,并添加到字典中
        string[] lines = textAsset.text.Split('\n');

        foreach (string line in lines) {
            string[] keyValue = line.Split('=');
            localizedText.Add(keyValue[0], keyValue[1]);
        }
    }

    /// <summary>
    /// 切换语言并重新加载文本文件
    /// </summary>
    public void SetLanguage(string language) {
        if (language != currentLanguage) {
            currentLanguage = language;
            LoadLocalizedText(currentLanguage);
        }
    }

    /// <summary>
    /// 获取指定键的本地化字符串
    /// </summary>
    public string GetLocalizedValue(string key) {
        // 如果存在该键,则返回对应的值;否则返回原始字符串
        string result = key;
        if (localizedText.ContainsKey(key)) {
            result = localizedText[key];
        }
        return result;
    }
}

        Esta clase utiliza el patrón singleton para garantizar que solo exista una instancia a la que se pueda acceder durante todo el juego. Utiliza Dictionary para almacenar cadenas de texto y los pares clave-valor correspondientes.

        El método LoadLocalizedText carga un archivo de texto en el idioma actual y agrega cada par clave-valor a un diccionario. El método SetLanguage cambia el idioma y llama a LoadLocalizedText para cargar un nuevo archivo de texto. El método GetLocalizedValue obtiene la cadena localizada para la clave especificada.

        3. Usa texto multilingüe en el juego

Por último, utilice el componente de texto de la interfaz de usuario para mostrar cadenas multilingües. En el campo de texto del componente de texto de la interfaz de usuario, use el siguiente código para llamar a LocalizationManager para obtener la cadena localizada correspondiente:

// TextLocalization.cs

using UnityEngine;
using UnityEngine.UI;

public class TextLocalization : MonoBehaviour {
    // 需要翻译的字符串的键值
    public string key;

    private Text textComponent;

    private void Start() {
        // 查找UI文本组件并保存
        textComponent = GetComponent<Text>();
        // 更新文本
        UpdateText();
    }

    /// <summary>
    /// 获取对应的本地化字符串,并更新UI文本内容
    /// </summary>
    public void UpdateText() {
        textComponent.text = LocalizationManager.Instance.GetLocalizedValue(key);
    }
}

        Esta clase se adjunta al componente de texto de la interfaz de usuario y establece el campo clave en el valor clave de la cadena que se va a traducir. En el método de inicio, encuentra el componente de texto de la interfaz de usuario y lo guarda, luego llama a UpdateText para actualizar el texto. 

        Lo anterior es una forma sencilla de lograr varios idiomas en Unity. Mediante la creación de archivos de idioma, la creación de clases de administrador de localización y el uso de componentes de texto de la interfaz de usuario, puede hacer que su juego admita varios idiomas fácilmente.

Supongo que te gusta

Origin blog.csdn.net/Asklyw/article/details/130363964
Recomendado
Clasificación