Unity-使用 Mesh 類
Mesh?類是對(duì)象網(wǎng)格幾何體的基本腳本接口。該類使用數(shù)組來表示三角形、頂點(diǎn)位置、法線和紋理坐標(biāo),還提供了許多其他有用的屬性和函數(shù)來輔助網(wǎng)格的生成。
訪問對(duì)象的網(wǎng)格
通常使用網(wǎng)格過濾器 (Mesh Filter)?組件將網(wǎng)格數(shù)據(jù)附加到對(duì)象(該對(duì)象還需要?MeshRenderer?以使幾何體可見)。使用熟悉的 GetComponent 函數(shù)訪問此組件:
using UnityEngine;?
public class ExampleScript : MonoBehaviour
{
? ?
MeshFilter mf;
? ?
void Start(){
? ? ? ?
//如果此 gameObject 具有 MeshFilter,則 mf 將引用該組件
? ? ? ?
mf = GetComponent<MeshFilter>();
}?
}
添加網(wǎng)格數(shù)據(jù)
Mesh 對(duì)象具有頂點(diǎn)及其關(guān)聯(lián)數(shù)據(jù)(法線和 UV 坐標(biāo))的屬性以及三角形數(shù)據(jù)的屬性。頂點(diǎn)可按任何順序提供,但是法線和 UV 的數(shù)組必須經(jīng)過排序,使索引全部對(duì)應(yīng)于頂點(diǎn)(即,法線數(shù)組的元素 0 提供頂點(diǎn) 0 的法線,依此類推)。頂點(diǎn)為?Vector3,表示對(duì)象局部空間中的點(diǎn)。法線為經(jīng)過標(biāo)準(zhǔn)化的 Vector3,表示方向,同樣位于局部坐標(biāo)中。UV 指定為?Vector2,但由于 Vector2 類型沒有名為 U 和 V 的字段,因此必須在腦海中將它們分別轉(zhuǎn)換為 X 和 Y。
三角形指定為整數(shù)三元組,作為頂點(diǎn)數(shù)組的索引。該數(shù)組只是一個(gè)簡(jiǎn)單的整數(shù)索引列表,并不會(huì)使用特殊的類來表示三角形。它們針對(duì)每個(gè)三角形以三個(gè)為一組,因此前三個(gè)元素定義第一個(gè)三角形,接下來的三個(gè)定義第二個(gè)三角形,依此類推。三角形的一個(gè)重要細(xì)節(jié)是角頂點(diǎn)的排序問題。它們的排列應(yīng)符合以下要求:當(dāng)向下觀看三角形的可見外表面時(shí),角應(yīng)順時(shí)針轉(zhuǎn)動(dòng),但從哪個(gè)角開始并不重要。
高級(jí)網(wǎng)格 API
Mesh?類還具有更低級(jí)別的高級(jí) API,使您可以 使用原始網(wǎng)格頂點(diǎn)和索引緩沖區(qū)數(shù)據(jù)。在需要最高性能或最低內(nèi)存分配的情況下,這很有用。
Mesh.SetIndexBufferParams?和?Mesh.SetIndexBufferData,用于設(shè)置索引緩沖區(qū)的大小和格式以及更新其中的數(shù)據(jù)。
Mesh.SetVertexBufferParams?和?Mesh.SetVertexBufferData,用于設(shè)置頂點(diǎn)緩沖區(qū)的大小和格式以及更新其中的數(shù)據(jù)。
Mesh.SetSubMesh,用于設(shè)置索引緩沖區(qū)拓?fù)浜头秶?/p>