cocos creator中使用行爲樹(BehaviorTree) 四

cocos creator中使用行爲樹(BehaviorTree) 四

繼續完善我們的monsterAI

現在我們已經實現的功能是 監視玩家的位置, 一旦有玩家靠近, monster就會發出警告並攻擊, 現在我們在給monster加上巡邏的功能

打開cocos creator, 點擊monster結點, 在屬性檢查器中找到Behavior腳本, 點擊編輯, 這個時候在可視化插件可能中並沒有我們已經畫好的樹, 不用擔心, 點擊下方的loadDataFromComp按鈕, 把我們以前編輯好的行爲樹加載出來

因爲現在有多個結點, 那麼我們就要考慮結點的排序了

這一顆樹的執行順序是先找到root, 在按順序執行他的子結點(子節點在上面的先執行, 當前樹就是先執行Look結點)

現在我們要的功能是, monster在一定範圍內巡邏, 同時監視一定範圍的玩家, 如果發現了玩家, 停止巡邏, 接着進行攻擊, 且當玩家離開監視範圍, 停止攻擊,  繼續巡邏.

即, 巡邏和監視要併發, 而攻擊則需要先觸發監視, 畫圖

這個圖花的挺艱辛的, 因爲沒找到select類型的結點, 找了幾分鐘, 還是讀b3core.0.1.0module腳本是才找到這個priority結點

這個結點意思是優先, 即按順序找到一個success結點就返回SUCCESS, 下面的結點就不執行了. 

所以這個圖的意思就是, 先進入Look葉子結點, 判斷敵人是否進入了監視返回, 沒有就返回FAILED, 那麼Sequence結點也返回FAILED, 因爲返回的是失敗, 那麼繼續執行Patrol結點, 開始巡邏.

當玩家進入監視範圍時, Look結點返回SUCCESS, 那麼可以執行Attack結點, Sequence返回的也是SUCCESS, 這個時候patrol結點就不會執行, 因爲已經找到一個SUCCESS結點了,

花完之後, 點擊Patrol結點, 我們給他加上一個屬性areaSize 值爲200

 

還有一個點, 當我們畫完圖時, 點擊saveAsBehaviorTree按鈕時

會重新生成BehaviorTree腳本, 所以我們的dt要重新加上(蛋疼), 等我之後想一個辦法改一下

加上Patrol結點後, 我們要新建一個腳本, 名字是Patrol, 加上這5個默認的方法


const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {


    speed = 100;
    moveSize = 0;
    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {

    }

    enter (tick,b3,treeNode){
        
    }

    open (tick,b3,treeNode){
        
    }
    /**
     * 
     * @param tick 
     * @param b3 
     * @param treeNode 
     */
    tick (tick,b3,treeNode){
        let areaSize = treeNode.parameter.areaSize;
        let dt = tick.dt;
        this.node.x += dt * this.speed;
        this.moveSize += Math.abs(dt * this.speed)
        if(this.moveSize >= areaSize) {
            this.moveSize = 0;
            this.speed = -this.speed;
        }
        return b3.SUCCESS;
        
    }

    close (tick,b3,treeNode){
        
    }

    exit (tick,b3,treeNode){
        
    }

    // update (dt) {}
}

然後把這個腳本掛在monster結點上, 運行一下看看, (因爲代碼都很簡單, 就不講了)

 

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