Unity之Text组件换行\n没有实现+动态中英互换

前因:文本中的换行 \n没有换行而是打印出来了,解决方式

因为unity会默认把\n替换成\\n

面板中使用富文本这个选项啊 没有用

m_text.text = m_text.text.Replace("\\n", "\n");

###动态中英文互译

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Video;
using System;
using static EasyLanguage;

public class UIManage : MonoBehaviour//, IPointerDownHandler, IPointerUpHandler
{
    public VideoPlayer[] videoPlay;
    
    //实例
    private EasyLanguage m_language;
    
    //中英按钮
	public Button chinese_btn;
	public Button sound_btn;
    
	private AudioSource audios;

	private bool sound;
    private bool chinese=true;//中文

    private void Awake()
    {
        m_language = EasyLanguage.GetInstance();
    }
    void Start() {

		audios = GetComponent<AudioSource>();
        chinese_btn.onClick.AddListener(ChineseChanged);
        ChineseChanged();
    }

    /// <summary>
    /// 中英互译
    /// </summary>
    private void ChineseChanged()
    {
        if (chinese)
        {
            chinese_btn.GetComponent<Image>().sprite = Resources.Load<Sprite>("UI/cn");
            m_language.Changedlanguage(EasyLanguage.LanguageList.cn);
            Debug.Log("Chinese");
            chinese = false;
        }
        else
        {
            chinese_btn.GetComponent<Image>().sprite = Resources.Load<Sprite>("UI/en");
            m_language.Changedlanguage(EasyLanguage.LanguageList.en);
            Debug.Log("English");

            chinese = true;
        }
    }
  
    /// <summary>
    /// 音频播放
    /// </summary>
	private void Sound()
    {
		if(sound)
        {
			sound_btn.GetComponent<Image>().sprite = Resources.Load<Sprite>("UI/on");
			audios.volume = 1;
			sound = false;
		}
		else
        {
			sound_btn.GetComponent<Image>().sprite = Resources.Load<Sprite>("UI/off");
			audios.volume = 0;
			sound = true;
		}
    }


    private void CloseVideo()//关闭视频
    {
        for (int i = 0; i < videoPlay.Length; i++)
        {
            videoPlay[i].gameObject.SetActive(false);
        }
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class EasyLanguageText : MonoBehaviour
{
    public string m_key;
    private Text m_text;

    // Start is called before the first frame update
    void Start()
    {
        m_text = transform.GetChild(0).GetComponent<Text>();
        //调用静态函数   注册事件
        EasyLanguage.GetInstance().ReginsterELT(this);
        //加载中...
        OnLanguageChanged();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    /// <summary>
    ///unity文本组件没有实现换行的效果
    ///  因为unity会默认把\n替换成\\n
    /// m_text.text = m_text.text.Replace("\\n", "\n");
    /// </summary>
    public void OnLanguageChanged()
    {
        m_text.text = EasyLanguage.GetInstance().GetTextByKey(m_key);
        m_text.text = m_text.text.Replace("\\n", "\n");
    }
}

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
/// <summary>
/// 中英互译
/// key  --> value
/// 储存
/// </summary>
public class EasyLanguage
{
    #region 单例
    //静态函数
    private static EasyLanguage m_instance;
    //实例
    public static EasyLanguage GetInstance()
    {
        if (m_instance == null)
        {
            m_instance = new EasyLanguage();
        }
        return m_instance;
    }
    #endregion
    //键值储存  key=str   value=123
    private Dictionary<string, string> m_dic_elt;
    //集合
    private List<EasyLanguageText> m_list_elt;

    //构造函数
    EasyLanguage()
    {
        //初始化容器
        m_dic_elt = new Dictionary<string, string>();
        m_list_elt = new List<EasyLanguageText>();
   
        //当前语言
        m_currentLanguage = LanguageList.cn;
        //更新语言
        loadLanguage();
        OnLanguageChanged();
    }
    //事件:注册
    public void ReginsterELT(EasyLanguageText elt)
    {
        m_list_elt.Add(elt);
    }
    //事件:销毁
    public void UnReginsterELT(EasyLanguageText elt)
    {
        m_list_elt.Remove(elt);
    }

    //枚举 语言类型
    public enum LanguageList
    {
        en,//英文
        cn//中文
    }
    //当前语言类型
    private LanguageList m_currentLanguage;
 
    //获取当前语言
    public void Changedlanguage(LanguageList ll)
    {//当前值改成传入的
        Debug.Log(m_currentLanguage+"-->"+ll);
        if (m_currentLanguage == ll) return;
        m_currentLanguage = ll;
        m_dic_elt.Clear();
        loadLanguage();
        OnLanguageChanged();
    }
    /// <summary>
    /// 语言切换
    /// </summary>
    public void OnLanguageChanged()
    {
        //if (m_currentLanguage == LanguageList.cn)
        //{
        //    m_dic_elt.Add("h3", "yuan庄");
        //    m_dic_elt.Add("h4", "lu庄");
        //}
        //else
        //{
        //    m_dic_elt.Add("h3", "yuanzhuang");
        //    m_dic_elt.Add("h4", "luzhuang");
        //}
        Debug.Log("OnLanguageChanged" );
        foreach (var elt in m_list_elt)
        {
            elt.OnLanguageChanged(); 
        }
    }
    /// <summary>
    /// 读取key
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public string GetTextByKey(string key)
    {
        return m_dic_elt[key];
    }
    /// <summary>
    ///加载语言
    /// </summary>
    public void loadLanguage()
    {
        switch (m_currentLanguage)
        {
            case LanguageList.en:
                //英文
                StreamIOText("en");
                break;
            case LanguageList.cn:
                //中文
                StreamIOText("cn");
                break;
            default:
                break;
        }
    }
    public void StreamIOText(string chinese)
    {
        TextAsset asset = Resources.Load(chinese) as TextAsset;
        //流取出字节
        Stream st = new MemoryStream(asset.bytes);
        //逐行读取
        StreamReader sr = new StreamReader(st);
        //每行都打印   只要不是最后一行
        while (!sr.EndOfStream)
        {
            string line = sr.ReadLine();
            Debug.Log(line);
            string[] tempStrings = line.Split('=');
            m_dic_elt[tempStrings[0]] = tempStrings[1];
        }
    }
}
相关推荐
dangoxiba8 小时前
【Unity学习心得】如何使用Unity制作“饥荒”风格的俯视角2.5D游戏
游戏·unity·c#·游戏引擎
cyr___11 小时前
Unity教程(十六)敌人攻击状态的实现
学习·游戏·unity·游戏引擎
优梦创客19 小时前
《黑神话悟空》开发框架与战斗系统解析
unity·游戏开发·黑神话悟空·战斗系统·解包
仙魁XAN1 天前
Unity 设计模式 之 创造型模式-【工厂方法模式】【抽象工厂模式】
unity·设计模式·工厂方法模式·抽象工厂模式
躺下睡觉~1 天前
Unity-Transform类-父子关系
java·unity·游戏引擎
躺下睡觉~1 天前
Unity-Transform类-缩放和看向
unity·游戏引擎
君莫愁。2 天前
【Unity】检测鼠标点击位置是否有2D对象
unity·c#·游戏引擎
咩咩觉主2 天前
Unity实战案例全解析:PVZ 植物卡片状态分析
unity·c#·游戏引擎
蓝裕安2 天前
伪工厂模式制造敌人
开发语言·unity·游戏引擎
谢泽浩2 天前
Unity 给模型贴上照片
unity·游戏引擎