【Unity基础】两个关于UGUI中Text对非英文字体支持的问题

在这里插入图片描述

问题1:Unity中为什么UGUI中的Text(Textmeshpro)默认不支持非英文字体,而legacy中的text却可以呢?

在Unity中,TextMeshPro(TMP)默认不支持非英文字体,而Legacy Text支持,主要原因如下:

1. 字体资源管理

  • TextMeshPro:使用自定义字体资源(如.fontasset),需手动生成包含所需字符的字体资源。默认情况下,TMP仅包含英文字符以节省资源。
  • Legacy Text:依赖系统字体,支持所有系统安装的字体,包括非英文字符。

2. 性能优化

  • TextMeshPro:生成字体图集时,包含的字符越多,资源占用越大。默认仅包含英文字符以减少内存和存储开销。
  • Legacy Text:直接使用系统字体,无需额外生成字体资源,因此支持所有字符。

3. 字符集生成

  • TextMeshPro:需通过TMP的字体资产创建工具生成包含所需字符的字体资源。如果未生成包含非英文字符的字体资源,则无法显示。
  • Legacy Text:直接使用系统字体,无需额外生成字符集。

4. 历史原因

  • TextMeshPro:作为更现代的文本渲染方案,设计时更注重性能和灵活性,默认配置偏向英文用户。
  • Legacy Text:作为旧版系统,设计时未过多考虑性能优化,因此支持更广泛的字符集。

解决方案

要让TextMeshPro支持非英文字体,需手动生成包含所需字符的字体资源:

  1. 在Unity中创建或导入字体文件(如TTF)。
  2. 使用TMP的字体资产创建工具生成包含非英文字符的字体资源。
  3. 在TextMeshPro组件中使用生成的字体资源。

总结

TextMeshPro默认不支持非英文字体是为了优化性能和资源管理,而Legacy Text直接使用系统字体,因此支持更广泛的字符集。通过手动生成字体资源,可以让TextMeshPro支持非英文字体。

问题2:UGUI中已经有了TextMeshPro为什么要还要保留Legacy中的这四个控件呢?

在Unity中,尽管TextMeshPro(TMP)提供了更强大的文本渲染功能,但Legacy UI系统中的四个控件(TextImageRawImageButton)仍然被保留,主要原因如下:


1. 向后兼容性

  • 历史项目:许多旧项目依赖Legacy UI系统,移除这些控件会导致项目无法正常运行。
  • 平滑过渡:Unity希望开发者能够逐步迁移到TMP,而不是强制立即切换。

2. 简单场景的需求

  • 轻量级需求:对于简单的UI需求(如仅显示英文文本或基本图像),Legacy控件足够使用,且更轻量。
  • 快速开发:Legacy控件配置简单,适合快速原型开发或简单UI场景。

3. 性能考虑

  • 低开销:Legacy控件在性能上比TMP更轻量,适合对性能要求较高的场景(如移动端或低端设备)。
  • TMP开销:TMP功能强大,但生成字体资源和渲染复杂文本时开销较大。

4. 学习成本和迁移成本

  • 学习曲线:TMP功能强大但配置复杂,新手可能更倾向于使用Legacy控件。
  • 迁移成本:将Legacy控件替换为TMP需要额外工作(如生成字体资源、调整UI布局等),保留Legacy控件可以降低迁移成本。

5. 功能覆盖

  • TMP并非万能:TMP主要用于文本渲染,而Legacy控件(如ImageRawImageButton)在图像和交互功能上仍然有用。
  • 混合使用:在某些场景中,开发者可能希望混合使用Legacy控件和TMP,以达到最佳效果。

6. Unity的渐进式改进策略

  • Unity倾向于逐步改进其系统,而不是彻底废弃旧功能。保留Legacy控件是为了给开发者更多选择,同时逐步引导他们使用更现代的解决方案。

总结

