包含此页的版本:
不含此页的版本:
您可以使用源生成器作为脚本编译过程中的附加步骤,以便在编译现有代码时添加新代码。与代码分析器一样,您可以使用现有的源生成器或创建自己的源生成器。
注意:Unity 仅支持 6.0.0-preview 的System.Text.JsonNamespace。如果要在应用程序中使用此命名空间,请确保使用 version6.0.0-preview.有关System.Text.Json,请参阅 Microsoft 的 System.Text.Json 命名空间文档。
若要在 Visual Studio 中创建源生成器,然后将其应用于 Unity 项目,请执行以下作:
在 Visual Studio 中,创建一个面向 .NET Standard 2.0 的 C# 类库项目,并将项目命名为ExampleSourceGenerator.
安装Microsoft.CodeAnalysis.CsharpNuGet 包。源生成器必须使用 Microsoft.CodeAnalysis.Csharp 4.3 才能与 Unity 配合使用。
在 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) { }
}
}
构建要发布的源生成器。为此,请转到“构建”并选择“批量生成”选项,然后选择“发布”选项和“构建”。
在源生成器的项目文件夹中,找到bin/Release/netstandard2.0/ExampleSourceGenerator.dll文件。
将此文件复制到 Unity 项目的 Assets 文件夹中。
在 资产浏览器(Asset Browser) 中,点击.dll文件以打开 插件检查器(Plugin Inspector) 窗口。
在 选择插件平台(Select platforms for plugin) 下,禁用 任何平台(Any Platform) 。
在 包括平台(Include Platforms) 下,禁用 编辑器(Editor) 和 独立(Standalone) 。
在 资产标签(Asset Labels) 下,点击标签图标以打开 资产标签(Asset labels) 子菜单。
创建并分配名为 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);
}
}
ExampleSourceGenerated类在ExampleSourceGenerator例internal.重要提示:在这种情况下,您只能从同一程序集中访问生成的类。ExampleSourceGenerated类,使其对于给定程序集是唯一的,例如ExampleSourceGenerated_MyAssembly.将此脚本添加到游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表在场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表并进入播放模式。来自源生成器的消息将显示在控制台窗口Unity 编辑器窗口,显示 Unity 或您自己的脚本生成的错误、警告和其他消息。更多信息
请参阅术语表,包括时间戳。
有关源生成器的详细信息,请参阅 Microsoft 的源生成器文档。