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();
}
}
라고 다 만들어놓고 막상 써보니 값이 프리팹에 저장이
안됨 -_-;; 하.. 원인을 찾아야 겠는데 바쁜 관계로 다른
방법으로 처리.. 컴포넌트 내에 버튼 부착;
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 |
댓글