前文再續
如何給角色更換部件,發現前文的不太科學。。。特意重發
更換骨骼部件 必須獲取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...