티스토리 뷰
## 어셈블리 정의 인스펙터 속성(*.asmdef 에셋의 직렬화 정보)
- name : 어셈블리 이름(unique 해야함)
### General
- Allow 'unsafe' Code : C# `unsafe`키워드를 사용중인지 Unity 컴파일러에게 알림(결과적으로 "/unsafe" 옵션 전달)
- Auto Referenced : predefined assemblies(e.g. Assembly-CSharp.dll, etc)들이 해당 어셈블리를 자동참조 하는지 여부
- No Engine References : Unity Engine 어셈블리 참조 여부
- Override References : precompiled assemblies(외부에서 컴파일된 plug-in)를 자동참조 하지않고 수동참조하도록 오버라이드
- 기본적으로 어셈블리 정의를 사용해 생성된 프로젝트의 모든 어셈블리는 precompiled된 모든 어셈블리를 자동참조하며, 이 경우 precompiled 어셈블리 중 하나만 업데이트해도 Unity가 모든 어셈블리를 재컴파일하는 오버헤드 발생
- 오버헤드 방지를 위해 참조방식을 override하여 실제로 사용하는 precompiled어셈블리만 참조하도록 할 수 있음
- 설정시 현재 Build Settings에 설정된 플랫폼에 호환되는 precompiled 어셈블리만 나타나기 때문에 각 플랫폼 마다 설정필요(*.asmdef 에셋파일에 저장됨)
- Root Namespace
- 해당 어셈블리정의의 스크립트 생성시 사용되는 기본 namespace (e.g. script template의 `#ROOTNAMESPACEBEGIN#`)
- 스크립트 생성시 우선순위 : Assembly Root Namespace > Project Settings Root Namespace
### Define Constraints
- 조건부 어셈블리 포함 정의 : 스크립트 수준이 아닌 어셈블리 수준에서 작동
- 해당 제약 정의에 충족하는 경우에만 컴파일 후 참조 및 빌드에 포함됨
- `!`, `||` 연산자 사용 가능
### Assembly Definition References
- Use GUIDs : 유니티 메타데이터(*.meta)를 통한 GUID 사용. 종속성(참조) 관계없이 해당 어셈블리 name 변경 가능하지만 파일이동, 메타데이터 삭제 등으로 꼬이는 경우 GUID 초기화 필요
- Assembly Definition References : 어셈블리정의 참조설정을 통한 어셈블리간 종속성 정의
### Assembly References
- precomiled어셈블리 참조설정을 통한 종속성 정의
### Platforms
- 해당 어셈블리의 플랫폼 호환성 설정
- 설정된 플래폼에서만 해당 어셈블리를 컴파일 또는 참조
### Version Defines
- 특정 Unity버전 또는 package버전에 따라 컴파일 및 참조제약 정의
## 컴파일 순서 4단계
각 컴파일은 프로젝트 루트에 있는 자동생성된 C# 프로젝트 파일(.csproj)을 사용해 단계적으로 진행된다.
유니티가 자동설정한 컴파일 옵션은 해당 파일을 통해 확인 가능하다.
- Phase 1 : Assembly-CSharp-firstpass : 최상위 특수폴더 런타임 스크립트(e.g. Plugins)
- Phase 2 : Assembly-CSharp-Editor-firstpass : 최상위 특수폴더내의 Editor폴더의 에디터 스크립트
- Phase 3 : Assembly-CSharp : Editor 폴더에 있지 않은 기타 모든 스크립트
- Phase 4 : Assembly-CSharp-Editor : 나머지 모든 Editor 폴더에 있는 스크립트
## 결론
- 컴파일 및 빌드 오버헤드를 줄이기 위해 필수적 선택
- 직렬화 속성을 통해 predefined, definition, precomiled 어셈블리간의 종속성 세팅
- 적절한 Symbol 세팅을 통한 조건부 컴파일 및 빌드 세팅
## 추가
- 프로젝트 구조상 하위폴더로 이동 불가능한 스크립트들은 Assembly Definition Reference 적절히 활용
- 난독화 및 보안관련 모듈 적용시 효율성에 대해서는 차후 검토 필요
## References
https://docs.unity3d.com/kr/current/Manual/ScriptCompilationAssemblyDefinitionFiles.html
https://docs.unity3d.com/kr/current/Manual/ScriptCompileOrderFolders.html
'Game > 개발' 카테고리의 다른 글
[Unity] uGUI (0) | 2023.03.25 |
---|---|
[Unity] Addressables (v1.19.19 기준 - Editor 2021.3) (0) | 2023.03.23 |
[Unity] Preprocessor directives & Conditional Compilation (전처리기 지시문 및 조건부 컴파일) (0) | 2023.03.15 |
[Unity] 엔진의 주요 event 함수 정리 (Awake(), Start(), etc) (2) | 2023.03.10 |
[Unity/C#] Singleton Pattern (싱글톤) (0) | 2023.02.14 |
- Total
- Today
- Yesterday
- 코루틴
- coroutine
- logging
- 닷넷
- Visual Studio Code
- gcp
- Debug
- C#
- Scraping
- framework
- Custom Package
- firestore
- unity
- async
- .net
- vscode
- Python
- VS2022
- selenium
- github
- 유니티
- 싱글톤
- 환경설정
- git
- initialize
- Addressables
- Singleton
- await
- RuntimeInitializeOnLoadMethod
- 비동기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |