Game Programming/Game Engine

Unity3D :: Create Window for Unity Editor (유니티 에디터에 윈도우 만들기)

VallistA2015. 3. 26. 17:20

유니티 에디터에는 수많은 기능이 존재하는데, 그 기능중에 에디터에서 커스터마이즈 하는 기능이 있다.

저번 글에 에디터 커스터마이즈는 올렸었다.

http://vallista.tistory.com/entry/Unity3D-Editor-Customize-%EC%9C%A0%EB%8B%88%ED%8B%B0-%EC%97%90%EB%94%94%ED%84%B0-%EC%BB%A4%EC%8A%A4%ED%84%B0%EB%A7%88%EC%9D%B4%EC%A6%88
[Unity Editor Customize]


이번에는 유니티 에디터에서 상단의 메뉴바에서 바를 누르면 윈도우가 만들어지도록 할 것이다.



위에 소스에서 우리는 Monobehaviour를 상속받지 않는다. 

그리고 EditorWindow를 상속받게 되는데, 이는 에디터 윈도우 전용으로 만들어진 클래스로써 상속을받으면 에디터에서 새로운 윈도우를 만드는데 도움주는 함수들을 override 해서 사용하거나 변수들을 가지고와서 사용이 가능해진다.



<사진 1: Test/Create Window 버튼을 누를시 나오는 윈도우 오브젝트>


MenuItem 하단에 함수를 만들고, 그 함수는 무조껀 static 정적변수여야 한다.

함수 내부의 window 변수는 GetWindow로 띄운 윈도우의 설정정보를 가져오거나 수정이 가능하다.

window 변수를 이용해서 타이틀 이름도 변경이 되며 그 외의 다른 정보도 수정할 수 있으니 한번씩 수정해보면 좋을 것 같다.


그러면 이제 윈도우 안을 가득 채워야 한다.

우리가 원하는 윈도우로 만드려면 UI가 필요한데 그 UI는 OnGUI라는 함수내에서 구현이 가능하다.


Editor 에서만 사용할 수 있는 컨트롤은 EditorGUI 안의 static 함수들을 사용해서 생성하면 되고

모든 곳에서 범용적으로 사용할 수 있는 컨트롤은 GUI 안의 static 함수들을 사용해서 생성하면 된다.



위 소스의 예는 TextField를 만들어서 문자열 입력한 것을 변수로 저장하는 과정을 보여준다.



<사진 2: Window 안에 텍스트 필드를 사용하여 스트링 형으로 변수에 저장하는 기능>


이와 같이. EditorGUI에 존재하는 모든 기능은 해당 형에 맞는 변수에 넣어주므로써 계산이 가능하다. 

또, 오버로드된 함수들을 통해서 때에따라서는 왼쪽에 있는 string 형의 설명도 제거가 가능하다.

제거를 해주고 싶다면 두번째 인자의 문자열들을 제거해주고 인자 2개만 사용해주면 된다.


그렇다면 좀 더 복합적인 오브젝트들을 생성해서 사용을 해보도록 하자.



string 뿐만이 아니라 정수형, 실수형 모두 변수로 지정해서 사용할 수 있으며 한 라인에 여러개의 변수를 등록하는 과정도 가능하다. 단일 변수의 경우 IntField, FloatField 등을 이용하여 사용이 가능하며, 여러개의 변수는 Multi---Field를 사용하여 가능해진다.



<사진 3: 여러개의 변수를 사용이 가능한 Unity Editor>


이번엔 버튼을 만들어 보도록 하자.

버튼을 만들때는 아래와 같이 GUI문법을 사용하여 만들면 된다.



버튼을 만들어서 callback을 넘기는게 아닌, GUI Button을 if문 자체로 걸어버려서 사용을 했다.

한번 실행해 보도록 하자.



<사진 4: 버튼 만듬>


<사진 5: 버튼을 클릭시 나오는 이벤트>


위와같이 버튼 이벤트를 구현을 하였다.

그리고 필자가 intField를 지우지않고 놔두었는데, 우리는 한번 심화를 하여 int형에서 받은 갯수만큼 Hierarchy에 GameObject를 만들어보도록 하자.



위의 소스에서는 GameObject형을 만들어서 for문으로 돌린 간단한 소스가 탄생했다.

실행결과를 보도록 하자.


<사진 6: 버튼을 클릭시 생성된 오브젝트들>


버튼을 누르면 int에 적힌 갯수만큼 오브젝트가 생성이 된다.

그리고 생성을 한 후 사라지게 되는데, 이 기능은 EditorWindow에서 protected로 가져올 수 있는 Close() 함수의 역할 때문이다.


EditorGUI 에는 많은 오브젝트들이 있으며, 그 오브젝트들을 이용해서 폭넓은 코딩이 가능하다.

이렇게 한번쯤 윈도우를 만들어 귀찮은 기능을 해결하는것도 좋은 방법인듯 싶다

댓글

VallistA

병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!

자고 싶습니다. ㅠㅠ

Github      :: 링크

궁금한점 문의 주시면 답변드리도록 하겠습니다

VISITED

Today :

Total :

SNS

  • 페이스북아이콘
  • 카카오톡아이콘
  • 트위터아이콘

Lately Post

Lately Comment