创建与使用源代码生成器
Create a simple source generator and configure the Unity Editor to use it for your Unity project code.
阅读时间5 分钟最后更新于 1 个月前
您可以使用源代码生成器作为脚本编译过程中的附加步骤,以便在编译现有代码时添加新代码。与代码分析器一样,您可以使用现有源代码生成器或创建源生成器。
注意:Unity 仅支持 命名空间的 6.0.0-预览版本。如果要在应用程序中使用此命名空间,请确保使用 版本。有关 的更多信息,请参阅 Microsoft 的 System.Text.Json Namespace 文档。
System.Text.Json6.0.0-previewSystem.Text.Json在 Visual Studio 中创建源代码生成器,然后将其应用于 Unity 项目:
-
在 Visual Studio 中,创建以 .NET Standard 2.0 为目标的 C# 类库项目,并将其命名为。
ExampleSourceGenerator -
为项目安装NuGet 包。源代码生成器必须使用 Microsoft.CodeAnalysis.Csharp 4.3 才能与 Unity 配合使用。
Microsoft.CodeAnalysis.Csharp -
在 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) { } }}
-
构建源代码生成器以进行发布。要进行此操作,请选择构建 (Build) 并选择批构建 (Batch Build) 选项,然后选择发布 (Release) 选项和构建 (Build)。
-
在源代码生成器的项目文件夹中,找到文件。
bin/Release/netstandard2.0/ExampleSourceGenerator.dll -
将此文件复制到 Unity 项目的资源 (Assets) 文件夹中。
-
在资源浏览器中,单击 .dll 文件以打开插件检视视图 (Plugin Inspector) 窗口。
-
在为插件选择平台 (Select platforms for plugin) 下,禁用任意平台 (Any Platform)。
-
在添加平台 (Include platforms) 下方,禁用编辑器和独立平台。
-
在资源标签 (Asset Labels) 下,单击标签图标以打开资源标签 (Asset Labels) 子菜单。
-
创建并分配名为 RoslynAnalyzer 的新标签。要进行此操作,请在资源标签 (Asset Labels) 子菜单的文本输入字段中输入,然后按回车键。此标签必须完全匹配并且区分大小写。创建后,该标签将在资源标签 (Asset Labels) 子菜单中显示。可以在菜单中单击标签名称,将其分配给其他分析器。
RoslynAnalyzer -
由于此源代码生成器将注入至多个程序集,控制台将出现警告信息。解决方案是在内部执行上述示例中的,或者应该生成名称本身。
ExampleSourceGenerated -
要测试源代码生成器是否正常工作,请在编辑器中创建新的 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); }}
-
将此脚本添加到场景中的游戏对象并进入运行模式。来自源代码生成器的消息将在游戏主机 (Console) 窗口中显示,包括时间戳。由于此源代码生成器将注入至多个程序集,控制台中也会出现警告。解决方案是在内部执行上述示例中的,或者应该生成名称本身。
ExampleSourceGenerated
有关源代码生成器的更多信息,请参阅 Microsoft 的源代码生成器文档。