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

news2024/9/27 15:32:58

前因:文本中的换行 \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];
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1920055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis分布式锁-Redisson可重入锁原理的个人见解。

记录Redisson可重入锁的个人见解。 文章目录 前言一、什么叫做锁的重入&#xff1f;二、Redisson可重入锁原理 前言 ⁣⁣⁣⁣ ⁣⁣⁣⁣ 之前在写项目的时候&#xff0c;注意到Redisson可重入锁的一个问题&#xff0c;随即在网上搜索其对应的资料&#xff0c;下面就记录一下个…

nfs共享存储配置

目录 一.存储和NFS共享 1.存储的类型分为三种 2.三种存储架构的应用场景 二.NFS共享存储服务 1.NFS简介 2.NFS存储 3.NFS原理 4.软件介绍 三.搭建NFS服务器 1.搭建 2.使用权限&#xff1a; 读写权限 属主&#xff0c;属组权限 客户端创建文件指向同一属主和属组 …

昇思25天学习打卡营第23天|基于MindSpore通过GPT实现情感分类

1. 学习内容复盘 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 I…

Python骨架肌体运动学数学模型

&#x1f3af;要点 &#x1f3af;运动学矢量计算 | &#x1f3af;跳远的运动学计算 | &#x1f3af;关节肢体运动最小加加速度模型 | &#x1f3af;膝关节和踝关节角度二维运动学计算 | &#x1f3af;上下肢体关节连接运动链数学模型 | &#x1f3af;刚体连接点速度加速度计算…

Qt图形与图片(Qt位置相关函数、Qt基础图形的绘制、双缓冲机制、显示SVG格式图片)

此篇文章介绍几种主要位置函数及其之间的区别&#xff0c;以及各种与位置相关函数的使用场合&#xff1b;然后&#xff0c;通过一个简单绘图工具实例&#xff0c;介绍利用QPainter和QPainterPath两种方法绘制各种基础图形&#xff1b;最后&#xff0c;通过几个实例介绍如何利用…

【JVM】对象的生命周期一 | 对象的创建与存储

Java | 对象的生命周期1-对象的创建与存储 文章目录 前言对象的创建过程内存空间的分配方式方式1 | 指针碰撞方式2 | 空闲列表 线程安全问题 | 避免空间冲突的方式方式1 | 同步处理&#xff08;加锁)方式2 | 本地线程分配缓存 对象的内存布局Part1 | 对象头Mark Word类型指针 P…

昇思25天学习打卡营第1天|初步了解

1在昇思平台上申请过相关资源之后&#xff0c;将示例代码粘贴到输入框内。可以在下图中创建一个新的文档。 2不过初次运行的时候会遇到一个问题&#xff0c;点击运行的时候会出现新的输入框&#xff0c;而不是直接运行。遇到此问题等待就可以了&#xff0c;或者稍微等一下再运…

linux系统判断网络物理连接状态

最近发现 /sys/class/net/ 似乎可以获取网口物理连接状态 于是乎在T113i主板上进行了测试。当前是双网口交换机芯片。如图所示&#xff1a; 具体的是 eth0和eth2是单网口&#xff0c;eth1是交换机芯片接的四个网口。 对于carrier 下面对单网口和交换机芯片的网口进行测试。命…

鸿蒙语言基础类库:【@ohos.util.Vector (线性容器Vector)】

线性容器Vector 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 Vect…

Perl语言简介

1.简介 Perl 是 Practical Extraction and Report Language 的缩写&#xff0c;可翻译为"实用报表提取语言"。   Perl 是高级、通用、直译式、动态的程序语言。   Perl 最初的设计者为拉里沃尔&#xff08;Larry Wall&#xff09;&#xff0c;于1987年12月18日发…

python+pygame实现五子棋人机对战之三

上回讲过&#xff1a; pythonpygame实现五子棋人机对战之一 pythonpygame实现五子棋人机对战之二 界面已经有了&#xff0c;并且可以支持鼠标操作选择菜单和人机对战开始下棋了&#xff0c;那电脑是如何应手落子呢&#xff1f;以下内容是通用的类&#xff0c;全部放在utils.…

SQL优化之深分页

SQL优化之深分页 我们都知道&#xff0c;大型项目中的SQL语句&#xff0c;应该尽量避免深分页。 那么问题就来了&#xff1a; 深分页的性能差在哪&#xff1f;什么方案能避免深分页呢&#xff1f; 什么是深分页 深分页&#xff0c;即SQL查询过程中&#xff0c;使用的页数过…

无需构建工具,快速上手Vue2 + ElementUI

无需构建工具&#xff0c;快速上手Vue2 ElementUI 在前端开发的世界中&#xff0c;Vue.js以其轻量级和易用性赢得了开发者的青睐。而Element UI&#xff0c;作为一个基于Vue 2.0的桌面端组件库&#xff0c;提供了丰富的界面组件&#xff0c;使得构建美观且功能丰富的应用变得…

第6章 IT服务运营管理

第6章 IT服务运营管理 6.1 概述 大量企业的实践表明&#xff0c;IT服务运营方面的问题更多的不是来自产品或技术&#xff08;如硬件、软件、网络、电力故障等&#xff09;方面&#xff0c;而是来自管理方面。IT服务的提供者&#xff0c;无论是企业内部的IT部门&#xff0c;还…

nuPlan 是一个针对自动驾驶车辆的闭环机器学习(ML-based)规划基准测试

nuPlan: A closed-loop ML-based planning benchmark for autonomous vehicles nuPlan 是一个针对自动驾驶车辆的闭环机器学习&#xff08;ML-based&#xff09;规划基准测试 Abstract In this work, we propose the world’s first closed-loop ML-based planning benchmar…

Linux文件编程应用

目录 一、实现cp命令 二、修改程序的配置文件 三、写一个整数/结构体到文件 1.写一个整数到文件 2.写一个结构体到文件 四、写结构体数组到文件 我们学习了文件编程的常用指令以及了解文件编程的基本步骤后&#xff0c;试着来写一些程序实现某些功能。&#xff08;没有学…

Java设计模式的7个设计原则

Java设计模式的7个设计原则是面向对象设计领域中的重要指导方针&#xff0c;它们旨在提高软件系统的可维护性、可扩展性、可复用性和灵活性。以下是这7个设计原则的详细解释&#xff1a; 1. 开闭原则&#xff08;Open-Closed Principle, OCP&#xff09; 定义&#xff1a;一个…

体验一下智能指针的强大

课程总目录 文章目录 一、智能指针基础知识二、不带引用计数的智能指针auto_ptrscoped_ptrunique_ptr 三、带引用计数的智能指针模拟实现一个带引用计数的智能指针shared_ptr交叉引用问题 四、多线程访问共享对象的线程安全问题五、智能指针删除器六、建议用make_shared代替sha…

如何找工作 校招 | 社招 | 秋招 | 春招 | 提前批

马上又秋招了&#xff0c;作者想起以前读书的时候&#xff0c;秋招踩了很多坑&#xff0c;但是第一份工作其实挺重要的。这里写一篇文章&#xff0c;分享一些校招社招的心得。 现在大学的情况是&#xff0c;管就业的人&#xff0c;大都是没有就业的辅导员&#xff08;笔者见过…

JavaWeb(一:基础知识和环境搭建)

一、基本概念 1.前言 JavaWeb&#xff1a;在Java中&#xff0c;动态web资源开发网页的技术。 web应用分两种&#xff1a;静态web资源和动态web资源 Ⅰ. 静态web资源&#xff08;如html 页面&#xff09;&#xff1a; 指web页面中的数据始终是不变。 所有用户看到都是同一个…