Cheat Sheet
빠른 치트시트
처음에는 모든 어트리뷰트를 외우기보다, 하고 싶은 일에서 어떤 어트리뷰트를 떠올릴지를 익히는 편이 좋습니다.
상황별 빠른 선택표
| 하고 싶은 일 | 떠올릴 어트리뷰트 | 핵심 |
|---|---|---|
| private 필드를 Inspector에 보이고 싶다 | [SerializeField] |
캡슐화는 유지하고 Inspector 노출 |
| public 필드를 Inspector에서 숨기고 싶다 | [HideInInspector] |
코드 접근은 열어두고 Inspector 표시만 숨김 |
| 커스텀 class를 Inspector에 펼쳐 보이고 싶다 | [System.Serializable] |
사용자 정의 데이터 타입을 Unity 직렬화 대상으로 표시 |
| 필드명을 바꿔도 기존 프리팹 값을 살리고 싶다 | [FormerlySerializedAs] |
리팩토링 시 저장 데이터 손실 방지 |
| 추상 클래스나 다형성 데이터를 저장하고 싶다 | [SerializeReference] |
참조 기반 직렬화 |
| Inspector에 섹션 제목을 넣고 싶다 | [Header] |
필드 그룹 구분 |
| Inspector에 설명 툴팁을 넣고 싶다 | [Tooltip] |
팀원이 필드 의미를 쉽게 이해 |
| 숫자를 슬라이더로 조절하고 싶다 | [Range] |
int/float 슬라이더 표시 |
| 숫자의 최소값만 제한하고 싶다 | [Min] |
음수 방지 등에 사용 |
| 긴 문자열을 여러 줄로 입력하고 싶다 | [TextArea], [Multiline] |
대사, 설명문, 메모 입력 |
| 컴포넌트가 Rigidbody를 반드시 필요로 한다 | [RequireComponent] |
필수 컴포넌트 자동 추가 |
| 같은 컴포넌트가 중복 추가되지 않게 하고 싶다 | [DisallowMultipleComponent] |
중복 부착 방지 |
| Add Component 메뉴 위치를 정하고 싶다 | [AddComponentMenu] |
커스텀 컴포넌트 메뉴 정리 |
| ScriptableObject 생성 메뉴를 만들고 싶다 | [CreateAssetMenu] |
Assets/Create 메뉴 등록 |
| 런타임 시작 시 자동 초기화하고 싶다 | [RuntimeInitializeOnLoadMethod] |
씬 로드 전후 초기화 |
| 실행 순서를 코드로 지정하고 싶다 | [DefaultExecutionOrder] |
Awake, Start 등 실행 우선순위 조정 |
| Edit Mode에서도 스크립트를 실행하고 싶다 | [ExecuteAlways] |
에디터 미리보기, 자동 배치 |
| Unity 상단 메뉴에 도구를 추가하고 싶다 | [MenuItem] |
Editor 메뉴 명령 등록 |
| 컴포넌트 우클릭 메뉴에 기능을 넣고 싶다 | [ContextMenu] |
특정 컴포넌트 전용 실행 메뉴 |
| Inspector를 직접 만들고 싶다 | [CustomEditor] |
커스텀 Inspector 작성 |
| 필드 표시 방식을 바꾸고 싶다 | [CustomPropertyDrawer] |
커스텀 PropertyAttribute 또는 데이터 타입 표시 |
| 여러 오브젝트 선택 편집을 지원하고 싶다 | [CanEditMultipleObjects] |
다중 선택 Inspector 편집 |
| 스크립트 리로드 후 처리하고 싶다 | [DidReloadScripts] |
컴파일 이후 콜백 |
| 에디터 로드 시 자동 실행하고 싶다 | [InitializeOnLoad], [InitializeOnLoadMethod] |
Editor 초기화 |
| 빌드 후 파일을 수정하고 싶다 | [PostProcessBuild] |
빌드 산출물 후처리 |
| 커스텀 파일 확장자를 에셋으로 임포트하고 싶다 | [ScriptedImporter] |
자체 데이터 포맷 임포터 |
| IL2CPP 빌드에서 리플렉션 대상이 삭제되지 않게 하고 싶다 | [Preserve] |
코드 스트리핑 방지 |
| 코루틴 기반 Unity 테스트를 만들고 싶다 | [UnityTest] |
PlayMode/EditMode 코루틴 테스트 |
| 일반 C# 테스트를 만들고 싶다 | [Test] |
NUnit 동기 테스트 |
| 더 이상 쓰지 않을 API를 표시하고 싶다 | [Obsolete] |
경고 또는 컴파일 에러 처리 |
| enum을 비트 플래그로 쓰고 싶다 | [Flags] |
조합 가능한 enum 표현 |
| 네이티브 DLL 함수를 호출하고 싶다 | [DllImport] |
Native plugin 연동 |
먼저 외우면 좋은 1순위
[SerializeField]
[System.Serializable]
[Header]
[Tooltip]
[Range]
[Min]
[RequireComponent]
[CreateAssetMenu]
[ContextMenu]
[MenuItem]
프로젝트가 커지면 중요해지는 2순위
[FormerlySerializedAs]
[SerializeReference]
[DefaultExecutionOrder]
[ExecuteAlways]
[RuntimeInitializeOnLoadMethod]
[CustomEditor]
[CustomPropertyDrawer]
[InitializeOnLoad]
[PostProcessBuild]
[Preserve]
암기용 한 줄 정리
| 키워드 | 한 줄 느낌 |
|---|---|
Serialize |
Unity가 값을 저장하고 Inspector에 보여주는 문제 |
Editor |
Unity 에디터 화면이나 도구를 확장하는 문제 |
RuntimeInitialize |
게임 실행 시작 시점 초기화 문제 |
RequireComponent |
GameObject에 필요한 부품을 강제하는 문제 |
CreateAssetMenu |
ScriptableObject를 에셋으로 쉽게 만들기 위한 문제 |
Preserve |
빌드 최적화 때문에 코드가 사라지는 것을 막는 문제 |