Unity TextMeshPro显示心得
Posted 曾冠超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity TextMeshPro显示心得相关的知识,希望对你有一定的参考价值。
由于想做一个2D卡牌类游戏
需要对卡牌进行动态改变层级关系
对与附加到卡牌上的文字犯了难
因为要动态改变文字的层级显示关系
所以一开始选用的是3DText
发现不好做文字居中,遂改用TextMeshPro
而真要做层级显示需要改变摄象机的渲染顺序
则需要改变 Sorting Layer
和 Order Layer 的值
确定了Sorting Layer层后会根据Order Layer 来进行先后渲染
默认的inspector面版里是没有Sorting Layer的值
在Editor里添加一下代码就能显示了(记得先创建Editor文件夹)
using UnityEditor;
using UnityEngine;
/// <summary>
/// 显示Sorting Layer,Order In Layer
/// </summary>
[CustomEditor(typeof(MeshRenderer))]
public class MeshRenderEditor : Editor
MeshRenderer meshRenderer;
public override void OnInspectorGUI()
base.OnInspectorGUI();
meshRenderer = target as MeshRenderer;
string[] layerNames = new string[SortingLayer.layers.Length];
for (int i = 0; i < layerNames.Length; i++)
layerNames[i] = SortingLayer.layers[i].name;
int layerValue = SortingLayer.GetLayerValueFromID(meshRenderer.sortingLayerID);
layerValue = EditorGUILayout.Popup("Sorting Layer", layerValue, layerNames);
SortingLayer layer = SortingLayer.layers[layerValue];
meshRenderer.sortingLayerName = layer.name;
meshRenderer.sortingLayerID = layer.id;
meshRenderer.sortingOrder = EditorGUILayout.IntField("Order In Layer", meshRenderer.sortingOrder);
然而发现但改变目标这俩个值并不能动态改变TextMeshPro层级,
于是发现在运行时对应TextMeshPro下会生成新的对象
发现只有改变这里面的Layer值才能影响文字的显示
可以在目标物体GetChild(0)就得到了
由于是在有TextMeshPro的物体创建后自动生成的所以不能在原物体的Awake直接获取
所以为避免第一次获取不到报错的情况只需要Try Catch一下就好了
中文显示
字体在设置好了中文Txt后依然用不了调一下下面俩值就好了,不行就改为最大
不断报错 MissingReferenceException: The object of type ‘GameObject’ has been destroyed
吧导入的TextMesh Pro插件文件夹删了重新再导入就行了
Unity的TextMeshPro学习笔记
2020年12月,Unity2020.3.18,TextMeshPro版本3.0.6
TextMeshPro比原有UGUI里的Text显示效果更好,能在不同大小保持平滑,能显示出更多样子,能够受光照影响并生成阴影。总之就是比原来酷。而且能在一些方面提升性能。
第一次启动的时候,需要安装基础配置,官方建议放在Resources目录下。最关键的Text MeshPro的配置文件,默认字体资源,还有那些着色器。核心是Font Asset字体资源。
字体资源需要用Font Asset Creator创建,可以有变体。除了各种样子以外,最重要的是字体资源是动态还是静态,还有后备字体资源。总之通过各种方式达到少加载字体还抱着不会显示乱码。
表情包资源不用软件生成的话,要调整偏移很崩溃。那个软件是收费的。200多。
不建议直接修改材质,建议复制后使用副本修改。
以上是关于Unity TextMeshPro显示心得的主要内容,如果未能解决你的问题,请参考以下文章