본문 바로가기

프로그래밍/Unity

[Unity] 인스펙터에 UI 추가하기

C#의 경우 public으로 선언된 변수(어트리뷰트)는 자동으로 인스펙터에 표시가 된다.

수치값의 경우 textbox , bool은 토글 등의 UI를 제공해 주는데, 이 UI를 커스터마이징이

가능하게 되어 있다.

   

이런 커스텀 UI와 관련된 클래스가 몇가지 있는데,

EditorWindow : 팝업 윈도우 관련

ScriptableWizard : 확인/적용 등의 버튼을 가진 마법사 윈도우

Editor : 커스텀 에디터를 위한 기본 클래스

   

이는 에디터와 관련한 클래스 이므로, UnityEditor 네임스페이스를 포함해야 하고, 

Assets\Editor 폴더에 위치해야 한다.

   

   

인스펙터용 커스텀 에디터

   

1. 네임스페이스 추가

using UnityEditor;

   

2. 연결할 스크립트 지정

[CustomEditor(typeof (MyScript))]

   

3. 에디터 클래스 선언

public class MyEditor : Editor {

   

   

4. 인스펙터 오버라이드

public override void OnInspectorGUI() {

// 기존 gui 그리기(필요한 경우)

DrawDefaultInspector();

   

// 타겟 설정

MyScript my = (MyScript) target;

   

// gui 그리기

// EditorGUI, EditorGUILayout 등 사용

}

   

5. 씬에 gui 요소를 그리고자 할때..

public void OnSceneGUI()

{

   

}

}

   


게임 오브젝트를 만들고 위에 연결된 스크립트를 컴포넌트로 지정하면 오버라이드된 인스펙터가 표시된다.




* 예제 : 텍스처 그리기

   

Behaviour 스크립트

public Texture myTexture = null;

   

Editor 스크립트(OnInspectorGUI)

MyScript my = (MyScript) target;

Rect rc = EditorGUILayout.BeginHorizontal();

if( my.myTexture != null )

{

EditorGUI.DrawPreviewTexture( new Rect( rc.left, rc.top,

my.myTexture.width,

my.myTexture.height) ,

my.myTexture );

}

   

EditorGUILayout.EndHorizontal();

   

   

   

추가> 검색하다보니 무척 정리가 잘 된 블로그가 있어서 소개...

<모바일리즘님 블로그>

   



추가>

   

   

에디터 윈도우

public class ExampleWindow : EditorWindow {


// Window 메뉴에 표시할 이름과 클릭시 처리할 명령

[MenuItem("Window/Example")]

public static void ShowWindow()

{

GetWindow<ExampleWindow>("윈도우 타이틀");

}



public void OnGUI()

{

// 라벨, 버튼 등 윈도우 요소가 필요한 경우

GUILayout

EditorGUILayout

}

}


   

툴바

GUILayout.Toolbar




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

[Unity] VR 환경 끄거나 켜기  (0) 2018.09.14
[Unity] AssetDatabase  (0) 2018.09.12
[Unity] AssetBundle  (0) 2018.08.24
[unity3d] 서피스 쉐이더 정리  (1) 2018.06.26
[Unity] Mesh 생성 및 변경  (0) 2011.06.24
2D를 위한 Plane 생성  (0) 2011.05.30
Physics.Raycast  (0) 2011.05.13
2D 게임을 위한 몇가지  (0) 2011.05.09
터치 입력  (0) 2011.04.04
스크립트에서 오브젝트/컴포넌트 접근 및 활성화  (0) 2011.02.11