본문 바로가기
프로그래밍/Unity

Unity EditorTool 을 활용한 Component 값 제어

by neive 2021. 8. 24.
728x90

 

개발을 하다 보면 이런 경우가 있죠

대량의 프리팹 내부의 특정 컴포넌트

의 값을 바꿔줘야 하는 경우-

초기 세팅할게 많은 프리팹의 경우

일일히 손으로 하기 그러니 툴을 만

들어 봅시다

 

 

using UnityEngine;
using UnityEditor;
using UnityEditor.EditorTools;

[EditorTool("Monster EditorTool")]
public class MonsterTool : EditorTool
{
    public GUIContent m_IconContent { get; set; }
    
    private void OnEnable()
    {
        m_IconContent = new GUIContent()
        {
            image = Resources.Load<Texture>("Common/icon_tool"),
            text = "Monster EditorTool",
            tooltip = "Monster EditorTool"
        };
    }

    public override GUIContent toolbarIcon => m_IconContent;

    public override void OnToolGUI(EditorWindow window)
    {
        Handles.BeginGUI();

        GUILayout.BeginArea(new Rect(10, 10, 300, 130), "Monster Tool", new GUIStyle("box"));

        // Your GUILayout here
        if (GUI.Button(new Rect(0, 30, 100, 30), "Set Default"))
            foreach (var tmp in Selection.transforms)
                tmp.GetComponent<Controller_Enemy>().m_Index = 1001;

        GUILayout.EndArea();

        Handles.EndGUI();
    }
}

 

위 처럼 코드를 작성해서 넣으면 이렇게 우리가 넣은 아이콘과 함께 툴 칸에 등록이 됩니다. 우클릭으로 다른 툴로 변경 가능...
딱 눌러보면 이렇게 GUI 로 만든 인터페이스가 뜨고 버튼을 누르면
버튼안에 넣은 작업이 실시간으로 반영되는 것을 볼 수 있습니다

 

라고 다 만들어놓고 막상 써보니 값이 프리팹에 저장이

안됨 -_-;; 하.. 원인을 찾아야 겠는데 바쁜 관계로 다른

방법으로 처리.. 컴포넌트 내에 버튼 부착;

 

Scripts/Editor 에 추가해 주자

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(Controller_Enemy))]
public class Controller_Enemy_Editor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        var obj = (Controller_Enemy)target;
        
        serializedObject.Update();

        EditorGUI.BeginChangeCheck();

        if (GUILayout.Button("Set Default"))
            obj.m_Index = 1001;

        if (EditorGUI.EndChangeCheck())
            EditorUtility.SetDirty(obj);
        
        serializedObject.ApplyModifiedProperties();
    }
}
728x90

'프로그래밍 > Unity' 카테고리의 다른 글

Unity 일정 시간 동안 목표 위치까지 이동  (0) 2021.10.05
txt 파일 생성  (0) 2021.09.09
Unity 어드레서블 에셋  (0) 2021.08.09
CinemachineVirtualCamera Aim 속성  (0) 2021.07.30
Simple Controller  (0) 2021.05.29

댓글