본문 바로가기

- GameProgramming/- Unity 3D

★ 7. Unity Editor 확장 입문 - [1] 에디터 확장에 사용하는 폴더

반응형

[1] 에디터 확장에 사용하는 폴더


1.1 Editor 폴더

Editor 폴더는 에디터 API를 사용하기 위한 특별한 폴더입니다.
보통 에디터 API는 런타임으로 동작하지 않습니다.

아래의 코드를 Assets 폴더 바로 아래에 작성해서 빌드해보면 빌드가 실패되었다고 나오게 됩니다.
쉽게 말하자면 아무 폴더에도 들어가 있지 않은 상태에 하단의 스크립트를 생성하고 Unity 엔진 Build Settings 창의 Build 실행시

1
2
3
4
5
6
using UnityEngine;
using UnityEditor;
 
public class NewBehaviourScript : MonoBehaviour
{
}
cs

개발 중의 유니티 상에서 생성되는 Assembly-CSharp.dll 에서는 UnityEditor.dll의 참조가 발생하므로 스크립트의 컴파일 에러는 발생시키지 않습니다.
빌드 시에 발생되는 Assembly-CSharp.dll에서는 UnityEditor.dll의 참조가 발생하지 않기 때문에 빌드 에러가 발생하는 것입니다.

UnityEditor에서는 Assembly-CSharp-Editor.dll을 생성해서 에디터 API와 런타임 API를 구분하는 것으로 문제를 해결합니다. Assembly-CSharp-Editor.dll은 빌드 시에는 포함되지 않으므로 빌드 에러도 발생하지 않습니다.

또한, Assembly-CSharp-Editor.dll은 Editor 폴더 안의 스크립트 파일이 컴파일 되어 생성되는 것입니다.
Editor 폴더의 생성 장소는 제한이 없으며 여러 개의 Editor 폴더를 생성할 수도 있습니다.
단, Standard Assets, Pro Standard Assets, Plugins 폴더 안에 생성한다면 그 안의 스크립트는 Assembly-CSharp-Editor-firstpass.dll에 컴파일됩니다.

Assembly-CSharp-Editor.dll에서 firstpass를 참조할 수는 있지만
firstpass에서 Assembly-CSharp-Editor.dll을 참조할 수는 없습니다.

[Editor 폴더에 포함시키지 않고 동작시키는 방법]

런타임에서 동작하는 스크립트에 에디터 API를 사용하는 경우가 있습니다. 이 경우에는 아래와 같이 처리할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using UnityEngine;
 
#if UNITY_EDITOR
using UnityEditor;
#endif
 
public class NewBehaviourScript : MonoBehaviour
{
    void OnEnable()
    {
        #if UNITY_EDITOR
        EditorWindow.GetWindow<ExampleWindow>();
        #endif
    }
}
cs

1.2 Editor Default Resources 폴더

Resources 폴더와 마찬가지로 에디터 확장에서만 사용할 리소스를 넣어둘 수 있는 폴더입니다.
Editor Default Resources 폴더 안에 있는 에셋은 EditorGUIUtility.Load로 접근이 가능합니다.

1
Texture tex = EditorGUIUtility.Load("logo.png"as Texture;


Unity Editor 확장에 사용될 폴더에 대해서 알아보았습니다.

다음 강좌에서는 표준 에디터 확장 기능에 대해서 알아보겠습니다.


- 출처 -


반응형