Создание и использование генератора исходных кодов
Вы можете использовать генераторы исходных текстов в качестве дополнительного шага в процессе компиляции вашего скрипта, чтобы добавить новый код во время компиляции существующего кода. Как и с анализаторами кода, вы можете использовать существующие генераторы исходных текстов или создать свои собственные.
Примечание: Unity только поддерживает версию 6.0.0-preview 1998 года System.Text.Json Если вы хотите использовать это пространство имен в своем приложении, убедитесь, что вы используете версию 6.0.0-previewДля получения дополнительной информации о System.Text.Json, ссылайтесь на Майкрософта System.Text.Json Документация по пространствам имен.
Чтобы создать генератор исходного кода в вашем IDE и затем применить его для использования в вашем проекте Unity:
В своей IDE создайте проект библиотеки классов C#, ориентированный на .NET Standard 2.0, и назовите проект
ExampleSourceGenerator.Установите пакет
Microsoft.CodeAnalysis.CsharpNuGet для проекта. Ваш генератор исходных текстов должен использовать Microsoft.CodeAnalysis.Csharp 4.3 для работы с Unity.-
В вашем проекте 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) { } } } Создайте свой генератор исходных кодов с выпуск конфигурация сборки.
В папке проекта генератора исходных кодов найдите файл
bin/Release/netstandard2.0/ExampleSourceGenerator.dll.Скопируйте этот файл в ваш проект Unity, в папку
Assets.В Asset Browser нажмите на файл .dll, чтобы открыть окно Плагин Inspector.
В Выберите платформы для плагина, снимите флажок Любая платформа.
В Включить платформыснимите флажок Редактор и Автономный и любые другие отмеченные платформы.
В разделе Метки активовнажмите на значок метки, чтобы открыть подменю Метки ассетов.
Создайте и назначьте новую метку под названием RoslynAnalyzer. Чтобы сделать это, введите
RoslynAnalyzerв поле ввода текста подменю Метки ассетов и нажмите enter. Эта метка должна точно соответствовать и учитывать регистр букв. После создания метка появится в подменю Метки ассетов. Вы можете нажать на название метки в меню, чтобы назначить ее другим анализаторам.-
Чтобы проверить, работает ли генератор исходных кодов, создайте в Редакторе новый скрипт 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); } } - Если генератор исходного текста вставляется в несколько сборок, IDE отображает предупреждение компилятора о конфликтах (CS0436). Чтобы удалить это предупреждение, можно выполнить одно из следующих действий:
- Сделайте
ExampleSourceGeneratedclass in theExampleSourceGeneratorпримерinternal. Важно: в этом случае обращаться к сформированному классу можно только из той же сборки. - Изменение имени файла
ExampleSourceGeneratedкласс так, чтобы он был уникален для конкретной сборки, напримерExampleSourceGenerated_MyAssembly.
- Сделайте
Добавьте этот скрипт к GameObject в сцене и перейдите в режим воспроизведения. В окне Консоли появится сообщение от генератора источников, включая метку времени.
Дополнительные сведения о генераторах исходных кодов см. в документации Microsoft Source Generators.