1. Source Generator란?
- 정의: C# 9(.NET 5)부터 도입된 기능으로, 컴파일 시점에 코드를 자동 생성하는 도구.
- 위치: 런타임이 아닌 Roslyn 컴파일러 단계에서 실행됨.
- 효과: 반복되는 보일러플레이트 코드 제거, 성능 최적화된 코드 생성, 유지보수 간소화.
예시:
- JSON 직렬화/역직렬화 클래스 자동 생성
- 이벤트 등록/해제 코드 자동화
- DI(Container) 초기화 코드 자동 생성
2. Unity에서의 특수성
Unity는 기본적으로 .NET Framework 기반의 Mono 런타임을 사용해왔으나, 최근 버전에서는 .NET Standard 2.1 및 C# 최신 기능을 지원.
- Unity 2021.2 이상: Source Generator 제한적으로 사용 가능
- Unity 2022 LTS 이후: 본격적으로 활용 가능 (Roslyn 기반 컴파일러 도입)
⚠️ 단, Unity의 IL2CPP 빌드와의 호환성을 고려해야 한다.
3. 학습 로드맵
Step 1. 기본 개념 익히기
- Roslyn 컴파일러의 구조 이해 (Syntax Tree → Compilation → Generator → Emit).
- ISourceGenerator 인터페이스와 Initialize, Execute 메서드 동작 방식 학습.
- 간단한 "HelloWorld" 코드 자동 생성기 만들기.
[Generator]
public class HelloWorldGenerator : ISourceGenerator
{
public void Initialize(GeneratorInitializationContext context) { }
public void Execute(GeneratorExecutionContext context)
{
context.AddSource("HelloWorld.g.cs",
@"public static class HelloWorld { public static void Say() => System.Console.WriteLine(""Hello from Generator!""); }");
}
}
Step 2. Unity 환경에 적용하기
- 별도 Class Library 프로젝트에서 Generator 구현.
- Unity 프로젝트 안에서 직접 작성하지 않고, Analyzer 프로젝트로 분리.
- NuGet 패키지 관리
- Microsoft.CodeAnalysis.CSharp 참조 필요.
- Unity 프로젝트의 Assembly Definition(.asmdef)에서 Generator DLL 참조.
Step 3. 실제 예제 적용
- 자동 프로퍼티 바인딩:
Unity MonoBehaviour에서 SerializeField된 필드를 Reflection 없이 자동으로 매핑. - 이벤트 시스템 보일러플레이트 제거:
UnityEvent, Action 등록/해제를 Generator로 처리. - ScriptableObject 코드 자동 생성:
특정 데이터 정의 스크립트를 작성하면, 자동으로 ScriptableObject 클래스와 에디터 스크립트 생성.
Step 4. 고급 학습 주제
- Incremental Source Generator 활용 (불필요한 빌드 최소화).
- Unity Editor에서 Generator로 자동 생성된 코드의 관리 전략.
- 성능 튜닝: Reflection 제거, IL2CPP 호환성 테스트.
4. 주의사항
- 에디터 버전 호환성: Unity 2020 이하 버전은 사실상 불가능.
- IL2CPP 빌드: 생성된 코드가 AOT 환경에서 문제없이 동작하는지 반드시 확인.
- 에디터-런타임 분리: 생성된 코드를 Editor 전용으로 둘지, 런타임 코드로 둘지 명확히 해야 함.
- 코드 관리: Generator가 만든 .g.cs 파일은 Git에 포함시키지 않는 것을 권장.
5. 추천 학습 자료
- Microsoft 공식 문서: Source Generators
- Unity 공식 문서: C# Source Generators and Unity (버전별 확인 필요)
성태의 닷넷이야기 : https://www.sysnet.pe.kr/2/0/12223
.NET Framework: 908. C# - Source Generator 소개
.NET Framework: 908. C# - Source Generator 소개 [링크 복사], [링크+제목 복사], 조회: 30370 글쓴 사람 정성태 (techsharer at outlook.com) 홈페이지 첨부 파일 부모글 보이기/감추기 (연관된 글이 5개 있습니다.) (시
www.sysnet.pe.kr
C# - Source Generator를 적용한 XmlCodeGenerator;
https://www.sysnet.pe.kr/2/0/12228
.NET Framework: 909. C# - Source Generator를 적용한 XmlCodeGenerator
.NET Framework: 909. C# - Source Generator를 적용한 XmlCodeGenerator [링크 복사], [링크+제목 복사], 조회: 22417 글쓴 사람 정성태 (techsharer at outlook.com) 홈페이지 첨부 파일 부모글 보이기/감추기 (연관된 글이 2
www.sysnet.pe.kr
https://medium.com/@jhlee8/코드-생산성을-높이는-유니티-c-source-generators-a6c9756a8be0
코드 생산성을 높이는 유니티 C# Source Generators
Unity Engine에서 Source Generators를 활용하는 법
medium.com
'소프트웨어 공학 > 코딩' 카테고리의 다른 글
| Unity 로컬라이제이션 패키지 학습링크 (0) | 2025.11.06 |
|---|---|
| Unity] 유니티 테스트 러너 학습용 링크 (0) | 2025.10.06 |
| Unity] Awake, OnEnable 타이밍 간단내용 (3) | 2025.07.25 |
| Unity] Start함수 정밀 분석 완료 (0) | 2025.07.25 |
| Unity] Start함수의 정밀분석 (1) | 2025.07.25 |