Version: 6000.3
语言: 中文
Roslyn 分析仪和源生成器
安装和使用现有分析仪或源生成器

创建和使用源生成器

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

注意:Unity 仅支持 6.0.0-preview 的System.Text.JsonNamespace。如果要在应用程序中使用此命名空间,请确保使用 version6.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.CsharpNuGet 包。源生成器必须使用 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. 在 资产浏览器(Asset Browser) 中,点击.dll文件以打开 插件检查器(Plugin Inspector) 窗口。

  8. 选择插件平台(Select platforms for plugin) 下,禁用 任何平台(Any Platform) 。

  9. 包括平台(Include Platforms) 下,禁用 编辑器(Editor) 和 独立(Standalone)

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

  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类在ExampleSourceGeneratorinternal.重要提示:在这种情况下,您只能从同一程序集中访问生成的类。
    • 更改ExampleSourceGenerated类,使其对于给定程序集是唯一的,例如ExampleSourceGenerated_MyAssembly.
  14. 将此脚本添加到游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
    请参阅术语表
    场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
    请参阅术语表
    并进入播放模式。来自源生成器的消息将显示在控制台窗口Unity 编辑器窗口,显示 Unity 或您自己的脚本生成的错误、警告和其他消息。更多信息
    请参阅术语表
    ,包括时间戳。

有关源生成器的详细信息,请参阅 Microsoft 的源生成器文档

其他资源

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