[Unity 확장] 구성 요소의 ON/OFF 콤보 상자를 등급 제도에 표시하는 편집 확장을 시도해 봤습니다.

개시하다


등급 제도에서 구성 요소의 ON/OFF 콤보 상자를 편집하여 확장해 보십시오.

Mask 구성 요소의 On/OFF 클래스 변경 예

창조적 계기


개체 어셈블리의 ON/OFF를 변경하려는 경우
객체 클릭-> Inspector 창에서 구성 요소 찾기 및 확인란을 클릭
이런 절차는 필요한 것이니 좀 번거롭다.
"등급 제도에서 구성 요소를 직접 열거나 닫을 수 있다면 비교적 수월하지 않을까요?"
그래서 해봤어요.

컨디션


Unity 버전: 5.6.1f1
OS : Windows 10

소스 코드


Unity 항목 내에 Editor 폴더를 만들고 다음 스크립트를 Editor 폴더에 넣습니다.
HierarchyComponentToggler.cs
namespace HierarchyComponentToggler
{
    using System.Linq;
    using UnityEngine;
    using UnityEditor;
    using UnityEditor.SceneManagement;

    /// <summary>
    /// HierachyにコンポーネントActiveチェックボックスを表示するEditorWindow
    /// </summary>
    public class HierarchyComponentToggler : EditorWindow
    {
        private const int WIDTH = 18;
        [SerializeField] private string componentName = "";
        static private string _componentName = "";

        [MenuItem("Tools/Hierarchy Component Toggler")]
        static void Open()
        {
            GetWindow<HierarchyComponentToggler>();
        }

        void OnDestroy()
        {
            _componentName = ""; // リセット
        }

        private void OnGUI()
        {
            EditorGUILayout.LabelField("指定したコンポーネントのActiveチェックボックスをHierarchyに表示します");
            EditorGUI.BeginChangeCheck();
            _componentName = this.componentName;
            this.componentName = EditorGUILayout.TextField(_componentName);
            if (EditorGUI.EndChangeCheck())
            {
                EditorApplication.delayCall += () =>
                {
                    EditorApplication.RepaintHierarchyWindow();
                };
            }
        }

        [InitializeOnLoadMethod]
        private static void Initialize()
        {
            EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
        }

        private static void HierarchyWindowItemOnGUI(int instanceID, Rect selectionRect)
        {
            if (!IsOpen()) { return; }

            var go = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
            if (go == null) { return; }

            var component = go.GetComponent(_componentName);
            if (component == null) { return; }

            EditorGUI.BeginChangeCheck();
            var enabledProperty = component.GetType().GetProperties().FirstOrDefault(p => p.Name == "enabled");
            if (enabledProperty == null) { return; }

            var rect = selectionRect;
            rect.x = rect.xMax - WIDTH;
            rect.width = WIDTH;
            bool enabled = EditorGUI.Toggle(rect, (bool)enabledProperty.GetValue(component, null)); // ON/OFFアクティブボックスを表示
            if (EditorGUI.EndChangeCheck())
            {
                enabledProperty.SetValue(component, enabled, null);
                EditorSceneManager.MarkSceneDirty(go.scene); // シーン変更フラグ ON
            }
        }

        private static bool IsOpen()
        {
            var windows = Resources.FindObjectsOfTypeAll<HierarchyComponentToggler>();
            return windows != null && windows.Length > 0;
        }
    }
}
UDIO 프로세스가 포함되지 않았습니다.

사용법


메뉴에서 Tools/Hierrarchy Componente Togler를 클릭하십시오.

클릭하면 창이 열리고 ON/OFF에 대한 구성 요소 이름만 입력하면 됩니다

(끝)

좋은 웹페이지 즐겨찾기