Unity換裝功能

2021-07-15 03:47:00 字數 1246 閱讀 6513

前文再續

如何給角色更換部件,發現前文的不太科學。。。特意重發

更換骨骼部件 必須獲取skinnedmeshrenderer元件,如果不存在這個屬性 請按照前文替換方式 儲存mesh和material進行替換

首先說說

skinnedmeshrenderer

不得不說 前文的方法是對了一部分, 只是由於骨骼需要繫結的節點很多 所以實際使用上會出現其他問題

例如 定點數不一致 缺少骨骼資訊 沒有網格與材質

如何更換skinmesh呢?

首先 需要把需要的mesh、material、骨骼資訊打包成乙個prefab 例如

class bonesdata

骨骼資訊儲存的是 骨骼模型對應的skinnedmeshrenderer元件的bones資訊,由於bones是乙個陣列,而打包時候transform是不能作為儲存介質的,所以需要保留bones的路徑一邊更換時候通過尋找獲取骨骼繫結點資訊.

至於如何獲取完整的bones路徑 思路就是獲取transform.parent然後通過string類下的insert把遍歷的結果組成字串

而mesh和materials則存放物件物件的mesh和sharematerials(方便擴充套件 使用陣列的)

至於如何替換舊的mesh

首先 按照前文的

先獲取打包後的prefab再把bonesdata獲取出來,其次獲取

skinnedmeshrenderer的物件,把物件sharedmesh和sharedmaterials替換

偽**:

gameobject go = 獲取prefab//可通過assetbundle,resources等方法獲取

bonesdata bd = go.getcomponent(

bonesdata);

成功獲取後

skinnedmeshrenderer smr = 欲替換骨骼部位的transform獲取

skinnedmeshrenderer元件;

//mesh和materials賦值

//然後使用迴圈 遍歷源物件(從角色的根節點的transform尋找骨骼節點資訊)

//得出bones的transform的list

//進而list替換smr.bones

//最後記得把建立的資源**destroy~~~ 完

於是乎 就能把骨骼部件的mesh替換掉

前提 必須是同一套骨骼的部件才能替換 不然會出錯的...

順道求渣浪微博如何顯示**框= =

Unity 之 人物換裝

原理 一 skinedmeshrender 該物件負責網格繪製。主要資料成員包括 var bones transform 骨骼 var materials material 材質 var sharedmesh mesh 網格 其中mesh的主要成員是 vertices vector3 頂點 bone...

Unity 之 人物換裝

原理 一 skinedmeshrender 該物件負責網格繪製。主要資料成員包括 var bones transform 骨骼 var materials material 材質 var sharedmesh mesh 網格其中mesh的主要成員是 vertices vector3 頂點 bonew...

Unity換裝之合併網格

為了提高遊戲效能,需要對人物進行換裝後,講人物各個部分再進行組合,形成乙個整體的網格,所以需要合併網格,骨骼,材質等。下面是從resources中載入人物各個部分,然後再組裝。首先載入的骨骼,再載入其他部分。void loadresource void addpart string partname...