Unity - TextMeshPro图文混排

Posted

tags:

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

参考技术A 开发中经常需要文字和图片穿插使用,类似下图

HKEY_CURRENT_USER\Software\code-and-web.de\TexturePacker\licensing
下的trialExpired的值确保为false,
\data下的expiryDate的值改成2999-01-01。
请支持正版。

https://blog.csdn.net/qq_37057633/article/details/81120583

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实战之TextMeshPro实现聊天图文混排

unity实战之TextMeshPro实现聊天图文混排

UGUI-图文混排方案

Unity插件之TextMeshPro 富文本【转】

Unity Emoji表情(图文混排)2022最详细教程

[UGUI]图文混排:下划线