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插件文件夹删了重新再导入就行了

猜你喜欢

转载自blog.csdn.net/zgc978823534/article/details/124967144