保留Legacy控件的核心原因是为了向后兼容简化开发流程降低性能开销以及减少迁移成本。尽管TMP功能更强大,但Legacy控件在简单场景中仍然有其价值。Unity的目标是提供一个平滑的过渡路径,而不是强制开发者立即切换到TMP。

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

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

相关文章

碎片时间干活的好手(requestIdleCallback)

🟢 What —— 它是什么? requestIdleCallback(callback[, options]) 是浏览器提供的一个 API,用来在主线程空闲时执行一些优先级不高的任务。 它的特点: 异步执行:不会打断关键的渲染、交互、动画。节省性能&#xff1…

第三方网站测评:【WEB应用文件包含漏洞(LFI/RFI)的测试步骤】

文件包含漏洞分为本地文件包含(LFI)和远程文件包含(RFI)两类。LFI允许读取服务器本地文件,RFI可执行远程服务器上的恶意代码。PHP应用中include()、require()等函数未正确过滤用户输入时易产生此类漏洞。 检测URL中可能包含文件的参数,常见特征如下: 参数名包含file、pa…

网络爬虫(web crawler)

文章目录一、什么是网络爬虫二、爬虫工作流程详解第1步:起始点 - URL种子库(Seed URLs)第2步:大脑 - 调度器(Scheduler)第3步:双手 - 网页下载器(Downloader)第4步&#…

redis的高可用(哨兵)

Redis 的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工进行主从切换,同时大量的客户端需要被通知切换到新的主节点上,对于上了一定规模的应用来说,这种方案是无法接受的,于是Redis从2.8开始提供…

安徽某能源企业积极推进运维智能化转型,引入高压配电房机器人巡检系统

在工业自动化与智能化深度融合的当下,机器人技术已成为能源行业提质增效的关键支撑。特别是在配电房这类高压电力核心区域的运维工作中,传统人工巡检不仅面临效率低下、巡检周期长的困境,更因人员直接接触高压设备而存在极高的安全风险。此&a…

数据结构_二叉平衡树

#include <stdio.h> #include <stdlib.h> #define max(a,b) ((a > b)? (a):(b))//平衡二叉树的节点结构 typedef struct AVL_TreeNode{int data; //数据域struct AVL_TreeNode* l;struct AVL_TreeNode* r;int h;//记录树的高度&#xff0c;用于计算平衡因子 }…

扫描件、PDF、图片都能比对!让文档差异无所遁形

智能文档比对系统可精准识别文档差异&#xff0c;解决金融、法律等多方协作场景下的版本混乱、审核低效和合规风险问题&#xff0c;将一份百页文档的人工核对从数小时缩短至3分钟以内。 文档差异比对常见场景有哪些&#xff1f; 每一次文档的修改都可能带来潜在风险&#xff0c…

excel里面店铺这一列的数据结构是2C【uniteasone17】这种,我想只保留前面的2C部分,后面的【uniteasone17】不要

这个结构是&#xff1a; 2C【uniteasone17】只要取前面的 2C 部分&#xff0c;可以用 Excel 的 公式 或者 文本函数 来实现。 方法 1&#xff1a;使用公式提取 假设店铺数据在 A2 单元格&#xff1a; LEFT(A2,FIND("【",A2)-1)&#x1f449; 解释&#xff1a; FIND(“…

四、神经网络的学习(中)

4.3 数值微分梯度法使用梯度的信息决定前进的方向。本节将介绍梯度是什么、有什么性质等内容。4.3.1 导数假如你是全程马拉松选手&#xff0c;在开始的10分钟内跑了2千米。如果要计算此时的奔跑速度&#xff0c;则为2/10 0.2&#xff3b;千米/分&#xff3d;。也就是说&#x…

Jenkins 监控方案:Prometheus + Grafana 实践

这两天在运维群里面看到有人说 Jenkins 节点也可以监控&#xff0c;以前没想过搞这个&#xff0c;现在就对公司 Jenkins 搞搞顺便记录下呗。 一、使用 Jenkins Prometheus 插件&#xff08;推荐方式&#xff09; 1. 安装插件 在 Jenkins 插件管理里搜索并安装 Prometheus Me…

