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 Namespace 文档

在 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. 构建源代码生成器以进行发布。要进行此操作,请选择构建 (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) 下方,禁用编辑器独立平台

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

  11. 创建并分配名为 RoslynAnalyzer 的新标签。要进行此操作,请在资源标签 (Asset Labels) 子菜单的文本输入字段中输入 RoslynAnalyzer,然后按回车键。此标签必须完全匹配并且区分大小写。创建后,该标签将在资源标签 (Asset Labels) 子菜单中显示。可以在菜单中单击标签名称,将其分配给其他分析器。

  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. 将此脚本添加到场景中的游戏对象并进入运行模式。来自源代码生成器的消息将在游戏主机 (Console) 窗口中显示,包括时间戳。由于此源代码生成器将注入至多个程序集,控制台中也会出现警告。解决方案是在内部执行上述示例中的 ExampleSourceGenerated,或者应该生成名称本身。

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

其他资源

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