-
Notifications
You must be signed in to change notification settings - Fork 1
Week_4: Editor Scripting
에디터 스크립트를 작성할 때 'play mode'가 아닌 게임이 실행되지 않는 'edit mode'중에서도 특정 스크립트가 실행되도록 할 수 있다.
//Example WireBehaviour.cs
[ExecuteInEditMode]
runtime script일 경우:
- Awake:
- scene이 로드될 때 스크립트가 포함된 활성 gameobject가 초기화될 때
- 이전에 비활성된 gameobject가 활성으로 설정될 때
- Object.Instantiate 로 생성된 gameobject가 초기화 된 후 응용 프로그램이 시작되기 전에 Awake 를 사용 하여 변수 또는 상태를 초기화 한다.
- Start: Update 메서드가 처음 호출되기 직전에 스크립트가 활성화되면 프레임에서 Start가 호출된다. -> 따라서 Awake가 start 후에 호출 될 수도 있음.
- Update: MonoBehaviour가 활성화된 경우 Update가 모든 프레임에 호출된다.
Edit script일 경우: 로그를 찍어보니 update밖에 안찍힘. <- 첨인 필요.
이렇게 간단하게 editmode에서 스크립트를 실행할 수 있지만, 이 방법은 에디터 툴을 직접 만들 수 없다.
Unity에서 작성하는 스크립트는 기본적으로 Monobehaviour을 상속받는다. 이를 게임 오브젝트에 올려놓으면 Unity인스펙터에 표시가능한 모든 public 변수를 보고 편집할 수 있는 default interface가 표시된다. 커스텀 에디터는 이 default layout을 사용자가 선택하는 에디터 컨트롤로 대체하는 별도의 스크립트이다.
어떤 스크립트를 위한 커스텀 에디터를 만들고 싶다면 별도의 이름이 같지만 editor가 추가된 다른 스크립트를 작성해야 한다.
//Example WireBehaviourEditor.cs
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(WireBehaviour))]
[CanEditMultipleObjects]
이 클래스는 Editor에서 파생되어야 한다. CustomEditor 속성은 이 Editor script가 어떤 컴포넌트를 위해 동작해야하는지 Unity에 알린다. CanEditMultipleObject 속성은 사용자가 이 에디터 스크립트로 여러 오브젝트를 선택하고 모두 동시에 변경할 수 있음을 Unity에 알린다.
public class WireBehaviourEditor : Editor
{
public override void OnInspectorGUI()
{
~
}
}
OnInspectorGUI는 Unity가 인스펙터에 에디터를 표시할때마다 실행이 된다. <-- 첨언 필요. 이 코드는 게임에서 OnGUI가 작동하는 것 처럼 작동하지만 인스팩터 내에서 실행된다.
.