Chinar 堅持將簡單的生活方式,帶給世人! (擁有更好的閱讀體驗 —— 高分辨率用戶請根據需求調整網頁縮放比例) |
助力快速理解 Unity 中合並網格的概念與流程 為新手節省寶貴的時間,避免采坑! |
Chinar 教程效果:
1
Merge Mesh —— 合並網格
Unity 開發中,如果我們需要做性能優化
或者是一些項目需求,需要將零散的幾個物體進行合並,成為一個整體的模型
而由於模型的樣貌是由 MeshFilter 決定,上色由 MeshRender 決定
所以我們只需將幾個零散模型的 MeshFilter 進行合並,就能得到一個整體的模型
合並后的網格效果:
2
Create GameObject —— 在場景中創建一個空物體
Hierarchy 層次面板中,創建一個空物體,並將腳本文件掛載它上邊
將你需要的零散的模型,設置為其子物體
運行腳本,即可完成合並!
注意:
腳本中我注銷掉的腳本之前的代碼,足夠生成新模型的網格,且運行后就已經生成了!
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 組件,並添加了合並后的網格,但並沒有進行渲染!
4
improvement —— 完善
Resources 中新建一個材質球命名:“ Koala ”,用來給空物體(新模型)渲染使用
並動態將子物體進行關閉,將對模型進行材質球的添加
動態添加2個腳本,一個用來旋轉,一個控制相機旋轉(這是為了好看的測試效果,並非必要)
5
Project —— 項目文件
項目文件為 unitypackage 文件包:
下載導入 Unity 即可使用
點擊下載 —— 項目資源 (積分支持)
支持
May Be —— 搞開發,總有一天要做的事!
Chinar 提供一站式教程,閉眼式創建! 為新手節省寶貴時間,避免采坑! |
先點擊領取 —— 阿里全產品優惠券 (享受最低優惠)
1 —— 雲服務器超全購買流程 (新手必備!)
2 —— 阿里ECS雲服務器自定義配置 - 購買教程(新手必備!)
3—— Windows 服務器配置、運行、建站一條龍 !
4 —— Linux 服務器配置、運行、建站一條龍 !

技術交流群:806091680 ! Chinar 歡迎你的加入
本博客為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究
對於需要復制、轉載、鏈接和傳播博客文章或內容的,請及時和本博主進行聯系,留言,Email: ichinar@icloud.com
對於經本博主明確授權和許可使用文章及內容的,使用時請注明文章或內容出處並注明網址