最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Unity-示例 - 創(chuàng)建四邊形

2021-03-25 09:07 作者:unity_某某師_高錦錦  | 我要投稿

為了表示平面,Unity 包含了可以在場景中實例化的平面和四邊形原始游戲?qū)ο蟆5?,了解如何使用腳本來自行構(gòu)造四邊形網(wǎng)格很有用。這是進行程序化網(wǎng)格生成的基礎(chǔ)。

注意:Unity 會處理并顯示由三角形組成的幾何體,而不是由四邊形組成的幾何體。這意味著一個四邊形圖元包含兩個三角形。

頂點數(shù)組

首先需要設(shè)置形狀使用的頂點數(shù)組。

以下示例假定四邊形位于 x 軸和 y 軸上,并且腳本中包含變量 width 和 height。

此示例按以下順序提供頂點: 左下角、 右下角、 左上角、 右上角

由于 Unity 檢索網(wǎng)格數(shù)據(jù)屬性的方式,您在自己的數(shù)組中設(shè)置數(shù)據(jù)并隨后將該數(shù)組分配給屬性(例如,分配給?Mesh.vertices?或?Mesh.normals)的效率要高得多,而不要通過單個元素訪問屬性數(shù)組。

三角形

接下來需要設(shè)置三角形。一個四邊形由兩個三角形組成,每個三角形由先前創(chuàng)建的頂點數(shù)組中的三個點組成。要指定這些點,請將每個三角形定義為頂點數(shù)組的三個索引。例如,此四邊形的左下方三角形使用索引 0、2 和 1,對應(yīng)于頂點數(shù)組中的坐標(biāo) (0, 0, 0)、(0, height, 0) 和 (width, 0, 0)。順序很重要,因為必須按順時針對角進行排序。右上方的三角形使用索引 2、3 和 1。

法線

在場景中可以看到帶有頂點和三角形的網(wǎng)格,但是 Unity 尚未對網(wǎng)格正確著色,因為這個網(wǎng)格還沒有法線。此示例的法線很簡單,因為這些法線都是相同的。每條法線均指向四邊形本地空間中的負 z 軸方向。添加法線時,Unity 會正確對四邊形著色,但是您需要在場景中有光源才能看到效果。

如果不想自己定義法線,則可以使用?Mesh.RecalculateNormals()。

紋理坐標(biāo)

最后,要正確顯示網(wǎng)格的材質(zhì)上的紋理,請向網(wǎng)格添加紋理坐標(biāo)。紋理坐標(biāo)在 0 到 1 之間。網(wǎng)格中的每個頂點都有一個紋理坐標(biāo),用于指定材質(zhì)的紋理上要采樣的位置。要顯示四邊形上的整個紋理,每個頂點上的紋理坐標(biāo)值都應(yīng)全部為 0 或 1,以便四邊形的每個角都對應(yīng)于紋理的角。

最終的腳本

以下腳本結(jié)合了以上所有內(nèi)容,用于在場景中創(chuàng)建一個四邊形。要使用該腳本: 創(chuàng)建一個新的 C# 腳本(菜單:Assets > Create > C# Script),然后將其命名為 QuadCreator。 打開 QuadCreator 腳本,將示例代碼復(fù)制到其中,然后保存腳本。 回到 Editor 中,在場景中創(chuàng)建一個新的游戲?qū)ο螅ú藛危篏ameObject > Create Empty)。 在 Inspector 中,選擇 Add Component > Scripts > Quad Creator。 將游戲?qū)ο蠓胖迷趫鼍爸兴璧娜魏挝恢谩?進入運行模式。如果在 Scene 視圖或 Game 視圖中看不到該四邊形,請確保從正確的一側(cè)查看;Unity 不會渲染此網(wǎng)格的背面。

using UnityEngine;?

public class QuadCreator : MonoBehaviour { ? ?

public float width = 1; ? ?

public float height = 1; ? ?

public void Start(){ ? ? ? ?

MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();

meshRenderer.sharedMaterial = new Material(Shader.Find("Standard"));

MeshFilter meshFilter = gameObject.AddComponent<MeshFilter>();

Mesh mesh = new Mesh();

Vector3[] vertices = new Vector3[4]{

new Vector3(0, 0, 0),

new Vector3(width, 0, 0),

new Vector3(0, height, 0),

new Vector3(width, height, 0)};

mesh.vertices = vertices;

int[] tris = new int[6]{

// 左下方三角形

0, 2, 1,

// 右上方三角形

2, 3, 1};

mesh.triangles = tris;

Vector3[] normals = new Vector3[4]{

-Vector3.forward,

-Vector3.forward,

-Vector3.forward,

-Vector3.forward};

mesh.normals = normals;

Vector2[] uv = new Vector2[4]{

new Vector2(0, 0),

new Vector2(1, 0),

new Vector2(0, 1),

new Vector2(1, 1)};

mesh.uv = uv;

meshFilter.mesh = mesh;

}}

注意:此示例代碼在 Start 函數(shù)中,這意味著會在您進入運行模式時執(zhí)行一次,并且網(wǎng)格在整個應(yīng)用程序中不會改變。但是,您可以在 Update 函數(shù)中添加代碼,以使網(wǎng)格在每一幀都更改。請注意,這會大大增加生成網(wǎng)格時消耗資源的強度。


Unity-示例 - 創(chuàng)建四邊形的評論 (共 條)

分享到微博請遵守國家法律
孝义市| 洪雅县| 宜宾市| 左权县| 云安县| 湘潭市| 大宁县| 南丹县| 肥西县| 邛崃市| 房山区| 五华县| 宜宾县| 呼玛县| 英吉沙县| 游戏| 绍兴县| 丰原市| 育儿| 乡城县| 德清县| 永德县| 密山市| 镇雄县| 刚察县| 濉溪县| 乐都县| 许昌县| 明溪县| 柳林县| 石狮市| 平和县| 海门市| 内江市| 安新县| 绥中县| 东丽区| 汶川县| 青川县| 漳州市| 内江市|