返回一个新的 mesh 或现有网格的副本,并将其分配给网格过滤器。
如果没有将网格分配给网格过滤器,则将创建一个新网格并分配给它。
如果网格过滤器已经分配了网格,则第一次查询 mesh
属性将创建该网格的副本,并返回此副本。对 mesh
属性的进一步查询将返回此重复的网格实例。一旦查询了 mesh
属性,指向原始共享网格的链接将丢失,并且 MeshFilter.sharedMesh 属性将成为 mesh
的别名。如果您想避免这种自动网格复制,请使用 MeshFilter.sharedMesh 代替。
通过使用 mesh
属性,您只能修改单个对象的网格。使用相同网格的其他对象将不会被修改。
您有责任在游戏对象被销毁时销毁自动实例化的网格。 Resources.UnloadUnusedAssets 也会销毁网格,但它通常只在加载新关卡时调用。
将 mesh
属性视为以下代码的快捷方式
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { void Start() { Mesh mesh = GetComponent<MeshFilter>().sharedMesh; Mesh mesh2 = Instantiate(mesh); GetComponent<MeshFilter>().sharedMesh = mesh2; } }
它在第一次查询 mesh
属性时被调用。
注意
如果 MeshFilter 是资产对象的组成部分,则不允许查询 mesh
属性,只能分配资产网格。
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { // Distorts the mesh vertically. void Update() { // Get instantiated mesh Mesh mesh = GetComponent<MeshFilter>().mesh; // Randomly change vertices Vector3[] vertices = mesh.vertices; int p = 0; while (p < vertices.Length) { vertices[p] += new Vector3(0, Random.Range(-0.3F, 0.3F), 0); p++; } mesh.vertices = vertices; mesh.RecalculateNormals(); } }
其他资源: Mesh 类。