1、如果角色只是單純的更換裝備 也就是說 角色的整個身體是乙個完整的網格 而所需要更換的各個部件只是裝備 而不是身體的某一部分 比如ngui中character的例子 穿裝備之前 角色只有預設的身體 穿了裝備以後 身體不變 只是在特
定的位置顯示裝備 如下圖
穿裝備以前穿裝備以後
這樣做的好處是實現起來很簡單 就是在特定的骨骼下顯示乙個不含有蒙皮資訊的裝備模型
更換的時候去通知特定功能的**去刪掉或隱藏之前的 再顯示新的即可
不好的地方是 1 實現不了身體部件的更換 當然這不一定是不足 要視遊戲的設計本身而論
2 穿上裝備 實際上就是多增加了乙份模型 那麼所需要渲染的面數會增加 drawcall也會增加
如果遊戲中模型的面數以及drawcall控制的很好 並且不存在除角色以外的其他玩家換裝的話 並且遊戲本身設計時也不需要身體部件更換的話
那這樣做應該會是個值得考慮的方案
2、大部分網路遊戲都會選擇將身體的各個部件拆開 各個部件由身體部分和裝備部分共同組成乙個完整的模型 因此更換部件其實也就是更換裝備
unity實現就如同上文中所講 **可參考官方charactercustomization例子
在遊戲中 關心的不僅是裝備有沒有更換 更關心更換的好不好 會不會留有隱患
官方的這個例子只是演示了換裝的原理 但是開啟profile的memory一欄 會看到在更換裝備的時候 記憶體占用在不斷的增加
這樣無厘頭的記憶體占用會帶來嚴重的後果 尤其是網路遊戲這種換裝頻率高的遊戲方式 尤其對於移動平台的網路遊戲 尤其對於移動平台的3d網路遊戲
優化問題牽扯到記憶體優化 資源優化 渲染優化 **優化等多方面 待後文中再逐一討論
官方換裝中的記憶體問題 是因為裝備被替換掉以後 沒有從記憶體中清除 不斷的更換就會在記憶體中不斷的累加
相關問題在unity聖殿中有文章詳細解釋
裝備中除**以外 其他的部分都可以用同一種方式去更換 當然**也可以 同樣要視遊戲本身而論
如果遊戲中在安全區需要**背在背上 而在非安全區拿在手上 同時有角色的「亮出**」這樣的過度動作配合 那麼乙個角色身上裝備兩把**絕對是不二之選一把在手上 一把在背上 控制其中之一顯示即可 那麼在更換**的時候則需要將這兩把**全部更新
如果只是一把** 在不同的狀態掛在不同的位置的話 那麼unity實現中乙個很好的辦法就是單純的把**模型放到相應的骨骼下 成為該骨骼的sub node
身體各部件都需要能夠支援動態的更換 按照官方的例子 實際上更換每乙個部件 就等同於重新合併了一遍網格 只是這次合併是用新裝備的模型和其他部件的模型
當然如果選擇不合併網格 那麼也就是說 每個裝備的部件都有乙個skinnedmeshrenderer元件來與骨骼進行關聯 等同於計算量會翻倍
合併網格的換裝**參考官方例項 不合併網格的換裝核心**如下 即從當前角色的骨骼中取到該模型所關聯的骨骼 然後建立關聯即可
1public
void generate(gameobject root, int
elemid) 2
30}31}
32 elemsmr.bones =elembones.toarray();
33 elemsmr.updatewhenoffscreen = false;
Unity3d 3d角色換裝實現原理及步驟
1 角色模型製作 unity3d支援skin動畫 但是不支援physique動畫 會發現physique動畫在unity裡嚴重變形 因此在模型的骨骼動畫的製作上面 要用skin 當然也可以做成physique 然後用外掛程式轉換一下 3dsmax的外掛程式phytoskin 3dsmax中轉換之前 ...
Unity3d 3d角色換裝實現原理及步驟
1 角色模型製作 unity3d支援skin動畫 但是不支援physique動畫 會發現physique動畫在unity裡嚴重變形 因此在模型的骨骼動畫的製作上面 要用skin 當然也可以做成physique 然後用外掛程式轉換一下 3dsmax的外掛程式phytoskin 3dsmax中轉換之前 ...
Ogre3D 實現角色換裝
乙個角色由多個模型組成,這些模型掛在同乙個主節點上,由同乙個骨骼動畫控制著。換裝就是剔除或新增一些模型,如果只是刪增模型,那樣只可以實現一起平移和旋轉。因為裝備,如衣服都是要和身體一起發生形變的。所以,模型之間要統一這些發生形變的方式,那就是骨骼。分類 1.屬於掛接物體,不屬於換裝範疇,建立乙個節點...