版本: Unity 6 (6000.0)
语言英语
  • C#

MeshGenerationContext

UnityEngine.UIElements 中的类

/

实现于:UnityEngine.UIElementsModule

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

VisualElement.generateVisualContent 回调期间,提供用于生成可视元素的可视内容的方法。


可视内容是通过使用 Painter2D 对象生成的,或者通过使用 MeshGenerationContext.Allocate 方法分配网格并填充顶点和索引来手动生成。

要使用绘图对象,请访问 MeshGenerationContext.painter2D 属性,然后使用它发出绘图命令。您可以在 Painter2D 文档中找到一个示例。

如果您使用 MeshGenerationContext.Allocate 手动提供内容,并在分配期间还提供纹理,则可以使用 Vertex.uv 顶点值将其映射到生成的网格。UI 工具包可能会将纹理存储在内部图集中。


//This example creates a custom element that dynamically renders a textured rectangle 
//based on the element’s size. 

using UnityEngine; using UnityEngine.UIElements;

public class TexturedElement : VisualElement { static readonly Vertex[] k_Vertices = new Vertex[4]; static readonly ushort[] k_Indices = { 0, 1, 2, 2, 3, 0 };

static TexturedElement() { k_Vertices[0].tint = Color.white; k_Vertices[1].tint = Color.white; k_Vertices[2].tint = Color.white; k_Vertices[3].tint = Color.white;

k_Vertices[0].uv = new Vector2(0, 0); k_Vertices[1].uv = new Vector2(0, 1); k_Vertices[2].uv = new Vector2(1, 1); k_Vertices[3].uv = new Vector2(1, 0); }

Texture2D m_Texture;

public TexturedElement() { //This element grows to fill the available space. style.flexGrow = 1.0f; //Subscribes the OnGenerateVisualContent method to the generateVisualContent delegate. generateVisualContent += OnGenerateVisualContent;

//Create a simple 2x2 checkerboard texture. m_Texture = new Texture2D(2, 2); m_Texture.SetPixels(new Color[] { Color.white, Color.black, Color.black, Color.white }); m_Texture.Apply();

//You can also load a texture from a file. //m_Texture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/tex.png"); }

//This method is called when the element needs to render its content. void OnGenerateVisualContent(MeshGenerationContext mgc) { Rect r = contentRect; if (r.width < 0.01f || r.height < 0.01f) return; // Skip rendering when too small.

float left = 0; float right = r.width; float top = 0; float bottom = r.height;

k_Vertices[0].position = new Vector3(left, bottom, Vertex.nearZ); k_Vertices[1].position = new Vector3(left, top, Vertex.nearZ); k_Vertices[2].position = new Vector3(right, top, Vertex.nearZ); k_Vertices[3].position = new Vector3(right, bottom, Vertex.nearZ);

MeshWriteData mwd = mgc.Allocate(k_Vertices.Length, k_Indices.Length, m_Texture);

mwd.SetAllVertices(k_Vertices); mwd.SetAllIndices(k_Indices); } }

属性

painter2D用于发出绘图命令的矢量绘图对象。
visualElement调用 VisualElement.generateVisualContent 的元素。

公共方法

AddMeshGenerationJob指示渲染器在开始处理网格之前等待提供的 JobHandle 完成。
Allocate分配并绘制表达 VisualElement 内容的几何图形所需的指定数量的顶点和索引。
AllocateTempMesh从临时分配器分配指定数量的顶点和索引。
DrawMesh使用提供的三角列表索引网格记录绘图命令。
DrawText绘制字符串。
DrawVectorImage绘制 VectorImage 资源。
GetTempMeshAllocator返回一个分配器,可用于从作业系统安全地分配临时网格。这些网格与 AllocateTempMesh 分配的网格具有相同的范围。
InsertMeshGenerationNode将一个节点插入渲染树中,该节点可以从作业系统填充。