最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Cocos creator主程入門教程——有限狀態(tài)機(jī)和行為樹

2021-11-18 18:31 作者:unity小能手  | 我要投稿

本篇介紹有限狀態(tài)機(jī)和行為樹。有限狀態(tài)機(jī)用于有限的狀態(tài)下的AI,由于同時(shí)只能處于一個(gè)狀態(tài),多個(gè)狀態(tài)需要多個(gè)有限狀態(tài)機(jī),一般用于簡單的AI行為。行為樹是基于固定行為,通過遍歷樹來決定采用哪種行為。行為的設(shè)計(jì)和執(zhí)行采用解釋器模式,由策劃設(shè)計(jì)數(shù)據(jù),程序解析執(zhí)行,行為組合的靈活性高,比較適合劇情NPC。但當(dāng)樹比較深、分支比較多時(shí),遍歷的效率就需要考慮優(yōu)化。一般我們認(rèn)為有限狀態(tài)機(jī)執(zhí)行的性能優(yōu)于行為樹,但不能勝任復(fù)雜、靈活的AI設(shè)計(jì)。而行為樹則比較適合復(fù)雜、靈活的AI設(shè)計(jì)。

先介紹下有限狀態(tài)機(jī)??紤]在一個(gè)類似《刀塔傳奇》的橫版動(dòng)作卡牌游戲的戰(zhàn)斗里,每個(gè)英雄有出場、站立、走位、受擊、吟唱、施法等狀態(tài)。英雄每時(shí)每刻只能處在這些狀態(tài)中其中一個(gè)狀態(tài),每個(gè)狀態(tài)都有自己的邏輯,狀態(tài)的改變都由事件驅(qū)動(dòng)。像這樣簡單的AI,可以使用有限狀態(tài)機(jī)來實(shí)現(xiàn)。

有限狀態(tài)機(jī)包括幾個(gè)要素:

1.狀態(tài),狀態(tài)機(jī)同時(shí)只能處于一個(gè)狀態(tài),在指定狀態(tài)下有相應(yīng)的邏輯,例如行走狀態(tài),播放行走動(dòng)畫,每幀修改英雄的x、y值

2.事件,事件是狀態(tài)轉(zhuǎn)變的觸發(fā)器,包括內(nèi)部事件和外部事件。例如最近的敵人達(dá)到攻擊距離,觸發(fā)從行走狀態(tài)轉(zhuǎn)變?yōu)檎玖顟B(tài)。CD時(shí)間到達(dá),觸發(fā)從站立狀態(tài)轉(zhuǎn)變?yōu)槭┓顟B(tài)

3.狀態(tài)轉(zhuǎn)變,狀態(tài)間可以相互轉(zhuǎn)變,轉(zhuǎn)變過程有對應(yīng)的邏輯。例如從行走狀態(tài)轉(zhuǎn)變?yōu)檎玖顟B(tài),播放站立動(dòng)作。

現(xiàn)在來介紹下行為樹。在RPG游戲中,地圖上存在一些劇情NPC,不同的劇情下,NPC的行為會不一樣。這些NPC的行為可以通過行為樹進(jìn)行管理。行為樹是在固有行為集下,進(jìn)行行為抉擇的AI算法。行為樹包括數(shù)據(jù)解析、邏輯控制、行為執(zhí)行三部分。

行為樹數(shù)據(jù)由節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)有對應(yīng)的行為類型、參數(shù)、返回值。節(jié)點(diǎn)有一個(gè)子節(jié)點(diǎn)數(shù)組,通過這種方式將節(jié)點(diǎn)組織成樹狀。

export class BehaviorNode {

private type: number = 0;

private params: any = null;

private retVal: any = null;

private subBehaviors: Array<BehaviorNode> = [];

}

邏輯控制節(jié)點(diǎn)都有子節(jié)點(diǎn),邏輯控制指的是跟編程類似的if條件判斷、while循環(huán)、串行執(zhí)行、并行執(zhí)行等。if行為如果返回true,執(zhí)行子節(jié)點(diǎn)行為,子行為結(jié)束則整體行為結(jié)束。while行為如果返回true,執(zhí)行子節(jié)點(diǎn)行為,如果子節(jié)點(diǎn)結(jié)束,重置子節(jié)點(diǎn)重新執(zhí)行。串行行為,子節(jié)點(diǎn)一條一條的依次執(zhí)行,子節(jié)點(diǎn)結(jié)束則整體結(jié)束。并行行為,子節(jié)點(diǎn)同時(shí)執(zhí)行,子節(jié)點(diǎn)結(jié)束則整體結(jié)束。

行為樹的葉節(jié)點(diǎn)是實(shí)際行為執(zhí)行的節(jié)點(diǎn),在開發(fā)一款RPG游戲時(shí),需要根據(jù)劇情需要,提煉出角色的細(xì)粒行為,例如行走、對話、播放表情、切換動(dòng)畫、觸發(fā)戰(zhàn)斗等。一般地,RPG都會開發(fā)一個(gè)對應(yīng)的劇情編輯器,對地圖上的NPC進(jìn)行行為設(shè)定,導(dǎo)出對應(yīng)行為的參數(shù)。游戲加載這些數(shù)據(jù),解析生成行為樹,NPC每幀執(zhí)行行為樹,葉節(jié)點(diǎn)行為有對應(yīng)的執(zhí)行方法,方法的參數(shù)為行為節(jié)點(diǎn)的參數(shù)。

private _parseWalkData(): BehaviorNode {

// TODO 二進(jìn)制數(shù)據(jù)解析為json

}

public execBehavior(b: BehaviorNode): void {

if (!b) {

return;

}

switch(b.type) {

case BehaviorType.WALK:

this.execWalk(b);

break;

}

}

private _execWalk(b: BehaviorNode): void {

let actorId = b.params.id;

let destGridX = b.params.destGridX;

let destGridY = b.params.destGridY;

let actor = map.getActor(actorId);

let curGridX = actor.gridX;

let curGridY = actor.gridY;

let loadGrids = AStar.findLoad(curGridX, curGridY, destGridX, destGridY);

actor.setLoad(loadGrids);

}

一般地,游戲地圖中的物件都可以掛載行為樹,地圖本身、角色、地圖物品等,將一個(gè)劇情的復(fù)雜行為,分拆到每一個(gè)地圖物件上,通過劇情任務(wù)作為條件區(qū)分觸發(fā),簡化行為的組織。程序員只負(fù)責(zé)將策劃的設(shè)定提取出細(xì)粒行為,編寫對應(yīng)的數(shù)據(jù)解析和執(zhí)行方法,由策劃使用編輯器編輯數(shù)據(jù),由數(shù)據(jù)驅(qū)動(dòng)劇情的推進(jìn)。、

更多資源請點(diǎn)擊以下鏈接:

https://bycwedu.vipwan.cn/promotion_channels/630597732


Cocos creator主程入門教程——有限狀態(tài)機(jī)和行為樹的評論 (共 條)

分享到微博請遵守國家法律
德兴市| 临沂市| 香格里拉县| 曲阜市| 镇巴县| 贵港市| 广德县| 聂拉木县| 肃宁县| 张掖市| 沽源县| 明星| 九龙县| 西贡区| 宜昌市| 涿州市| 禹州市| 铅山县| 杭锦后旗| 扎兰屯市| 旌德县| 德州市| 周至县| 都安| 晋州市| 务川| 灵山县| 宽甸| 离岛区| 温州市| 承德市| 镶黄旗| 大连市| 南宫市| 德钦县| 博野县| 平乐县| 淮安市| 鹤庆县| 芜湖市| 博乐市|