Unity 一種靈活的武器系統實現方式


在一些ARPG類的游戲中,主角常常手里都會持有武器,使用武器對目標造成傷害,我在之前的學習過程中,看到有這樣幾類做法:

在主角的手部骨骼下面綁定一把武器,然后在主角施法時,通過自身的骨骼動畫去帶動武器的運動,這樣可以達到揮砍攻擊的效果。但是這樣也會造成一些問題,如果武器是有自身的動畫的,比如在《只狼》里面,主角的義手武器都是含有從小到大展開的動畫的,那么如果單一的將武器直接綁定在人物模型下面,會造成武器動畫在人物動畫的影響下會發生一些位置偏差,比如你綁定的是手掌的骨骼,可能最終的效果看起來像是綁定在肘部一樣(之前的某次測試結果是這樣)。並且分開去播主角動畫和武器動畫的話,也會顯得有些麻煩。
5ef972fe6678e525bcbd9f19be216b1c54ad3247.png@759w_425h_progressive.webp
直接就在3d軟件里面將武器作死在人物骨骼下面,這樣的好處是人物骨骼和武器骨骼是一體的,但壞處是不可以動態的增加武器,比如在項目初期定的是3把武器,但是在項目開發后期如果要增加武器,那么人物骨骼就要變動,這樣帶來的結果是可能所有的人物動畫都要重新一遍設置某些參數。這里針對這種情況舉出一種相對方便的解決方式,能夠在播放主角自動動畫的時候,武器的動畫也會自動播放,並且可以實時的加載武器以及卸載武器。

3dMax部分

首先需要讓你的動畫師按這樣的規格進行制作:

  • 准備一個主角模型,包含主角自身的骨骼;准備一把武器的模型,包含武器自身的骨骼(武器含有骨骼,是可以做武器變形動畫使用)
  • 如果是制作常規不含武器的動畫,比如主角走路,就按照常規做法做,不需要武器參與。也只需要用到主角自身的骨骼即可。
  • 如果是制作攻擊動畫,需要用到武器,並且武器也含有變形動畫,那么需要先將主角和武器一起拖進3d軟件中,將武器的骨骼鏈接到主角身上,然后開始制作動畫(這個動畫包含主角骨骼如何移動,武器骨骼如何移動,得到會是一個完整的主角攻擊動作+武器變形動作)。完成之后需要一起導出動畫,不要選擇模型(因為在unity里面使用humanoid,只要使用原始的skin的avatar數據就可以了),那么這個動畫就完成了。注意,最終我們將該動畫導入到unity里面去的時候,如果unity里面沒有這把武器的模型跟骨骼,不要忘了將武器的單獨的模型和骨骼也一起導入進去。

66c970ef24cfc0907c07054e35f7340965523f5d.png@551w_891h_progressive.webp
武器骨骼鏈接主角骨骼_1

000875fa79202b0604950866d5ea06a4b0e13809.png@941w_633h_progressive.webp
武器骨骼鏈接主角骨骼關系
e740c9ee74021dfcfd1b9ecc302de4d43ab9fe8f.png@932w_461h_progressive.webp
導出設置

Unity部分

這里我們將3個素材導入到unity里:主角skin模型,主角的攻擊動畫,武器的模型,導入之后我們要對主角模型進行一些設置:
首先是要將主角模型類型改為用humanoid類型的骨骼
81c603ca3ede3a331fb9650bc8e3bd892f4a5ab6.png@536w_365h_progressive.webp
主角骨骼設置
武器的骨骼不用做設置,保持為Generic就可以
971bccdeccff9115764cd14fa0b93ac630dc1934.png@536w_318h_progressive.webp
武器的模型設置
接下來對導入進來的人物攻擊動畫進行一些設置,首先將人物攻擊動畫也用humanoid類型,avatar用主角skin的
d5142254f48e6b24b8d6607b0a67818465814479.png@540w_501h_progressive.webp
Rig設置
然后在Animation一欄下面做如下設置:
48c7d804cc78b1f3e3c5e7ec3cda3450f872499f.png@551w_1422h_progressive.webp
主角攻擊動畫設置
將Mask設置為Create From this Model,然后展開下面的所有骨骼,然后選中所有的骨骼全部勾選上,然后點擊apply按鈕應用,所有導入的主角的動畫都是這樣設置。這一步的目的是將人物攻擊動畫下面的武器的骨骼開啟顯示可用。
接下來我們就可以在場景里面測試了,將主角模型skin和武器模型都拖到場景里面,然后在主角模型上面加Animator組件,創建一個AnimatorController托給主角,然后將主角的攻擊動畫拖到狀態機作為初始的動畫,接下來很重要的一步:我們先檢查一下武器的骨骼,記住它的根骨骼:
6801a3980e8c66d433b010753a8d5e2946e663d7.png@942w_552h_progressive.webp
武器模型組成
我們查看上面的“主角攻擊動畫設置”這張圖,發現武器的根骨骼在主角的骨骼Bip001 R Forearm下面:
0be8c0ffb5c882241ba3181e02c5fbecb541111c.png@548w_849h_progressive.webp
武器骨骼與主角骨骼關系
因此要想讓主角攻擊動畫播放時武器也能正常出現並播放武器動畫時,我們也需要在游戲里保持這個關系,這里為了簡單我們直接手動將武器的骨骼拖到主角對應骨骼下面去:
27b99d19a250c44d08427317463ea5cb1a183c54.png@942w_680h_progressive.webp
游戲內骨骼設置
這時候武器上面不需要做任何處理,我們運行游戲,主角的攻擊動畫播放時,就可以帶動武器的動畫播放了。
然后在實際游戲中,我們應該是需要將武器加載到主角下面的,而不是一開始就拖在場景里,因此

  • 第一步你需要用代碼將武器加載到主角模型下面,這里你可以直接在主角的模型下面設置一個Slot空物體,用來存放所有的武器
  • 第二步將武器的骨骼設置到主角對應的骨骼下面去,
  • 第三步最重要的也是坑了我好久的一步,需要調用Rebind()重新綁定一下骨骼。
comp.bone.transform.SetParent(weaponBoneTrans,false);//設置武器骨骼到主角某個骨骼下面
hero.GetBody().Animator.Rebind();//重新綁定一次 作者:LemonInCup https://www.bilibili.com/read/cv13830327?spm_id_from=333.999.0.0 出處:bilibili


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM