강께르의 개발일지

[유니티] 에디터 코딩 관련 메소드 정리 본문

프로그래밍/유니티

[유니티] 에디터 코딩 관련 메소드 정리

강께르 2021. 12. 7. 02:31

에디터 코딩과 관련 없지만 오클루전 컬링 관련 메소드

 

OnBecameVisible

해당 메소드를 가진 오브젝트가 카메라의 렌더 범위 내에 들어오기 시작하면 호출

 

OnBecameInvisible

해당 메소드를 가진 오브젝트가 카메라의 렌더 범위 바깥으로 나가기 시작하면 호출

 

OnWillRenderObject

해당 오브젝트가 보이는 경우에 각 카메라에서 호출

카메라마다 호출하기에 다른 카메라마다 다르게 렌더할 수 있게 분기할 수 있다.

 

팁! 메테리얼의 색깔이 바뀌는 것은 런타임 중에 메테리얼의 인스턴스를 생성해 변경하는 것으로 원본에 영향 X

하지만 공용으로 사용하는 메테리얼에서 빠져나와 다른 새로운 메테리얼을 생성해 적용하는 것이기에

그에 따른 DrawCall이 늘어나는 점은 감안해야한다.

 

GeometryUtility.CalcualteFrustumPlanes

주어진 카메라의 시야 절두체(view frustum)을 통해서, 그것을 형성하는 여섯 개 평면을 반환

 

GeometryUtility.TestPlanesAABB

bound가 planes 배열 내에 있다면 true를 반환

 

 

=======================================================================

유니티 에디터 코딩

ScriptableWizard

마법사 창을 위해 상속하는 클래스

 

helpString

마법사 창의 도움말 문자열 작성 가능

 

[MenuItem("메뉴 위치")]

메뉴로 호출하고픈 원하는 메소드 위에 추가

 

ScriptableWizard.DisplayWizard

마법사 창을 보여주는 메소드, 메뉴 이름과 디스플레이하고픈 클래스를 정해줘야한다.

 

OnSelectionChange

선택 항목이 변경될 때마다 호출되는 메소드

하이어라키 창에서의 변경도 적용

 

OnWizardCreate

사용자가 만들기 버튼을 클릭할 때 호출

 

중간 팁!

AssetDatabase

실제 프로젝트 창과 관련 있는 작업을 위해 제공되는 클래스

 

AssetDatabase.CreateAsset

새로운 에셋을 지정된 경로에 생성

 

AssetDatabase.SaveAssets

저장되지 않은 에셋을 디스크에 저장

========================================

 

CustomPropertyDrawer

사용하는 이유 : 인스펙터에 표시되지 않는 사용자 정의 멤버 혹은 그 외의 멤버를 표시하기 위해서

 

사용하기 위해서 준비해야할 것

1. 표시하고픈 클래스 혹은 데이터

2. 그 클래스 혹은 데이터를 기반으로 인스펙터에 표시하는 메소드를 구현할 Drawer 클래스

 

1.의 클래스는 [System.Serializable] attribute를 추가해야 한다.

Drawer 클래스는 PropertyDrawer 클래스를 상속받아야 한다.

그 클래스에 [CustomPropertyDrawer()]를 추가, 괄호 내에 typeof(Type)을 추가.

 

OnGUI를 오버라이딩하여 인스펙터에 표시될 내용을 처리한다.

EditorGUI.BeginProperty

EditorGUI.EndProperty

이 사이에 인스펙터 상에서 표시하고자 하는 값을 표시한다.

참고할만한 블로그

=========================================

EditorWindow

편집기 창을 띄우기 위해 상속해야하는 클래스

 

GetWindow

윈도우 생성 메소드

 

EditorGUILayout.EnumPopup

팝업창 UI 생성 메소드

 

OnInspectorGUI

커스텀 인스펙터를 만들려면 이 함수를 재구현해야한다.

Editor 클래스의 메소드

 

EditorGUILayout.HelpBox출력문 박스 표시

 

EditorGUILayout.LabelField줄 단위로 필드를 표시

 

Event.current.type == EventType.MouseDown && Event.current.button == 0

현재 이벤트에 관련된 조건문, 참고할 것