커스텀 에디터
우리가 작성하는 스크립트는 보통 play mode에서, 즉 게임이 실행 중일 때만 활성화됩니다.
에디터 스크립트를 작성할 때 게임이 실행되지 않는 edit mode 중에도 특정 스크립트가 실행되도록 하면 유용한 경우가 있습니다.
이 경우 ExecuteInEditMode 속성을 추가하면 됩니다.
커스텀 에디터 생성
위의 예에는 편집 모드 중에 간단한 스크립트가 실행되도록 할 수 있는 방법이 나와 있지만, 이 방법만으로는 에디터 툴을 직접 만들 수 없습니다. 다음 단계에는 방금 작성한 스크립트를 위한 Custom Editor 를 만듭니다.
Unity에서 작성하는 스크립트는 기본적으로 MonoBehaviour에서 상속을 받고, 따라서 게임 오브젝트에 놓을 수 있는 컴포넌트입니다. 게임 오브젝트에 놓으면 인스펙터에 표시 가능한 모든 public 변수(정수, 플로트, 문자열, Vector3 등)를 보고 편집하는 데 사용되는 디폴트 인터페이스가 표시됩니다.
디폴트 인스펙터에서는 위의 스크립트를 다음과 같이 찾습니다.
커스텀 에디터는 이 디폴트 레이아웃을 사용자가 선택하는 에디터 컨트롤로 대체하는 별도의 스크립트입니다.
특정 스크립트를 위한 커스텀 에디터를 만드려면 이름이 같지만 “Editor”가 추가된 다른 스크립트를 작성해야 합니다.
Ex) LookAtPoint 스크립트를 위한 커스텀 에디터 -> LookAtPointEditor
이 클래스는 Editor에서 파생되어야 합니다. CustomEditor 속성은 어떤 컴포넌트를 위한 에디터로 동작해야 하는지 Unity에 알립니다. CanEditMultipleObjects 속성은 사용자가 이 에디터로 여러 오브젝트를 선택하고 모두 동시에 변경할 수 있음을 Unity에 알립니다.
https://docs.unity3d.com/kr/2018.4/Manual/editor-CustomEditors.html
에디터 모드에서 원을 그리는 코드
플레이어의 시야, 공격 사정거리 등을 씬에 표현할때 사용하면 좋다.
준비
스크립트가 Editor폴더에 있어야 함

에티터 스크립트는 애드 컴포넌트로 사용하는 것이 아니다.
(애드 컴포넌트 하게되면 경고창이 나온다)

namespace : UnityEditor
상속 : Editor

준비
스크립트가 Editor폴더에 있어야 함
TestHero
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestHero : MonoBehaviour
{
public float attackRange;
public float sight;
}
TestHeroEditor
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(TestHero))]
public class TestHeroEditor : Editor
{
private TestHero hero;
void OnSceneGUI()
{
this.hero = this.target as TestHero;
Handles.color = Color.red;
var center = this.hero.transform.position;
var normal = this.hero.transform.up;
var radius = this.hero.attackRange;
Handles.DrawWireDisc(center, normal, radius);
Handles.color = Color.yellow;
Handles.DrawWireDisc(center, normal, this.hero.sight);
}
}

https://docs.unity3d.com/kr/2018.4/Manual/editor-CustomEditors.html
커스텀 에디터 - Unity 매뉴얼
게임 제작 속도를 높이는 비결은 많이 사용되는 컴포넌트에 대해 커스텀 에디터를 만드는 것입니다. 여기서는 오브젝트가 항상 한 포인트를 바라보도록 하는 매우 간단한 스크립트를 예로 들어
docs.unity3d.com
https://docs.unity3d.com/ScriptReference/Editor.OnSceneGUI.html
Unity - Scripting API: Editor.OnSceneGUI()
Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close
docs.unity3d.com
https://docs.unity3d.com/ScriptReference/Handles.DrawWireDisc.html
Unity - Scripting API: Handles.DrawWireDisc
Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close
docs.unity3d.com
https://answers.unity.com/questions/842981/draw-2d-circle-with-gizmos.html
Draw 2d circle with Gizmos - Unity Answers
answers.unity.com
'Unity > 참고자료' 카테고리의 다른 글
| 플로킹 알고리즘, 군중 알고리즘 (0) | 2021.12.05 |
|---|---|
| IsPointerOverGameObject / RayCast가 UI를 통과하지 않게하기 (0) | 2021.10.20 |
| Unity : 유니티 라이프사이클(가장 중요) (0) | 2021.10.10 |
| Unity : 스크립트를 실행하는 방법 (0) | 2021.10.10 |
| Unity : 인터페이스 및 유니티 메뉴얼 (0) | 2021.10.10 |