Unity3d mesh合並,網格合並具體用法教程


Unity開發Mesh合並網格


本文提供全流程,中文翻譯。

Chinar 堅持將簡單的生活方式,帶給世人!

(擁有更好的閱讀體驗 —— 高分辨率用戶請根據需求調整網頁縮放比例)



Chinar —— 心分享、心創新!

助力快速理解 Unity 中合並網格的概念與流程

為新手節省寶貴的時間,避免采坑!


Chinar 教程效果:
這里寫圖片描述
這里寫圖片描述



全文高清圖片,點擊即可放大觀看 (很多人竟然不知道)


1

Merge Mesh —— 合並網格


Unity 開發中,如果我們需要做性能優化

或者是一些項目需求,需要將零散的幾個物體進行合並,成為一個整體的模型

而由於模型的樣貌是由 MeshFilter 決定,上色由 MeshRender 決定

所以我們只需將幾個零散模型的 MeshFilter 進行合並,就能得到一個整體的模型
舉個栗子黑白88
這里寫圖片描述
合並后的網格效果:
這里寫圖片描述


2

Create GameObject —— 在場景中創建一個空物體


Hierarchy 層次面板中,創建一個空物體,並將腳本文件掛載它上邊

將你需要的零散的模型,設置為其子物體

運行腳本,即可完成合並!

注意:

腳本中我注銷掉的腳本之前的代碼,足夠生成新模型的網格,且運行后就已經生成了!
舉個栗子黑白88
這里寫圖片描述

using UnityEngine;


/// <summary>
/// 合並網格
/// </summary>
public class ChinarMergeMesh : MonoBehaviour
{
    void Start()
    {
        MergeMesh();
    }


    /// <summary>
    /// 合並網格
    /// </summary>
    private void MergeMesh()
    {
        MeshFilter[]      meshFilters      = GetComponentsInChildren<MeshFilter>();   //獲取 所有子物體的網格
        CombineInstance[] combineInstances = new CombineInstance[meshFilters.Length]; //新建一個合並組,長度與 meshfilters一致
        for (int i = 0; i < meshFilters.Length; i++)                                  //遍歷
        {
            combineInstances[i].mesh      = meshFilters[i].sharedMesh;                   //將共享mesh,賦值
            combineInstances[i].transform = meshFilters[i].transform.localToWorldMatrix; //本地坐標轉矩陣,賦值
        }
        Mesh newMesh = new Mesh();                                  //聲明一個新網格對象
        newMesh.CombineMeshes(combineInstances);                    //將combineInstances數組傳入函數
        gameObject.AddComponent<MeshFilter>().sharedMesh = newMesh; //給當前空物體,添加網格組件;將合並后的網格,給到自身網格
        //到這里,新模型的網格就已經生成了。運行模式下,可以點擊物體的 MeshFilter 進行查看網格

        #region 以下是對新模型做的一些處理:添加材質,關閉所有子物體,添加自轉腳本和控制相機的腳本

        //gameObject.AddComponent<MeshRenderer>().material = Resources.Load<Material>("Materials/Koala"); //給當前空物體添加渲染組件,給新模型網格上色;
        //foreach (Transform t in transform) //禁用掉所有子物體
        //{
        // t.gameObject.SetActive(false);
        //}
        //gameObject.AddComponent<BallRotate>();
        //Camera.main.gameObject.AddComponent<ChinarCamera>().pivot = transform;

        #endregion
    }
}

3

Error Effect —— 錯誤效果


運行后,你會發現場景中沒有什么變化!還是那個模型在那里!

其實這時候網格都已經生成了

原因-1:我們沒有禁用子物體,所以顯示的還是子物體的組合效果;
原因-2:我們只給空物體加了 MeshFilter 組件,並添加了合並后的網格,但並沒有進行渲染!
舉個栗子黑白88
這里寫圖片描述


4

improvement —— 完善


Resources 中新建一個材質球命名:“ Koala ”,用來給空物體(新模型)渲染使用

並動態將子物體進行關閉,將對模型進行材質球的添加

動態添加2個腳本,一個用來旋轉,一個控制相機旋轉(這是為了好看的測試效果,並非必要)
舉個栗子黑白88
這里寫圖片描述


5

Project —— 項目文件


項目文件為 unitypackage 文件包:

下載導入 Unity 即可使用
舉個栗子黑白88
點擊下載 —— 項目資源 (積分支持)

點擊下載 —— 項目資源 (Chinar免費)


支持

May Be —— 搞開發,總有一天要做的事!


擁有自己的服務器,無需再找攻略!

Chinar 提供一站式教程,閉眼式創建!

為新手節省寶貴時間,避免采坑!


先點擊領取 —— 阿里全產品優惠券 (享受最低優惠)


1 —— 雲服務器超全購買流程 (新手必備!)

2 —— 阿里ECS雲服務器自定義配置 - 購買教程(新手必備!)

3—— Windows 服務器配置、運行、建站一條龍 !

4 —— Linux 服務器配置、運行、建站一條龍 !





技術交流群:806091680 ! Chinar 歡迎你的加入


END

本博客為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究

對於需要復制、轉載、鏈接和傳播博客文章或內容的,請及時和本博主進行聯系,留言,Email: ichinar@icloud.com

對於經本博主明確授權和許可使用文章及內容的,使用時請注明文章或內容出處並注明網址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM