您好,登錄后才能下訂單哦!
對于靜態對象,Unity可以使用通過勾選Static,然后讓Unity自身進行優化Draw Calls,但是對于動態對象,Unity在這方面沒有處理,這就需要我們自己去實現,實現的原理就是首先去遍歷每個對象的SkinnderMeshRenderer,然后將其所有的動態對象組合成一個大的對象并且將骨骼動畫賦值給他,這樣,我們就實現了動態對象的優化,代碼如下:
public static void CombineToMesh(GameObject _go) { SkinnedMeshRenderer[] _smr = _go.GetComponentsInChildren<SkinnedMeshRenderer>(); List<CombineInstance> lcom = new List<CombineInstance>(); List<Material> lmat = new List<Material>(); List<Transform> ltra = new List<Transform>(); for (int i = 0; i < _smr.Length; i++) { lmat.AddRange(_smr[i].materials); ltra.AddRange(_smr[i].bones); for (int sub = 0; sub < _smr[i].sharedMesh.subMeshCount; sub++ ) { CombineInstance ci = new CombineInstance(); ci.mesh = _smr[i].sharedMesh; ci.subMeshIndex = sub; lcom.Add(ci); } Destroy(_smr[i].gameObject); } SkinnedMeshRenderer _r = _go.GetComponent<SkinnedMeshRenderer>(); if (_r == null) _r = _go.AddComponent<SkinnedMeshRenderer>(); _r.sharedMesh = new Mesh(); _r.bones = ltra.ToArray(); _r.materials = new Material[] { lmat[0] }; _r.rootBone = _go.transform; _r.sharedMesh.CombineMeshes(lcom.ToArray(), true, false); }
以上是完整的源代碼,大家只要將其調用即可。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。