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显示心得的主要内容,如果未能解决你的问题,请参考以下文章

Unity的TextMeshPro学习笔记

Unity的TextMeshPro学习笔记

TextMeshPro快速上手

TextMeshPro快速上手

unity3D创建TextMeshPro(TMP)中文字体(解决输入中文乱码问题)

Unity-TextMeshPro