MeshUnity的主要图形基元。网格构成了3D世界的很大一部分。Unity支持三角形或四边形多边形网格。必须将Nurbs、Nurms和细分曲面转换为多边形。 详细信息
请参阅 词汇表和Material定义如何渲染曲面的资源。 详细信息
请参阅 词汇表是Unity中的C#托管对象,也就是说,你不能从Burst C#代码中使用它们。这意味着要用它们在BRG绘制命令,你必须先在BRG中预注册。
要注册Mesh和Material对象,请分别使用BatchRendererGroup.RegisterMesh和BatchRendererGroup.RegisterMaterial。这些函数分别返回BatchMeshID和BatchMaterialID,它们是包含Burst兼容句柄的普通数据结构。它们是强类型的,这样可以帮助防止因意外使用错误的句柄类型而产生错误。
你可以在任何时候(包括运行时)注册Mesh和Material对象。唯一的要求是
如果不再需要Mesh和Material对象,你还可以取消注册它们。如果你要卸载任何Mesh或Material对象,这是必需的。 BatchRendererGroup.Dispose会自动取消注册所有已注册的资源。
注意:不能序列化 BatchMeshID 或 BatchMaterialID。它们只与注册它们的 BatchRendererGroup 有效,如果您取消注册它们,或者 BatchRendererGroup 不再存在,它们将变为无效。如果某些内容强制 Unity 卸载网格或材质对象,也会使 BatchMeshID 和 BatchMaterialID 失效,这种情况发生在 Unity 卸载包含网格或材质对象的场景一个场景包含游戏的环境和菜单。设想每个独特的场景文件作为一个不同的关卡。在每个场景中,您可以放置自己的环境、障碍物和装饰品,基本以碎片式设计和构建自己的游戏。更多信息
参见Glossary时。
可以多次注册相同的网格或材质对象。在您想要注册网格或材质,但不知道已经注册了哪些网格和材质的情况下,此功能很有用。在此情况下,BatchRenderer 会按照以下方式内部记录注册次数
注意:BRG 会在一个帧中的第一个 OnPerformCulling 回调方法后检查网格或材质对象是否修改。这意味着 Unity 会将修改发生的时间计算在内。这包括您在第一个回调自身中进行的更改,但不包括在回调中安排作业时发生的更改。在此时间之后修改网格或材质对象会导致未定义的行为。
请参阅下面的代码示例,了解如何使用 BatchRendererGroup 对象注册网格和材质。此代码示例基于Initializing a BatchRendererGroup object中的示例。
using System;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.Rendering;
public class SimpleBRGExample : MonoBehaviour
{
public Mesh mesh;
public Material material;
private BatchRendererGroup m_BRG;
private BatchMeshID m_MeshID;
private BatchMaterialID m_MaterialID;
private void Start()
{
m_BRG = new BatchRendererGroup(this.OnPerformCulling, IntPtr.Zero);
m_MeshID = m_BRG.RegisterMesh(mesh);
m_MaterialID = m_BRG.RegisterMaterial(material);
}
private void OnDisable()
{
m_BRG.Dispose();
}
public unsafe JobHandle OnPerformCulling(
BatchRendererGroup rendererGroup,
BatchCullingContext cullingContext,
BatchCullingOutput cullingOutput,
IntPtr userContext)
{
// This simple example doesn't use jobs, so it can return an empty JobHandle.
// Performance-sensitive applications should use Burst jobs to implement
// culling and draw command output. In this case, this function would return a
// handle that completes when the Burst jobs finish.
return new JobHandle();
}
}
在创建任何使用已注册网格和材质的绘图命令之前,您需要提供要用于绘图命令实例的数据(如变换矩阵)。为每个实例提供要使用的数据,BatchRendererGroup 使用称为“批次”的概念。有关更多信息,请参阅下一主题Creating batches。