Spine應用--使用Spine動畫制作動作游戲


在前面的文章中,已經陸陸續續的講解了一些使用Spine動畫的細節,有了這些細節,我們已經滿足了在unity中使用Spine動畫制作動作游戲的技術基礎。

那么,要使用Spine動畫在unity中制作一款動作游戲,究竟還有哪些是需要注意的呢?

 

1. 主角的控制系統

  主角的控制,主要分為以下三個部分:

  1. 輸入檢測 &&輸入數據加工
  2. 接受輸入數據,改變主角的位置
  3. 根據輸入數據 && 當前狀態,播放對應的Spine動畫。

  輸入檢測,這個根據不同的游戲輸入方式,有不同的處理,輸入的加工,也因游戲而不同,這里不做過多的說明。

 

  至於改變主角的位置,這里使用 Unity自帶的控制器:Character Controller。Character Controller會在主角的身上掛上一個 膠囊碰撞體,用這個膠囊碰撞體來檢測物理碰撞,這個Controller除了提供移動主角API外,還處理了

  許多的邏輯,比如主角可以上坡的角度,主角是否碰撞到了地面等問題。

 

  播放動畫組件,這里需要考慮的是Spine各個動畫之間轉換的動畫融合問題,比如從走到跑,這樣的過程需要一個漸進的過程,也就是動畫融合了。

 

  這里尤其需要注意的是,因為我們使用了Character Controller來控制 主角的移動,那么,在Spine動畫里面,一定不能有位移,不然的話,這樣就會出現一個問題,那就是明明看着主角已經走過去了,

  但實際上這個人的碰撞體根本沒動!如下圖:

  

2.傷害檢測系統

  動作游戲,當然要有傷害檢測了,這里的傷害檢測,我們使用Unity的物理碰撞檢測來做。從1中我們已經知道,Spine動畫不能有位移,但是在一些酷炫的技能中,

主角難免會有些微的位移,但是因為Character Controller其實是不會隨着Spine動畫的移動而移動的(其實可以看成這樣,Character Controller 在父層級,而Spine動畫播放時,移動的是Character Controller的子層級),

但是問題是我們又要實實在在的讓碰撞檢測跟着 Spine動畫走(比如A拿大刀砍怪物,那肯定是刀看到怪物算是傷害成功),那么到底該如何辦呢?

  解決方案很簡單,我們不使用 Character Controller的膠囊碰撞體來做傷害檢測,我們額外的添加碰撞體來做傷害檢測。至於怎么添加可以跟隨Spine動畫移動的碰撞體,請看我的Spine學習系列文章,里面有提到。

   在骨骼上綁定Collider 2D 和 Rigidbody 2D,因為骨骼是靠Spine動作來驅動,並且我們並不想使用物理引擎來控制人物的移動,所以呢,骨骼上的Rigidbody 2D的類型,選擇為:Kinematic。

  然后喃,我們在碰撞的時候,顯然刀子什么的是可以穿透身體,那么最好 Collider 2D也勾選上 Is Trigger屬性。具體設置如下:

  

  這樣的設置以后,該物體就可以碰撞到 任意勾選了 Is Trigger的物體了,並且會觸發 OnTriggerxxx函數。

  同時,在該物體上添加適合的 Tag,就可以通過Tag區分到底是什么物體與自己產生了碰撞。

3.總結

  當然,制作動作游戲可不是像我說的那樣,只要解決了上面兩個問題就可以了,具體的制作還有許許多多的細節問題,也有可能需要新的 人物控制,上面的兩個方面也只是為制作動作游戲搭好了一個前提。

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2018.6.6更新

  在今天的實驗中,又發現了一些問題,下面一一補充講解。

  1.關於碰撞檢測的更新

   首先,一個人物,假設有很多部位需要做碰撞檢測,但是這個人物自身不做相互碰撞,那么,可以在這個人物的最上一層掛上一個 Rigidbody 2D,然后在需要碰撞檢測的其他部位,掛載對應的Collider 2D即可,不需要一個Collider 2D對應一個Rigidbody 2D.

  其次,在Rigidbody 2D的設置上,如果設置 Rigidbody 2D Type 為 Kinematic,那么,除卻Dynamic類型外的Rigidbody ,其他類型的均不會與該物體產生碰撞檢測!要想可以碰撞檢測,就需要勾選上 Use Full Kinematic Contacts選項。

  最后,關於檢測方法,一定是 OnXXX2D,不然是不會被觸發的哦!


免責聲明!

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



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