Unity 6.3
0 онлайн 17 гостей 3 в системе
Вход

Создание и использование генератора исходных кодов

Вы можете использовать генераторы исходных текстов в качестве дополнительного шага в процессе компиляции вашего скрипта, чтобы добавить новый код во время компиляции существующего кода. Как и с анализаторами кода, вы можете использовать существующие генераторы исходных текстов или создать свои собственные.

Примечание: Unity только поддерживает версию 6.0.0-preview 1998 года System.Text.Json Если вы хотите использовать это пространство имен в своем приложении, убедитесь, что вы используете версию 6.0.0-previewДля получения дополнительной информации о System.Text.Json, ссылайтесь на Майкрософта System.Text.Json Документация по пространствам имен.

Чтобы создать генератор исходного кода в вашем IDE и затем применить его для использования в вашем проекте Unity:

  1. В своей IDE создайте проект библиотеки классов C#, ориентированный на .NET Standard 2.0, и назовите проект ExampleSourceGenerator.

  2. Установите пакет Microsoft.CodeAnalysis.Csharp NuGet для проекта. Ваш генератор исходных текстов должен использовать Microsoft.CodeAnalysis.Csharp 4.3 для работы с Unity.

  3. В вашем проекте IDE создайте новый файл 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. Создайте свой генератор исходных кодов с выпуск конфигурация сборки.

  5. В папке проекта генератора исходных кодов найдите файл bin/Release/netstandard2.0/ExampleSourceGenerator.dll.

  6. Скопируйте этот файл в ваш проект Unity, в папку Assets.

  7. В Asset Browser нажмите на файл .dll, чтобы открыть окно Плагин Inspector.

  8. В Выберите платформы для плагина, снимите флажок Любая платформа.

  9. В Включить платформыснимите флажок Редактор и Автономный и любые другие отмеченные платформы.

  10. В разделе Метки активовнажмите на значок метки, чтобы открыть подменю Метки ассетов.

  11. Создайте и назначьте новую метку под названием RoslynAnalyzer. Чтобы сделать это, введите RoslynAnalyzer в поле ввода текста подменю Метки ассетов и нажмите enter. Эта метка должна точно соответствовать и учитывать регистр букв. После создания метка появится в подменю Метки ассетов. Вы можете нажать на название метки в меню, чтобы назначить ее другим анализаторам.

  12. Чтобы проверить, работает ли генератор исходных кодов, создайте в Редакторе новый скрипт 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);
        }
    }
    
  13. Если генератор исходного текста вставляется в несколько сборок, IDE отображает предупреждение компилятора о конфликтах (CS0436). Чтобы удалить это предупреждение, можно выполнить одно из следующих действий:
    • Сделайте ExampleSourceGenerated class in the ExampleSourceGenerator пример internal. Важно: в этом случае обращаться к сформированному классу можно только из той же сборки.
    • Изменение имени файла ExampleSourceGenerated класс так, чтобы он был уникален для конкретной сборки, например ExampleSourceGenerated_MyAssembly.
  14. Добавьте этот скрипт к GameObject в сцене и перейдите в режим воспроизведения. В окне Консоли появится сообщение от генератора источников, включая метку времени.

Дополнительные сведения о генераторах исходных кодов см. в документации Microsoft Source Generators.

Дополнительные ресурсы