日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Mesh—合并网格提升性能

發(fā)布時(shí)間:2024/3/12 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mesh—合并网格提升性能 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

將多個(gè)網(wǎng)格合并為一個(gè)網(wǎng)格,即將多個(gè)模型合并為一個(gè)模型。

如下面兩個(gè)模型:

從右邊可以看出它是由兩個(gè)模型組成。有些時(shí)候我們會(huì)希望這兩個(gè)模型使用同一個(gè)Collider,但是我們不

可能還要美術(shù)從新做一個(gè)碰撞,因?yàn)槲矬w的擺放不是固定的。

所以我們就要使用到Untiy的一個(gè)API——CombineMeshes。

具體可以查看https://docs.unity3d.com/ScriptReference/Mesh.CombineMeshes.html

現(xiàn)在實(shí)現(xiàn)這個(gè)功能,我們選取圖中某個(gè)對(duì)象做為父對(duì)象,將其他一個(gè)對(duì)象作為它的子對(duì)象。新建一個(gè)腳

本,添加到父對(duì)象上。

using UnityEngine; using System.Collections;public class CombineMeshes : MonoBehaviour {void Start(){GetMesh(transform);}void GetMesh(Transform ts){MeshFilter[] meshFilters = ts.GetComponentsInChildren<MeshFilter>(); //獲取自身和所有子物體中所有MeshFilter組件CombineInstance[] combine = new CombineInstance[meshFilters.Length]; //新建CombineInstance數(shù)組MeshRenderer[] Renderer = ts.GetComponentsInChildren<MeshRenderer>(); //獲取自身和所有子物體中所有MeshRenderer組件Material[] mats = new Material[Renderer.Length]; //新建材質(zhì)球數(shù)組for (int i = 0; i < meshFilters.Length; i++){mats[i] = Renderer[i].sharedMaterial; //獲取材質(zhì)球列表combine[i].mesh = meshFilters[i].sharedMesh;//矩陣(Matrix)自身空間坐標(biāo)的點(diǎn)轉(zhuǎn)換成世界空間坐標(biāo)的點(diǎn) //combines[i].transform = meshFilters[i].transform.localToWorldMatrix;//變換矩陣的問題,要保持相對(duì)位置不變,要轉(zhuǎn)換為父節(jié)點(diǎn)的本地坐標(biāo),combines[i].transform = ts.worldToLocalMatrix * meshFilters[i].transform.localToWorldMatrix;if (meshFilters[i].gameObject.name != gameObject.name) //除了根物體,其他物體統(tǒng)統(tǒng)銷毀{Destroy(meshFilters[i].gameObject);}}ts.GetComponent<MeshFilter>().mesh = new Mesh();ts.GetComponent<MeshFilter>().mesh.CombineMeshes(combine, false);/*為mesh.CombineMeshes添加一個(gè) false 參數(shù),表示并不是合并為一個(gè)網(wǎng)格,而是一個(gè)子網(wǎng)格列表,可以讓擁有多個(gè)材質(zhì)球,如果要合并的網(wǎng)格用的是同一材質(zhì),false改為true,同時(shí)將上面的獲取Material的代碼去掉*/ts.GetComponent<MeshRenderer>().sharedMaterials = mats; //為合并后的GameObject指定材質(zhì)球數(shù)組}}

我們這里選取Cube為父物體,Sphere為子物體,同時(shí)將腳本添加到Cube身上。

現(xiàn)在運(yùn)行,你會(huì)發(fā)現(xiàn),Sphere被刪除了,而它的模型卻還依然存在,他的網(wǎng)格已經(jīng)和Cube合并在一起

了,同時(shí)Cube也擁有了兩個(gè)材質(zhì)球。


另外盡量保證根物體的縮放是1:1:1,不然就會(huì)發(fā)現(xiàn)合并完的模型完全變形了。

總結(jié)

以上是生活随笔為你收集整理的Mesh—合并网格提升性能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。