diff --git a/Assets/Editor/Entity/TextMeshProEntity.cs b/Assets/Editor/Entity/TextMeshProEntity.cs new file mode 100644 index 0000000..1d7a178 --- /dev/null +++ b/Assets/Editor/Entity/TextMeshProEntity.cs @@ -0,0 +1,48 @@ +#if UNITY_EDITOR +using Sirenix.OdinInspector; +using TMPro; +using Unity.Mathematics; +using UnityEditor; +using UnityEngine; +using UnityEngine.UI; + +namespace UguiToolkit.Editor +{ + public class TextMeshProEntity : BaseEntity + { + private TextMeshProUGUI m_previewText; + + public override void ApplyTransform(Transform tf) + { + var position = ElementInfo.Position; + tf.position = StageManager.Instance.PrefabContentsRoot.transform.TransformPoint(new Vector3(position.x, position.y, 0)); + tf.rotation = Quaternion.identity; + } + + protected override void OnApplyData(TextMeshProUGUI ui) + { + ui.text = ElementInfo.text; + ui.fontSize = (int)ElementInfo.size; + ui.color = ElementInfo.color; + ui.alignment = TextAlignmentOptions.Center; + + var rectTransform = ui.rectTransform; + rectTransform.sizeDelta = new Vector2(ElementInfo.w + 10, ElementInfo.h + 10); + } + + public void InitPreviewText() + { + if (ElementInfo == null) return; + + if (!TryGetComponent(out m_previewText)) + { + m_previewText = gameObject.AddComponent(); + } + OnApplyData(m_previewText); + + ApplyTransform(transform); + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/Editor/Entity/TextMeshProEntity.cs.meta b/Assets/Editor/Entity/TextMeshProEntity.cs.meta new file mode 100644 index 0000000..61c5394 --- /dev/null +++ b/Assets/Editor/Entity/TextMeshProEntity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9389a2a202d11d34b9c74a3c895450cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/Manager/EntityManager.cs b/Assets/Editor/Manager/EntityManager.cs index 6bee623..1274021 100644 --- a/Assets/Editor/Manager/EntityManager.cs +++ b/Assets/Editor/Manager/EntityManager.cs @@ -20,6 +20,7 @@ namespace UguiToolkit.Editor private List m_imageEntities; private List m_textEntities; + private List m_tmpEntities; private List m_selectionEntities; [LabelText("脱离选择控制"), ShowInInspector] @@ -28,12 +29,16 @@ namespace UguiToolkit.Editor private StageManager m_stageManager; private HashSet m_checkImgPaths; private float m_lastCheckTime; + private bool m_useTMP; private const float m_checkInterval = 2f; private void OnEnable() { - GlobalManager.Instance.showHierarchyOfEntityChanged += OnUpdateHierarchyOfEntityAllEntity; + var globalMng = GlobalManager.Instance; + globalMng.showHierarchyOfEntityChanged += OnUpdateHierarchyOfEntityAllEntity; + m_useTMP = globalMng.setting.useTMP; + Selection.selectionChanged += OnSelectionChanged; m_stageManager = StageManager.Instance; @@ -221,6 +226,10 @@ namespace UguiToolkit.Editor { textEntity.gameObject.SetActive(false); } + foreach (var textEntity in m_tmpEntities) + { + textEntity.gameObject.SetActive(false); + } } else if (activeGameObject.TryGetComponent(out var text)) { @@ -252,6 +261,45 @@ namespace UguiToolkit.Editor { imgEntity.gameObject.SetActive(false); } + foreach (var textEntity in m_tmpEntities) + { + textEntity.gameObject.SetActive(false); + } + } + else if (activeGameObject.TryGetComponent(out var tmp)) + { + bool IsInside = false; + m_entityRoot.gameObject.SetActive(true); + foreach (var tmpEntity in m_tmpEntities) + { + tmpEntity.ShowSelectionImg(true); + tmpEntity.gameObject.SetActive(true); + + m_selectionEntities.Add(tmpEntity); + + if (!IsInside && tmpEntity.IsInside(activeGameObject.transform)) IsInside = true; + } + + if (IsInside) + { + if (m_lastSelectionGo && m_lastSelectionGo == activeGameObject) + { + m_curSelectionGo = activeGameObject; + } + } + else + { + m_curSelectionGo = activeGameObject; + } + + foreach (var imgEntity in m_imageEntities) + { + imgEntity.gameObject.SetActive(false); + } + foreach (var textEntity in m_textEntities) + { + textEntity.gameObject.SetActive(false); + } } } } @@ -270,6 +318,7 @@ namespace UguiToolkit.Editor UpdateHierarchyOfEntity(show, m_entityRoot.gameObject); foreach (var entity in m_imageEntities) UpdateHierarchyOfEntity(show, entity.gameObject); foreach (var entity in m_textEntities) UpdateHierarchyOfEntity(show, entity.gameObject); + foreach (var entity in m_tmpEntities) UpdateHierarchyOfEntity(show, entity.gameObject); } private void UpdateHierarchyOfEntity(in bool show, in GameObject entity) @@ -290,6 +339,7 @@ namespace UguiToolkit.Editor m_imageEntities = new(m_panelCache.layoutInfo.Count); m_textEntities = new(m_panelCache.layoutInfo.Count); + m_tmpEntities = new(m_panelCache.layoutInfo.Count); m_selectionEntities = new(m_panelCache.layoutInfo.Count); foreach (var elementInfo in m_panelCache.GetLayoutElementInfos()) @@ -297,7 +347,7 @@ namespace UguiToolkit.Editor var imgInfo = elementInfo as LayoutInfo.ImageInfo; if (imgInfo != null) // Image { - go = new GameObject("",typeof(RectTransform)); + go = new GameObject(imgInfo.name, typeof(RectTransform)); var entity = go.AddComponent(); entity.transform.SetParent(m_entityRoot); entity.transform.SetSiblingIndex(0); @@ -312,19 +362,35 @@ namespace UguiToolkit.Editor var textInfo = elementInfo as LayoutInfo.TextInfo; if (textInfo != null) // Text { - go = new GameObject("", typeof(RectTransform)); - var entity = go.AddComponent(); - entity.transform.SetParent(m_entityRoot); - entity.transform.SetSiblingIndex(0); + if (m_useTMP) + { + go = new GameObject(textInfo.text, typeof(RectTransform)); + var entity = go.AddComponent(); + entity.transform.SetParent(m_entityRoot); + entity.transform.SetSiblingIndex(0); - entity.SetData(textInfo); - entity.InitPreviewText(); + entity.SetData(textInfo); + entity.InitPreviewText(); - m_textEntities.Add(entity); - UpdateHierarchyOfEntity(false, entity.gameObject); - continue; + m_tmpEntities.Add(entity); + UpdateHierarchyOfEntity(false, entity.gameObject); + continue; + } + else + { + go = new GameObject(textInfo.text, typeof(RectTransform)); + var entity = go.AddComponent(); + entity.transform.SetParent(m_entityRoot); + entity.transform.SetSiblingIndex(0); + + entity.SetData(textInfo); + entity.InitPreviewText(); + + m_textEntities.Add(entity); + UpdateHierarchyOfEntity(false, entity.gameObject); + continue; + } } - } m_entityRoot.gameObject.SetActive(false); diff --git a/Assets/Editor/ScriptObject/SettingScriptObject.cs b/Assets/Editor/ScriptObject/SettingScriptObject.cs index 1ff8ae4..1c5319e 100644 --- a/Assets/Editor/ScriptObject/SettingScriptObject.cs +++ b/Assets/Editor/ScriptObject/SettingScriptObject.cs @@ -10,6 +10,7 @@ namespace UguiToolkit.Editor public string prefabForUIDirPath; public float distanceDifference = 0.2f; + public bool useTMP; } } #endif \ No newline at end of file diff --git a/Assets/UguiToolkit.Editor.asmdef b/Assets/UguiToolkit.Editor.asmdef index f5b968f..5ad6be7 100644 --- a/Assets/UguiToolkit.Editor.asmdef +++ b/Assets/UguiToolkit.Editor.asmdef @@ -2,7 +2,8 @@ "name": "UguiToolkit.Editor", "rootNamespace": "", "references": [ - "GUID:d8b63aba1907145bea998dd612889d6b" + "GUID:d8b63aba1907145bea998dd612889d6b", + "GUID:6055be8ebefd69e48b49212b09b47b2f" ], "includePlatforms": [ "Editor", diff --git a/package.json b/package.json index 1580de8..7ea6fec 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "com.soviby.unity.ui.ugui-toolkit", - "displayName": "UguiToolkit", - "description": "Ugui拼接辅助帮手", - "version": "0.0.1", - "unity": "2022.3", - "author": "Soviby", - "dependencies": { - } + "name": "com.txcombo.c1.ugui-toolkit", + "displayName": "C1UguiToolkit", + "description": "Ugui拼接助手", + "version": "0.0.1", + "unity": "2022.3", + "author": "Soviby", + "dependencies": { + } } \ No newline at end of file