行爲樹學習(之一)

        首先可以看看這篇文章,這裏面詳細介紹了關於BehaviourTree中的各個節點的詳細意義。這裏還有一篇文章,是官方文檔的翻譯,也可以學習一下,不過這裏面有一個很關鍵的點沒有說清楚,就是關於共享變量的設置,具體可以看看這篇文章,裏面有詳細的設置過程。這算是一個坑吧。具體步驟我也貼出來了,如下圖所示:

如下圖所示:

我要共享的變量是SharedTransform,所以選擇Transform類型,下面的target後面缺少的對象,直接把行爲樹鎖綁定的gameObject拖進去就可以了。然後在需要用到該共享變量的節點上,把創建的這個GlobalValues賦值進去就可以了。

可以了。

  • Sequence的中斷類型

     sequence的中斷類型有3中,self,low priority和both。我使用的行爲樹如圖:

行爲樹如圖:

withinsight在探測到指定對象後,返回success,否則返回failure。如果返回success,那麼會執行wait等待一定的時間,否則會直接跳出,執行右側的wait。這是正常的邏輯流程。

        1)low priority

       當sequence設置爲low priority後,如果withinsight返回failure,那麼就會跳出sequence,然後執行其右邊的wait。此時,withinsight的判斷改成了success(比如我移動了指定對象,使其出現在視野內部),那麼之前一直在執行的右側的wait會中斷,然後會改成執行sequence的wait子節點一言以蔽之,low priority會在高優先級的條件判斷成功後(之前是失敗的,所以l低優先級節點在執行),中斷低優先級的操作,改爲執行高優先級的操作。注意:優先級是和該sequence同級的節點的操作或者其子節點的操作

         2)self

        如果withinsight返回success探測到了對象,那麼左邊的wait就會進入執行狀態,此時會等待wait執行完畢,然後再執行右側的wait,這是正常邏輯。此時,若是在左側wait執行過程中,條件發生了改變(變成了failure),那麼正在執行的左側wait會立刻中斷,改爲執行右側的wait總結起來就是,self會在條件由success轉爲failure後,中斷其後的操作,改爲執行低優先級節點,注意:這裏的優先級是和條件節點同級的節點

總結:self和low priority,一個是在執行自身(sequence節點)的時候,中斷自身的操作(和條件節點同級的操作),執行後面的節點(比條件節點的父節點低級的節點,就是比sequence低級的節點)。一個是在執行後面的節點時,中斷其執行,改爲執行自身的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章