using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using TMPro; using BFEditor.Resource; using BF; namespace BFEditor { public class GameObjectEditer : Editor { static Material CustomUIDefault; // 重写Text菜单,默认取消raycastTarget [MenuItem("GameObject/UI/Text", true)] static bool ValidateUITextMenu() { return true; } [MenuItem("GameObject/UI/Text", false)] static void CreateUIText() { GameObject go = new GameObject("Text", typeof(UnityEngine.UI.Text)); UnityEngine.UI.Text text = go.GetComponent(); text.raycastTarget = false; text.material = GetCustomDefaultUIMat(); CheckAndSetUIParent(go.transform); } [MenuItem("GameObject/UI/TextMeshPro - Text", true)] static bool ValidateUITextMeshProMenu() { return true; } [MenuItem("GameObject/UI/TextMeshPro - Text", false)] static void CreateUITextMeshPro() { Debug.LogError("请在UI/BF通用控件里创建Text"); } // 重写Image菜单,默认取消raycastTarget [MenuItem("GameObject/UI/Image", true)] static bool ValidateUIImageMenu() { return true; } [MenuItem("GameObject/UI/Image", false)] static void CreateUIImage() { GameObject go = new GameObject("Image", typeof(UnityEngine.UI.Image)); UnityEngine.UI.Image image = go.GetComponent(); image.raycastTarget = false; image.material = GetCustomDefaultUIMat(); CheckAndSetUIParent(go.transform); } [MenuItem("GameObject/UI/BFSlider", false)] static void CreateBFSlider() { GameObject go = new GameObject("BFSlider", typeof(BFSlider)); BFSlider slider = go.GetComponent(); slider.raycastTarget = false; slider.material = GetCustomDefaultUIMat(); CheckAndSetUIParent(go.transform); } [MenuItem("GameObject/UI/Raw Image", true)] static bool ValidateUIRawImageMenu() { return true; } [MenuItem("GameObject/UI/Raw Image", false)] static void CreateUIRawImage() { GameObject go = new GameObject("RawImage", typeof(UnityEngine.UI.RawImage)); UnityEngine.UI.RawImage image = go.GetComponent(); image.raycastTarget = false; image.material = GetCustomDefaultUIMat(); CheckAndSetUIParent(go.transform); } static void CheckAndSetUIParent(Transform uiTransform) { if (Selection.activeTransform) // 当前有选择一个父节点 { uiTransform.SetParent(Selection.activeTransform, false); } else { var currentPrefabStage = UnityEditor.SceneManagement.PrefabStageUtility.GetCurrentPrefabStage(); if (currentPrefabStage != null) //当前处于prefab编辑模式 { var prefabRoot = currentPrefabStage.prefabContentsRoot; uiTransform.SetParent(prefabRoot.transform, false); } } Selection.activeTransform = uiTransform; } static Material GetCustomDefaultUIMat() { if (CustomUIDefault == null) CustomUIDefault = AssetDatabase.LoadAssetAtPath(ResourceProcessConfig.CUSTOM_DEFAULT_UI_MAT_PATH); return CustomUIDefault; } [MenuItem("GameObject/UI/Button", true)] static bool ValidateUIButtonMenu() { return true; } [MenuItem("GameObject/UI/Button", false)] static void CreateUIButton() { Debug.LogError("请在UI/BF通用控件里创建Button"); } [MenuItem("GameObject/UI/Button - TextMeshPro", true)] static bool ValidateUIButtonTMPMenu() { return true; } [MenuItem("GameObject/UI/Button - TextMeshPro", false)] static void CreateUIButtonTMP() { Debug.LogError("请在UI/BF通用控件里创建Button"); } [MenuItem("GameObject/UI/Text - TextMeshPro", true)] static bool ValidateUITextTMPMenu() { return true; } [MenuItem("GameObject/UI/Text - TextMeshPro", false)] static void CreateUITextTMP() { Debug.LogError("请在UI/BF通用控件里创建Text"); } [MenuItem("GameObject/UI/BF通用控件/Button")] static void CreateBFCommonButton() { GameObject go = new GameObject("Button", typeof(UnityEngine.UI.Image)); UnityEngine.UI.Image image = go.GetComponent(); image.material = GetCustomDefaultUIMat(); go.AddComponent(); CheckAndSetUIParent(go.transform); } [MenuItem("GameObject/UI/BF通用控件/Text")] static void CreateBFCommonText() { if (TMP_Settings.defaultFontAsset == null) { var tmpSettings = TMP_Settings.instance; var type = tmpSettings.GetType(); var fontAssetField = type.GetField("m_defaultFontAsset", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); var fontAssets = AssetDatabase.LoadAssetAtPath(ResourceProcessConfig.DEFAULT_TMP_FONTASSET_PATH); fontAssetField.SetValue(tmpSettings, fontAssets); AssetDatabase.Refresh(); } GameObject go = new GameObject("TextMeshPro", typeof(TMPro.TextMeshProUGUI)); TMPro.TextMeshProUGUI textMeshPro = go.GetComponent(); textMeshPro.raycastTarget = false; var font = AssetDatabase.LoadAssetAtPath( "Assets/arts/fonts/tmpfonts/default/tmpfont/font_sdf.asset"); textMeshPro.font = font; textMeshPro.material = GetCustomDefaultUIMat(); textMeshPro.enableWordWrapping = false; CheckAndSetUIParent(go.transform); if (TMP_Settings.defaultFontAsset != null) { var tmpSettings = TMP_Settings.instance; var type = tmpSettings.GetType(); var fontAssetField = type.GetField("m_defaultFontAsset", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); fontAssetField.SetValue(tmpSettings, null); AssetDatabase.Refresh(); } } [MenuItem("GameObject/UI/创建序列帧")] static void CreateFrameAnimation() { FrameAnimationTools.CreateFrameAnimation(); } [MenuItem("GameObject/UI/创建序列帧(父节点)")] static void CreateFrameAnimationInParent() { FrameAnimationTools.CreateFrameAnimation(true); } } }