用博图FB类比c#中sdk的api

我有一个大胆的想法我准备自己做个简单的视觉软件来锻炼自己的c#编程能力&#xff0c;我准备用到海康工业机器人官网下载的mvs软件的sdk,听说sdk的主要作用就是api提供了开放的接口给第三方免费调用。按照我的理解&#xff0c;api接口就像西门子博图的FB块&#xff0c;所谓api接…

【Leetcode】高频SQL基础题--1164.指定日期的产品价格

【Leetcode】高频SQL基础题–1164.指定日期的产品价格 要求&#xff1a;一开始&#xff0c;所有产品价格都为 10。编写一个解决方案&#xff0c;找出在 2019-08-16 所有产品的价格。 以 任意顺序 返回结果表。解题思路&#xff1a; 找到 2019-08-16 前所有有改动的产品及其最新…

Django全局异常处理全攻略

在 Django 中处理全局异常&#xff0c;有几种常见的方式&#xff0c;通常目标是&#xff1a; 捕获项目中未被单独处理的错误统一返回给前端&#xff08;如 JSON 响应 / 自定义错误页&#xff09;方便记录日志1. 使用 Django 自带的全局异常处理机制 Django 有一些内置的全局错误…

【开题答辩全过程】以电商数据可视化系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

MyBatis入门到精通:CRUD实战指南

1. MyBatisORM&#xff1a;对象关系映射O&#xff08;Object&#xff09;&#xff1a;Java虚拟机中的Java对象R&#xff08;Relational&#xff09;&#xff1a;关系型数据库M&#xff08;Mapping&#xff09;&#xff1a;将Java虚拟机中的Java对象映射到数据库表中一行记录&am…

WebRTC开启实时通信新时代

摘要&#xff1a;WebRTC&#xff08;Web实时通信&#xff09;是一项开源技术&#xff0c;支持浏览器直接进行低延迟音视频通信和数据传输&#xff0c;无需安装插件。其核心技术包括RTCPeerConnection&#xff08;建立点对点连接&#xff09;、MediaStream&#xff08;媒体流处理…

【51单片机8*8点阵显示箭头动画详细注释】2022-12-1

缘由51单片机实现8*8滚动箭头的程序,运行时什么图案都没有,甚至根本不亮 - 24小时必答区 #include<reg52.h> unsigned char code M[]{0xff,0xff,0xfe,0xfd,0xf8,0xfd,0xfe,0xff,0xff,0xff,0xfd,0xfb,0xf0,0xfb,0xfd,0xff,0xff,0xff,0xfb,0xf7,0xe0,0xf7,0xfb,0xff,0xff,0…

手撕Redis底层3-持久化机制与集群化方案

1.Redis持久化机制Redis设计了两种持久化落盘机制&#xff1a;RDB和AOF1.1 RDB持久化RDB持久化是Redis的数据快照&#xff0c;简单来说就是把内存中的所有数据都记录到磁盘中&#xff0c;当Redis实例故障重启后&#xff0c;从磁盘中读取快照文件来恢复数据。快照文件称为RDB文件…

mysql中null值对in子查询的影响

1、场景 有这样一个查询&#xff0c;有些时候是正确的&#xff0c;有些时候没报错但是又查询不到数据&#xff0c;分析数据排查后发现当user_id字段存在null值的时候查询不到数据。select * from table1 where id in (select user_id from talbe2 where status1);2、问题 为什么…

如何在 tortoise-orm 内使用 JSON_EXTRACT

先说结论&#xff1a; # 假设 JsonField 名称为 data&#xff0c;内容为 {"info": {"path": "我的资源创建"}} qs qs.filter(data__filter{"info.path": "我的资源创建"})我查看了 tortoise-orm 官方文档&#xff0c;没有这…