Version: Unity 6.0 (6000.0)
언어 : 한국어
Roslyn 분석기 및 소스 제너레이터
기존 분석기 또는 소스 제너레이터 설치 및 사용

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

스크립트 컴파일 프로세스의 추가 단계로 소스 제너레이터를 사용하여 기존 코드를 컴파일하는 동안 새 코드를 추가할 수 있습니다. 코드 분석기와 마찬가지로 기존 소스 제너레이터를 사용하거나 직접 생성할 수 있습니다.

참고: 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에서 EditorStandalone을 비활성화합니다.

  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의 소스 제너레이터 기술 자료를 참조하십시오.

추가 리소스

Roslyn 분석기 및 소스 제너레이터
기존 분석기 또는 소스 제너레이터 설치 및 사용