유니티 커스텀 에디터(11) - 프로퍼티 드로어(Property Drawer)(2)


 

자 이어갑시다.

이제 OnGUI 함수를 채워 나가야겠죠?

하나씩 갑니다.

잘 따라오세요!


먼저 프로퍼티가 그려지기 시작되는 부분을 지정해줍니다.

그 위치는 prefixLabel 함수를 통해 산출된 값입니다.


("Prefix = 접두사")

(참고로 바로 Ammo 저 부분이 prefixLabel입니다.)


prefixLabel 함수는 위 그림처럼 많게는 4개의 매개변수를 받는데

우리는 3번째를 사용했습니다.

근데 첫 번째, 세 번째 매개변수는 대충이라도 느낌이 오실 텐데

두 번째는 감이 잘 안 잡히실 겁니다.

int id라고 하는 부분은 Control ID를 말하는 건데

모든 GUI에게 각각 부여되는 ID라고 생각하시면 됩니다.

그래서 우리는 컨트롤에서 포커스의 아이디를 받아왔고,

(유니티에선 키보드 입력을 받는 필드가 활성화된 지점을 포커스라고 함.)

해당 컨트롤은 포커스를 받을 수 없다는 의미의 Passive를 사용했습니다.

 

 

Unity - Scripting API: FocusType

You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see: You've told us there are code samples on this page which don't work. If you know ho

docs.unity3d.com


그리고 라벨과 프로퍼티는 따로 설정해 줄 게 없으니 그냥 그대로 두고 넘어갑시다.

그런 다음 현재의 indentLevel 즉 들여 쓰기를 변수에 저장해두고

들여 쓰기를 0으로 바꿔줍니다.

중간에 프로퍼티 필드가 다 그려지고 난다면

원래대로 모양대로 들여 쓰기를 해주어서 모양을 잡습니다.

만약에 이렇게 해주지 않고 먼저 들여 쓰기를 그려줘버린다면

프로퍼티를 그려줄 때 위치값이 바뀌어서 위 그림처럼 예상한 것과는 다른 위치에 프로퍼티가 그려지게 됩니다.

따라서 주의하시길 바랍니다.

다음은 바로 방금 전에 본 프로퍼티를 그려줍시다.

역시 위치를 먼저 계산하고

(가로로 나란히 그려줄 것입니다.)

그려주기만 하면 끝입니다.

매개변수는 rect, 직렬화된 속성, GUI 콘텐츠(아이콘 등등) 순인데요.


property.FindPropertyRelative("amount")는

빨간 네모 박스가 쳐진 클래스의 프로퍼티를 찾는 함수입니다.

따라서 Ingredient의 amount라는 프로퍼티를 찾는다는 뜻이고,

이걸 뜻하는 거겠죠?


그리고 GUIContent는 렌더링 할 콘텐츠 대상을 정하라는 건데 없으니 none으로 해주었습니다.

마지막으로 EndProperty 함수를 통해 그려지는 프로퍼티가 끝나는 지점이라고 알려주고 끝을 내줍니다.

그럼 이렇게 깔끔한 결과물을 확인하실 수 있습니다!

 

댓글()