版本:Unity 6 (6000.0)
语言:英语
Roslyn 分析器和源代码生成器
安装和使用现有的分析器或源代码生成器

创建和使用源代码生成器

您可以在脚本编译过程中使用源代码生成器作为附加步骤,在编译现有代码时添加新代码。与代码分析器一样,您可以使用现有的源代码生成器或创建自己的源代码生成器。

注意:Unity 仅支持 System.Text.Json 命名空间的 6.0.0-preview 版本。如果您要在应用程序中使用此命名空间,请确保使用 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 包。您的源代码生成器必须使用 Microsoft.CodeAnalysis.Csharp 4.3 才能与 Unity 协同工作。

  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. 发布 生成源代码生成器。为此,请转到 生成 并选择 批量生成 选项,然后选择 发布 选项并 生成

  5. 在源代码生成器的项目文件夹中,找到 bin/Release/netstandard2.0/ExampleSourceGenerator.dll 文件。

  6. 将此文件复制到 Unity 项目的 Assets 文件夹中。

  7. 在资源浏览器中,单击 .dll 文件以打开 插件检查器 窗口。

  8. 选择插件的平台 下,禁用 任何平台

  9. 包含的平台 下,禁用 编辑器独立

  10. 资源标签 下,单击标签图标以打开资源标签子菜单。

  11. 创建并分配一个名为 RoslynAnalyzer 的新标签。为此,在资源标签子菜单的 文本输入字段允许用户输入文本字符串的字段 更多信息
    请参阅 词汇表
    中键入 RoslynAnalyzer 并按回车键。此标签必须完全匹配,并且区分大小写。创建后,标签将从那时起出现在资源标签子菜单中。您可以单击菜单中的标签名称将其分配给其他分析器。

  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. 将此脚本添加到场景中的 游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路点等等。游戏对象的功用由附加到其上的组件定义。 更多信息
    请参阅 词汇表
    ,并进入播放模式。源代码生成器发出的消息将出现在 控制台窗口Unity 编辑器窗口,显示 Unity 或您自己的脚本生成的错误、警告和其他消息。 更多信息
    请参阅 词汇表
    中,包括时间戳。控制台还会出现一条警告,因为此源代码生成器将被注入多个程序集。解决方案是使上述示例中的 ExampleSourceGenerated 成为内部的,或者名称本身应该由生成器生成。

有关源代码生成器的更多信息,请参阅 Microsoft 的 源代码生成器文档

其他资源

Roslyn 分析器和源代码生成器
安装和使用现有的分析器或源代码生成器