您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Unity中mesh如何生成斜坡的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Mesh是Unity中的一個組件,稱為網格組件。通俗的講,Mesh是指模型的網格,3D模型是由多邊形拼接而成,而多邊形實際上是由多個三角形拼接而成的。所以一個3D模型的表面其實是由多個彼此相連的三角面構成。三維空間中,構成這些三角形的點和邊的集合就是Mesh。
1、頂點坐標數組vertexes
2、頂點在uv坐標系中的位置信息數組uvs
3、三角形頂點順時針或者逆時針索引數組triangles
4、MeshFiler組件,用于增加mesh屬性
5、MeshRender組件,增加材質并渲染出來。
6、可能還需要每個頂點的法線的數組normals
/* /// 功能: /// 時間: /// 版本: */ using System.Collections; using System.Collections.Generic; using UnityEngine; public class MeshCreater : MonoBehaviour { public Vector3 eulerAngles; [Header("斜坡尺寸")] public float sizeX; public float sizeY; public float sizeZ; [Header("斜坡后面的立方體尺寸")] public float planeSize; public float m_angle; public Material material; Vector3[] vertices = new Vector3[54]; Vector2[] uvs = new Vector2[54]; List<int> allTris = new List<int>(); Vector3[] allPoint; GameObject gameObject; private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { DrawMesh(m_angle); } } public void DrawMesh(float angle) { if (gameObject != null) { Destroy(gameObject); } sizeX = sizeY * Mathf.Tan(angle * Mathf.PI / 180); gameObject = new GameObject("Cube"); gameObject.transform.eulerAngles = eulerAngles; var mf = gameObject.AddComponent<MeshFilter>(); var mr = gameObject.AddComponent<MeshRenderer>(); allPoint = new[] { //斜坡 new Vector3(0, 0, 0), new Vector3(0, 0, sizeZ), new Vector3(sizeX, 0, sizeZ), new Vector3(sizeX, 0, 0), new Vector3(0, sizeY, 0), new Vector3(0, sizeY, sizeZ), //斜坡后的立方體 new Vector3(0,-planeSize,0), new Vector3(sizeX,-planeSize,0), new Vector3(sizeX,-planeSize,sizeZ), new Vector3(0,-planeSize,sizeZ), }; //斜坡 vertices[0] = allPoint[0]; //正面 vertices[1] = allPoint[4]; vertices[2] = allPoint[3]; vertices[3] = allPoint[0]; //底面1 vertices[4] = allPoint[3]; vertices[5] = allPoint[2]; vertices[6] = allPoint[0];//底面1 vertices[7] = allPoint[2]; vertices[8] = allPoint[1]; vertices[9] = allPoint[1]; //背面1 vertices[10] = allPoint[4]; vertices[11] = allPoint[0]; vertices[12] = allPoint[4];//背面2 vertices[13] = allPoint[1]; vertices[14] = allPoint[5]; vertices[15] = allPoint[5]; //反面 vertices[16] = allPoint[1]; vertices[17] = allPoint[2]; vertices[18] = allPoint[2]; //斜坡1 vertices[19] = allPoint[3]; vertices[20] = allPoint[4]; vertices[21] = allPoint[2]; //斜坡1 vertices[22] = allPoint[4]; vertices[23] = allPoint[5]; //斜坡后的立方體 vertices[24] = allPoint[6]; vertices[25] = allPoint[0]; vertices[26] = allPoint[3]; vertices[27] = allPoint[6]; vertices[28] = allPoint[3]; vertices[29] = allPoint[7]; vertices[30] = allPoint[6]; vertices[31] = allPoint[9]; vertices[32] = allPoint[0]; vertices[33] = allPoint[0]; vertices[34] = allPoint[9]; vertices[35] = allPoint[1]; vertices[36] = allPoint[7]; vertices[37] = allPoint[3]; vertices[38] = allPoint[8]; vertices[39] = allPoint[8]; vertices[40] = allPoint[3]; vertices[41] = allPoint[2]; vertices[42] = allPoint[7]; vertices[43] = allPoint[8]; vertices[44] = allPoint[9]; vertices[45] = allPoint[7]; vertices[46] = allPoint[9]; vertices[47] = allPoint[6]; vertices[48] = allPoint[1]; vertices[49] = allPoint[9]; vertices[50] = allPoint[8]; vertices[51] = allPoint[1]; vertices[52] = allPoint[8]; vertices[53] = allPoint[2]; for (int i = 0; i < vertices.Length; i++) { allTris.Add(i); } uvs[0] = new Vector2(0, 0); uvs[1] = new Vector2(0, 1); uvs[2] = new Vector2(1, 0); uvs[3] = new Vector2(0, 0); uvs[4] = new Vector2(1, 0); uvs[5] = new Vector2(1, 1); uvs[6] = new Vector2(0f, 0f); uvs[7] = new Vector2(1f, 1f); uvs[8] = new Vector2(0f, 1f); uvs[9] = new Vector2(0, 1); uvs[10] = new Vector2(1, 0); uvs[11] = new Vector2(0, 0); uvs[12] = new Vector2(1, 0); uvs[13] = new Vector2(0, 1); uvs[14] = new Vector2(1, 1); uvs[15] = new Vector2(0f, 1f); uvs[16] = new Vector2(0, 0); uvs[17] = new Vector2(1, 0); uvs[18] = new Vector2(1f, 1f); uvs[19] = new Vector2(1f, 0f); uvs[20] = new Vector2(0f, 0f); uvs[21] = new Vector2(1, 1); uvs[22] = new Vector2(0, 0); uvs[23] = new Vector2(0, 1); uvs[24] = new Vector2(1, 1); uvs[25] = new Vector2(0, 0); uvs[26] = new Vector2(0, 1); uvs[27] = new Vector2(1, 1); uvs[28] = new Vector2(0, 0); uvs[29] = new Vector2(0, 1); uvs[30] = new Vector2(1, 1); uvs[31] = new Vector2(0, 0); uvs[32] = new Vector2(0, 1); uvs[33] = new Vector2(1, 1); uvs[34] = new Vector2(0, 0); uvs[35] = new Vector2(0, 1); uvs[36] = new Vector2(1, 1); uvs[37] = new Vector2(0, 0); uvs[38] = new Vector2(0, 1); uvs[39] = new Vector2(1, 1); uvs[40] = new Vector2(0, 0); uvs[41] = new Vector2(0, 1); uvs[42] = new Vector2(1, 1); uvs[43] = new Vector2(0, 0); uvs[44] = new Vector2(0, 1); uvs[45] = new Vector2(1, 1); uvs[46] = new Vector2(0, 0); uvs[47] = new Vector2(0, 1); uvs[48] = new Vector2(1, 1); uvs[49] = new Vector2(0, 0); uvs[50] = new Vector2(0, 1); uvs[51] = new Vector2(1, 1); uvs[52] = new Vector2(0, 0); uvs[53] = new Vector2(0, 1); Mesh mesh = new Mesh(); mesh.vertices = vertices; mesh.uv = uvs; mesh.triangles = allTris.ToArray(); mr.material = material; mesh.RecalculateTangents(); mesh.RecalculateNormals(); mesh.RecalculateBounds(); mf.mesh = mesh; } private void OnDrawGizmos() { if (allPoint != null) { for (int i = 0; i < allPoint.Length; i++) { Gizmos.color = Color.yellow; Gizmos.DrawSphere(allPoint[i], 0.1f); } } } }
感謝各位的閱讀!關于“Unity中mesh如何生成斜坡”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。