"깊이"가 다른 게임개발자 허민영

유저에서 게임까지, 철학에서 코딩까지, 본질을 보는 게임개발

소프트웨어 공학/코딩

Unity 환경에서 Source Generator 학습 문서

허민영 2025. 9. 10. 04:08

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. 기본 개념 익히기

  1. Roslyn 컴파일러의 구조 이해 (Syntax Tree → Compilation → Generator → Emit).
  2. ISourceGenerator 인터페이스와 Initialize, Execute 메서드 동작 방식 학습.
  3. 간단한 "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 환경에 적용하기

  1. 별도 Class Library 프로젝트에서 Generator 구현.
    • Unity 프로젝트 안에서 직접 작성하지 않고, Analyzer 프로젝트로 분리.
  2. NuGet 패키지 관리
    • Microsoft.CodeAnalysis.CSharp 참조 필요.
  3. 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. 주의사항

  1. 에디터 버전 호환성: Unity 2020 이하 버전은 사실상 불가능.
  2. IL2CPP 빌드: 생성된 코드가 AOT 환경에서 문제없이 동작하는지 반드시 확인.
  3. 에디터-런타임 분리: 생성된 코드를 Editor 전용으로 둘지, 런타임 코드로 둘지 명확히 해야 함.
  4. 코드 관리: Generator가 만든 .g.cs 파일은 Git에 포함시키지 않는 것을 권장.

5. 추천 학습 자료

 

.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