Unity3D 3D角色換裝 Advance

2021-06-19 07:51:39 字數 2203 閱讀 1459

1、如果角色只是單純的更換裝備 也就是說 角色的整個身體是乙個完整的網格 而所需要更換的各個部件只是裝備 而不是身體的某一部分 比如ngui中character的例子 穿裝備之前 角色只有預設的身體 穿了裝備以後 身體不變 只是在特

定的位置顯示裝備 如下圖

穿裝備以前穿裝備以後

這樣做的好處是實現起來很簡單 就是在特定的骨骼下顯示乙個不含有蒙皮資訊的裝備模型

更換的時候去通知特定功能的**去刪掉或隱藏之前的 再顯示新的即可

不好的地方是 1 實現不了身體部件的更換 當然這不一定是不足 要視遊戲的設計本身而論

2 穿上裝備 實際上就是多增加了乙份模型 那麼所需要渲染的面數會增加  drawcall也會增加

如果遊戲中模型的面數以及drawcall控制的很好 並且不存在除角色以外的其他玩家換裝的話 並且遊戲本身設計時也不需要身體部件更換的話

那這樣做應該會是個值得考慮的方案

2、大部分網路遊戲都會選擇將身體的各個部件拆開 各個部件由身體部分和裝備部分共同組成乙個完整的模型 因此更換部件其實也就是更換裝備

unity實現就如同上文中所講 **可參考官方charactercustomization例子

在遊戲中 關心的不僅是裝備有沒有更換 更關心更換的好不好 會不會留有隱患

官方的這個例子只是演示了換裝的原理 但是開啟profile的memory一欄 會看到在更換裝備的時候 記憶體占用在不斷的增加

這樣無厘頭的記憶體占用會帶來嚴重的後果 尤其是網路遊戲這種換裝頻率高的遊戲方式 尤其對於移動平台的網路遊戲 尤其對於移動平台的3d網路遊戲

優化問題牽扯到記憶體優化 資源優化 渲染優化 **優化等多方面 待後文中再逐一討論

官方換裝中的記憶體問題 是因為裝備被替換掉以後 沒有從記憶體中清除 不斷的更換就會在記憶體中不斷的累加

相關問題在unity聖殿中有文章詳細解釋

裝備中除**以外 其他的部分都可以用同一種方式去更換 當然**也可以 同樣要視遊戲本身而論

如果遊戲中在安全區需要**背在背上 而在非安全區拿在手上 同時有角色的「亮出**」這樣的過度動作配合 那麼乙個角色身上裝備兩把**絕對是不二之選一把在手上 一把在背上 控制其中之一顯示即可 那麼在更換**的時候則需要將這兩把**全部更新

如果只是一把** 在不同的狀態掛在不同的位置的話 那麼unity實現中乙個很好的辦法就是單純的把**模型放到相應的骨骼下 成為該骨骼的sub node

身體各部件都需要能夠支援動態的更換 按照官方的例子 實際上更換每乙個部件 就等同於重新合併了一遍網格 只是這次合併是用新裝備的模型和其他部件的模型

當然如果選擇不合併網格 那麼也就是說 每個裝備的部件都有乙個skinnedmeshrenderer元件來與骨骼進行關聯 等同於計算量會翻倍

合併網格的換裝**參考官方例項  不合併網格的換裝核心**如下 即從當前角色的骨骼中取到該模型所關聯的骨骼 然後建立關聯即可

1

public

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.屬於掛接物體,不屬於換裝範疇,建立乙個節點...