기술 자료

Unity Engine

Unity Engine

소스 제너레이터 생성 및 사용

Create a simple source generator and configure the Unity Editor to use it for your Unity project code.
읽는 시간 2분최근 업데이트: 한 달 전

스크립트 컴파일 프로세스의 추가 단계로 소스 제너레이터를 사용하여 기존 코드를 컴파일하는 동안 새 코드를 추가할 수 있습니다. 코드 분석기와 마찬가지로 기존 소스 제너레이터를 사용하거나 직접 생성할 수 있습니다.
참고: Unity는
System.Text.Json
네임스페이스의 6.0.0 프리뷰 버전만 지원합니다. 애플리케이션에서 이 네임스페이스를 사용하려면
6.0.0-preview
버전을 사용해야 합니다.
System.Text.Json
에 대한 자세한 내용은 Microsoft의 System.Text.Json 네임스페이스 기술 자료를 참조하십시오.
Visual Studio에서 소스 제너레이터를 생성한 후 Unity 프로젝트에서 사용할 수 있도록 적용하는 방법은 다음과 같습니다.
  1. Visual Studio에서 .NET Standard 2.0을 타게팅하는 C# 클래스 라이브러리 프로젝트를 생성하고 프로젝트의 이름을
    ExampleSourceGenerator
    로 지정합니다.
  2. 프로젝트에
    Microsoft.CodeAnalysis.Csharp
    NuGet 패키지를 설치합니다. Unity로 작업하려면 소스 제너레이터가 Microsoft.CodeAnalysis.Csharp 4.3을 사용해야 합니다.
  3. Visual Studio 프로젝트에서 새 C# 파일을 만들고 다음 코드를 추가합니다.
    using Microsoft.CodeAnalysis;using Microsoft.CodeAnalysis.Text;using System.Text;namespace ExampleSourceGenerator{ [Generator] public class ExampleSourceGenerator : ISourceGenerator { public void Execute(GeneratorExecutionContext context) { System.Console.WriteLine(System.DateTime.Now.ToString()); var sourceBuilder = new StringBuilder( @" using System; namespace ExampleSourceGenerated { public static class ExampleSourceGenerated { public static string GetTestText() { return ""This is from source generator "); sourceBuilder.Append(System.DateTime.Now.ToString()); sourceBuilder.Append( @"""; } }}"); context.AddSource("exampleSourceGenerator", SourceText.From(sourceBuilder.ToString(), Encoding.UTF8)); } public void Initialize(GeneratorInitializationContext context) { } }}
  4. 릴리스할 소스 제너레이터를 빌드합니다. 이렇게 하려면 Build로 이동하여 Batch Build 옵션을 선택한 후 Release 옵션과 Build를 선택합니다.
  5. 소스 제너레이터의 프로젝트 폴더에서
    bin/Release/netstandard2.0/ExampleSourceGenerator.dll
    파일을 찾습니다.
  6. 이 파일을 Unity 프로젝트의 Assets 폴더에 복사합니다.
  7. 에셋 브라우저 내에서 .dll 파일을 클릭하여 Plugin Inspector 창을 엽니다.
  8. Select platforms for plugin에서 Any Platform을 비활성화합니다.
  9. Include Platforms에서 Editor 및 Standalone을 비활성화합니다.
  10. Asset Labels에서 레이블 아이콘을 클릭하여 에셋 레이블 하위 메뉴를 엽니다.
  11. RoslynAnalyzer라는 새 레이블을 생성하고 할당합니다. 이 작업을 수행하려면 Asset labels 하위 메뉴의 텍스트 입력 필드에
    RoslynAnalyzer
    를 입력하고 Enter 키를 누릅니다. 이 레이블은 정확히 일치해야 하며 대소문자를 구분합니다. 레이블이 생성되면 그때부터 에셋 레이블 하위 메뉴에 표시됩니다. 메뉴에서 레이블 이름을 클릭하여 다른 분석기에 할당할 수 있습니다.
  12. 이 소스 제너레이터가 둘 이상의 어셈블리에 삽입되므로 콘솔에 경고가 출력됩니다. 해결 방법은 위의 예시의
    ExampleSourceGenerated
    를 내부로 만들거나 이름 자체를 생성하는 것입니다.
  13. 소스 제너레이터가 작동하는지 테스트하려면 다음 코드를 사용하여 에디터에서 새 MonoBehaviour 스크립트를 생성합니다.
    using UnityEngine;public class HelloFromSourceGenerator : MonoBehaviour{ static string GetStringFromSourceGenerator() { return ExampleSourceGenerated.ExampleSourceGenerated.GetTestText(); } // Start is called before the first frame update void Start() { var output = "Test"; output = GetStringFromSourceGenerator(); Debug.Log(output); }}
  14. 이 스크립트를 씬의 게임 오브젝트에 연결하고 플레이 모드를 시작합니다. 소스 제너레이터의 메시지가 시간 스탬프를 비롯하여 콘솔 창에 표시됩니다. 이 소스 제너레이터가 둘 이상의 어셈블리에 삽입되므로 콘솔에도 경고가 표시됩니다. 해결 방법은 위의 예시의
    ExampleSourceGenerated
    를 내부로 만들거나 이름 자체를 생성하는 것입니다.
소스 제너레이터에 대한 자세한 내용은 Microsoft의 소스 제너레이터 기술 자료를 참조하십시오.

추가 리소스