unity 如何扩展 TextMeshPro

Posted 那个妹子留步

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 如何扩展 TextMeshPro相关的知识,希望对你有一定的参考价值。

using UnityEngine;
using System;
using System.Collections;
using TMPro;
[Serializable]
public class RoleController : TextMeshProUGUI

    public int age;
    public string roleName = "asadasd";
    public float range;
    public float jumpHight;
    public Texture2D pic;
    public string picName;
    public moveType ac;
    public bool isBoy;

public enum moveType

    jump,
    move,
    attack

在Packages/TextMeshPro/Scripts/Editor/TMP_EditorPanelUI.cs

using UnityEngine;
using UnityEngine.UI;
using UnityEditor;

namespace TMPro.EditorUtilities


    [CustomEditor(typeof(TextMeshProUGUI), true), CanEditMultipleObjects]
    public class TMP_EditorPanelUI : TMP_BaseEditorPanel
    
        static readonly GUIContent k_RaycastTargetLabel = new GUIContent("Raycast Target", "Whether the text blocks raycasts from the Graphic Raycaster.");
        static readonly GUIContent k_MaskableLabel = new GUIContent("Maskable", "Determines if the text object will be affected by UI Mask.");

        SerializedProperty m_RaycastTargetProp;
        private SerializedProperty m_MaskableProp;


        //增加部分
        SerializedProperty ageProp;
        SerializedProperty nameProp;
        SerializedProperty picProp;
        SerializedProperty rangeProp;
        SerializedProperty boolProp;
        SerializedProperty enumProp;

        protected override void OnEnable()
        
            base.OnEnable();
            m_RaycastTargetProp = serializedObject.FindProperty("m_RaycastTarget");
            m_MaskableProp = serializedObject.FindProperty("m_Maskable");

              //增加部分
            ageProp = serializedObject.FindProperty("age");
            nameProp = serializedObject.FindProperty("roleName");
            picProp = serializedObject.FindProperty("pic");
            rangeProp = serializedObject.FindProperty("range");
            boolProp = serializedObject.FindProperty("isBoy");
            enumProp = serializedObject.FindProperty("ac");
        

        protected override void DrawExtraSettings()
        
            Rect rect = EditorGUILayout.GetControlRect(false, 24);

            if (GUI.Button(rect, new GUIContent("<b>Extra Settings</b>"), TMP_UIStyleManager.sectionHeader))
                Foldout.extraSettings = !Foldout.extraSettings;

            GUI.Label(rect, (Foldout.extraSettings ? k_UiStateLabel[0] : k_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
            if (Foldout.extraSettings)
            
                //EditorGUI.indentLevel += 1;

                DrawMargins();

                DrawGeometrySorting();

                DrawIsTextObjectScaleStatic();

                DrawRichText();

                DrawRaycastTarget();

                DrawMaskable();

                DrawParsing();

                DrawSpriteAsset();

                DrawStyleSheet();

                DrawKerning();

                DrawPadding();

                //EditorGUI.indentLevel -= 1;
         
            

             //增加部分
            EditorGUILayout.PropertyField(ageProp, new GUIContent("age"));
            EditorGUILayout.PropertyField(nameProp, new GUIContent("name"));
            EditorGUILayout.PropertyField(boolProp, new GUIContent("isBoy"));
            EditorGUILayout.PropertyField(enumProp, new GUIContent("enum"));
        

        protected void DrawRaycastTarget()
        
            EditorGUI.BeginChangeCheck();
            EditorGUILayout.PropertyField(m_RaycastTargetProp, k_RaycastTargetLabel);
            if (EditorGUI.EndChangeCheck())
            
                // Change needs to propagate to the child sub objects.
                Graphic[] graphicComponents = m_TextComponent.GetComponentsInChildren<Graphic>();
                for (int i = 1; i < graphicComponents.Length; i++)
                    graphicComponents[i].raycastTarget = m_RaycastTargetProp.boolValue;

                m_HavePropertiesChanged = true;
            
        

        protected void DrawMaskable()
        
            EditorGUI.BeginChangeCheck();
            EditorGUILayout.PropertyField(m_MaskableProp, k_MaskableLabel);
            if (EditorGUI.EndChangeCheck())
            
                m_TextComponent.maskable = m_MaskableProp.boolValue;

                // Change needs to propagate to the child sub objects.
                MaskableGraphic[] maskableGraphics = m_TextComponent.GetComponentsInChildren<MaskableGraphic>();
                for (int i = 1; i < maskableGraphics.Length; i++)
                    maskableGraphics[i].maskable = m_MaskableProp.boolValue;

                m_HavePropertiesChanged = true;
            
        

        // Method to handle multi object selection
        protected override bool IsMixSelectionTypes()
        
            GameObject[] objects = Selection.gameObjects;
            if (objects.Length > 1)
            
                for (int i = 0; i < objects.Length; i++)
                
					if (objects[i].GetComponent<TextMeshProUGUI>() == null)
                        return true;
                
            
            return false;
        
        protected override void OnUndoRedo()
        
            int undoEventId = Undo.GetCurrentGroup();
            int lastUndoEventId = s_EventId;

            if (undoEventId != lastUndoEventId)
            
                for (int i = 0; i < targets.Length; i++)
                
                    //Debug.Log("Undo & Redo Performed detected in Editor Panel. Event ID:" + Undo.GetCurrentGroup());
                    TMPro_EventManager.ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED(true, targets[i] as TextMeshProUGUI);
                    s_EventId = undoEventId;
                
            
        
    

 

以上是关于unity 如何扩展 TextMeshPro的主要内容,如果未能解决你的问题,请参考以下文章

Unity 2019 - 如何修复 TextMeshPro 2.0 错误 cs0433

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

unity UGUI源码分析Text与TextMeshPro

Unity-TextMeshPro

unity中使用了textmeshpro插件后 怎么动态更改textmeshpro中的文

Unity 之 UGUI TextMeshPro控件详解