中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unity中mesh如何生成斜坡

發布時間:2021-05-31 10:12:33 來源:億速云 閱讀:878 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Unity中mesh如何生成斜坡的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Mesh概念:

Mesh是Unity中的一個組件,稱為網格組件。通俗的講,Mesh是指模型的網格,3D模型是由多邊形拼接而成,而多邊形實際上是由多個三角形拼接而成的。所以一個3D模型的表面其實是由多個彼此相連的三角面構成。三維空間中,構成這些三角形的點和邊的集合就是Mesh。

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如何生成斜坡

感謝各位的閱讀!關于“Unity中mesh如何生成斜坡”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐业县| 都江堰市| 信宜市| 密山市| 宝山区| 石城县| 江阴市| 吴桥县| 浑源县| 蕲春县| 洪泽县| 乌恰县| 鱼台县| 定安县| 成武县| 九寨沟县| 新绛县| 遂溪县| 石景山区| 光山县| 商洛市| 荃湾区| 安泽县| 武宁县| 商河县| 周口市| 来宾市| 日照市| 苍溪县| 红原县| 溆浦县| 乾安县| 延庆县| 奎屯市| 武山县| 红原县| 于都县| 皮山县| 宁南县| 历史| 个旧市|