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