天天看點

動作手遊技術漫談-角色的狀态和行為

遊戲中的角色通常都會有站立,跑動,攻擊,受擊等狀态。學過計算機的人都知道有限狀态機FSM這個神器,它廣泛應用于硬體控制電路設計和軟體開發中。是的,每個角色都應該有一個狀态機,狀态機定義了角色可能出現的狀态和這些狀态互相轉換的條件。例如跑動狀态可以切換到攻擊或受擊狀态,但是受擊狀态不可以立刻切換到攻擊狀态。

一個動作遊戲的角色應該有多少個狀态呢?站立,跑動,攻擊,受擊,跳躍,受擊浮空,空中受擊,倒地,死亡。好像差不多了吧。當你真正開始開發的時候,問題來了:怪物在沒有發現玩家的時候需要在場景中走來走去巡邏,發現玩家後需要追逐玩家,那麼巡邏和追逐也是狀态嗎?是的,從國文上來說這是角色的狀态,但是巡邏和追逐貌似也是跑動啊?有些遊戲的設計者确實把追逐作為一種狀态來處理,叫做MoveToTarget之類的,看起來也挺有道理的,這是一種特殊的跑動狀态–向着目标跑動,它可以實作需要的功能,隻不過在很多地方要判斷是否是跑動的時候需要同時判斷是否是跑動或者追逐。我覺得這不是一個好的設計思路,巡邏和追逐應該是比狀态更高一級的東西:角色的行為。

如何區分狀态和行為?一般來說,狀态有唯一性,并且有動作與之對應,站立有站立動畫,攻擊有攻擊動畫,角色隻能處于一個狀态中;而行為是一種AI層面的東西,它可以對應到一個狀态序列。例如巡邏是一個行為,它可以包含站立->向左走->站立->向右走。一個動作遊戲的角色應該有多少行為呢?這個就太多了,取決于遊戲AI的複雜程度。那麼如何來處理這些行為呢?繼續使用神器狀态機是可行的,但是有限狀态機其實是維護了一張圖,圖的節點是一個個的狀态,節點和節點的連線是狀态間根據一定的規則做的狀态轉換,當狀态數量很多時,狀态轉換的規則也就會變得複雜和難以維護。處理行為,我們有更好的工具:行為樹(Behavior Tree)。行為樹,是一顆多叉樹,從資料結構上來說樹就比圖簡單很多。關于行為樹網上有很多資料,這裡我隻想推薦u3d一個很好用的行為樹插件Behavior Designer,用過這個插件,你基本上也就掌握行為樹了,你遊戲的AI也會變得很富有樂趣。

除了上面說的狀态和行為,角色還有另一種狀态:暈眩,冰凍,中毒,狂暴等。這是另外一套狀态體系,我們就叫效果狀态吧。效果狀态和角色的狀态的本質差別是效果是可以疊加的,角色可以同時擁有多個效果狀态。是以效果狀态不能用狀态機,而是作為一種屬性附加到角色身上即可。

繼續閱讀