日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > ChatGpt >内容正文

ChatGpt

使用行动列表去创造简单且可扩展的游戏AI

發(fā)布時(shí)間:2024/8/26 ChatGpt 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用行动列表去创造简单且可扩展的游戏AI 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作為人類(lèi),我們似乎總傾向于使用自己所熟悉的解決方法。我們總是會(huì)按照我們所知道的方式去做某些事,而不是按照做這些事的“最佳”方式。因?yàn)榭偸菐е@種想法,所以我們很容易使用一些過(guò)時(shí)的技術(shù),并使用那些同時(shí)代人所不理解,或者并不是那么有效的方式去執(zhí)行特定功能。所以我希望通過(guò)本文以及之后的文章向廣大讀者們介紹更多能夠在編程中帶給你們幫助的解決方法。今天我要分享的便是行動(dòng)列表!

行動(dòng)列表是所有游戲開(kāi)發(fā)者都必須清楚的簡(jiǎn)單但卻強(qiáng)大的AI。盡管不能與巨大的AI網(wǎng)絡(luò)相匹敵,但是它們?cè)试S相對(duì)復(fù)雜的突發(fā)行為,并且執(zhí)行起來(lái)也很簡(jiǎn)單。不管你是剛剛接觸AI編程還是著眼于擴(kuò)展工具包的資深開(kāi)發(fā)者,本文都將向你詳細(xì)介紹行動(dòng)列表并提供一些有效的例子幫助你更好地執(zhí)行解決方法。讓我們開(kāi)始吧。

從前

幾年前我開(kāi)始開(kāi)發(fā)《King Randall’s Party》,在游戲中玩家將建造城堡并為了保衛(wèi)它與嘗試著摧毀它的King戰(zhàn)斗。我需要?jiǎng)?chuàng)造一個(gè)能夠瞄準(zhǔn)玩家城堡并計(jì)劃如何去摧毀它以達(dá)到自己目的的機(jī)智的AI。這對(duì)我來(lái)說(shuō)是個(gè)巨大的挑戰(zhàn),因?yàn)槟繕?biāo)太大我很難同時(shí)顧及全面。所以就像任何其他優(yōu)秀的程序員那樣,我將其分解成一個(gè)比較容易管理的問(wèn)題集。這時(shí)候我所面臨的第一個(gè)挑戰(zhàn)便是:我需要?jiǎng)?chuàng)造一個(gè)擁有特定行為集的單位。
?

?


而快速的網(wǎng)絡(luò)搜索讓我的精神差點(diǎn)崩潰。只要搜索“游戲AI”便會(huì)出現(xiàn)有關(guān)策劃者,有限狀態(tài)機(jī),指導(dǎo)行為,向?qū)У鹊冉Y(jié)果。我根本不知道該從哪里開(kāi)始,所以我只能做任何理性的人會(huì)做的事。對(duì)的,我詢問(wèn)了我們家的狗。當(dāng)然了,對(duì)于我來(lái)說(shuō)這并不是什么新鮮事了。不管什么時(shí)候當(dāng)我遭遇技術(shù)問(wèn)題時(shí)我都會(huì)去詢問(wèn)我們家的狗。這時(shí)候你可能會(huì)想:“Jesse,你太瘋狂了吧。狗怎么可能了解計(jì)算機(jī)?!”好吧,讓我們先不要管這個(gè)。也許這里包含或并未包含某種非法技術(shù)或者出現(xiàn)在大學(xué)審計(jì)課堂中的內(nèi)容。

不管怎樣我會(huì)說(shuō):“好吧Frankie,我知道對(duì)于AI我們有許多事要做,但是我并不清楚該從哪里開(kāi)始。我該如何為我的游戲單位創(chuàng)造一個(gè)AI框架?”Frankie的表情讓我覺(jué)得自己就是個(gè)愚蠢的人,盡管我的高中老師Francis先生已經(jīng)告訴我不要提出任何愚蠢的問(wèn)題。我非??隙‵rankie并未想到Francis先生。她反問(wèn)我:“Jesse,通常你是如何開(kāi)始你的一天的?”

我會(huì)把我一天需要做的所有事列下來(lái)然后根據(jù)這些任務(wù)的重要性以及所需時(shí)間對(duì)其進(jìn)行排序。我這么回答Frankie然后她說(shuō)道:“這便是行動(dòng)列表?!彼嬖V我行動(dòng)列表是關(guān)于你的游戲單位在特定時(shí)間內(nèi)運(yùn)行的任務(wù)或行為列表。這是一種有限狀態(tài)系統(tǒng)形式,并且能夠被描述為是帶有一個(gè)分支的簡(jiǎn)單行為樹(shù)。以下便是關(guān)于它們是如何運(yùn)行的。

行動(dòng)列表如何運(yùn)行

首先你將寫(xiě)下你希望你的AI所擁有的所有行為。
?

?


然后你需要對(duì)它們進(jìn)行先后排序。從最低到最高。
?


現(xiàn)在我們需要迭代該列表去檢查每個(gè)行動(dòng)是否能夠有效執(zhí)行。然后我們將檢查行動(dòng)的粘附性能,如果某個(gè)項(xiàng)目會(huì)阻礙之后的行動(dòng),我們便會(huì)退出該列表。之后我們便會(huì)清楚為什么這種阻礙如此重要了。

在我們的例子中,我們的第一個(gè)行動(dòng)“攻擊玩家”將只在AI靠近玩家的時(shí)候執(zhí)行。買(mǎi)手機(jī)游戲讓我們假設(shè)它并未靠近玩家,所以它將檢查是否能在當(dāng)前位置上創(chuàng)造一個(gè)階梯等,直至它找到一個(gè)能夠執(zhí)行的行動(dòng)條款,如打破門(mén)。然后它將執(zhí)行破門(mén)代碼。


“阻礙”便是在這里開(kāi)始發(fā)揮作用。如果破門(mén)馬上發(fā)生,它便不會(huì)阻礙到任何之后的行動(dòng),而之后的列表內(nèi)容便可以繼續(xù)執(zhí)行。但通常情況都不會(huì)如此—-行動(dòng)總是占據(jù)一個(gè)以上的幀數(shù)。所以在這種情況下破門(mén)行動(dòng)項(xiàng)目將調(diào)用unit.Attack(door),即將單位的當(dāng)前狀態(tài)從等待改成破門(mén),而在門(mén)被打破之前將恢復(fù)到true的狀態(tài)。

一個(gè)簡(jiǎn)單的有限狀態(tài)機(jī)

這聽(tīng)起來(lái)好像是可行的。Frankie提供了一個(gè)很好的建議,行動(dòng)列表似乎也非常適合我的項(xiàng)目。但在此之前我卻從未聽(tīng)過(guò)它們,所以我對(duì)此還是充滿疑問(wèn)—-我聽(tīng)到的大多數(shù)關(guān)于AI的內(nèi)容都必須使用基于轉(zhuǎn)變的有限狀態(tài)機(jī),即類(lèi)似于在MUnity3D用于創(chuàng)造動(dòng)畫(huà)所使用的工具。你將定義一些狀態(tài)并識(shí)別它們何時(shí)以及如何彼此轉(zhuǎn)變。Frankie向我我解釋了當(dāng)你在創(chuàng)造一個(gè)基于轉(zhuǎn)變的有限狀態(tài)機(jī)時(shí),你需要定義你想要擁有的所有狀態(tài),然后你也要定義這些個(gè)體狀態(tài)間的所有轉(zhuǎn)變。這真的會(huì)讓內(nèi)容很快變得復(fù)雜。如果你擁有一個(gè)“傷害”的狀態(tài),你便需要識(shí)別其它能夠轉(zhuǎn)變成這個(gè)狀態(tài)的狀態(tài)。如走路變成傷害,跳躍變成傷害,蹲伏變成傷害,攻擊變成傷害等等。這是很有用的方法,但卻很快便會(huì)變得復(fù)雜。如果你的AI需求非常簡(jiǎn)單的話,這可能會(huì)是一筆潛在的不必要開(kāi)支。

關(guān)于基于轉(zhuǎn)變的狀態(tài)機(jī)的另一個(gè)難點(diǎn)便是調(diào)試。當(dāng)你設(shè)置了一個(gè)停止點(diǎn)并著眼于AI當(dāng)前的狀態(tài),這時(shí)候如果沒(méi)有額外的調(diào)試代碼,你便不可能了解AI是如何進(jìn)入當(dāng)前的狀態(tài),它之前的狀態(tài)是什么以及怎樣的轉(zhuǎn)變將它帶到現(xiàn)在的狀態(tài)。

行動(dòng)列表的缺陷

當(dāng)我進(jìn)一步深入行動(dòng)列表時(shí),我意識(shí)到它們非常適合我的執(zhí)行內(nèi)容,但同時(shí)我也發(fā)現(xiàn)它們存在一些缺陷。最大的缺陷便源自其最大的優(yōu)點(diǎn)—-簡(jiǎn)單性。因?yàn)檫@是一個(gè)有序列表,所以我不可能擁有任何復(fù)雜的優(yōu)先順序結(jié)構(gòu)。所以如果我希望“攻擊玩家”排在“破門(mén)”前面,但卻在“移向目標(biāo)”后面,但同時(shí)我又希望“移向目標(biāo)”出現(xiàn)在“破門(mén)”后面,我便很難使用行動(dòng)列表做到這點(diǎn),而用有限狀態(tài)機(jī)的話又會(huì)非常繁瑣。

總而言之,行動(dòng)列表對(duì)于簡(jiǎn)單的AI系統(tǒng)真的很有幫助,但是如果你想創(chuàng)建的是較為復(fù)雜的AI,那么執(zhí)行行動(dòng)列表便會(huì)較困難。也就是說(shuō)你可以通過(guò)某些方法去擴(kuò)展行動(dòng)列表概念而將它們變得更有幫助。

擴(kuò)展這一概念的方法

我的一些AI單位需要完成多種任務(wù)—-它們可能需要同時(shí)移動(dòng)并發(fā)動(dòng)攻擊。我可以創(chuàng)造多個(gè)行動(dòng)列表(注:一個(gè)處理移動(dòng),一個(gè)處理攻擊),但這么做也存在問(wèn)題,即如果有些移動(dòng)類(lèi)型會(huì)妨礙攻擊,而有些攻擊又需要單位站在原地的話該怎么辦?這時(shí)候行動(dòng)線路(Action Lanes)便會(huì)發(fā)揮作用。

行動(dòng)線路是對(duì)于“阻礙”概念的擴(kuò)展?;谛袆?dòng)線路,行動(dòng)項(xiàng)目便能夠識(shí)別阻礙執(zhí)行的特定行動(dòng)項(xiàng)目類(lèi)型并允許其它項(xiàng)目順暢地執(zhí)行任務(wù)。讓我們進(jìn)一步展示這一執(zhí)行。

行動(dòng)線路只是決定行動(dòng)的一種附加方法。每個(gè)行動(dòng)項(xiàng)目都屬于一條或多條線路,當(dāng)阻礙性能變成true時(shí),它將添加所屬的線路,因?yàn)槊總€(gè)行動(dòng)都擁有一條或多條線路,所以它們只是阻礙其它屬于這些線路的行動(dòng)。舉個(gè)例子來(lái)說(shuō)吧,因?yàn)閱挝辉趧?chuàng)造階梯時(shí)必須保持不動(dòng)且不能發(fā)動(dòng)攻擊,所以攻擊玩家屬于行動(dòng)線路,移向目標(biāo)屬于移動(dòng)線路,創(chuàng)造截圖同時(shí)屬于這兩種線路。然后我們將排列這些項(xiàng)目的順序,如果它們同時(shí)執(zhí)行便會(huì)阻礙到后續(xù)的行動(dòng)。



執(zhí)行案例

現(xiàn)在我們已經(jīng)了解了這一理論,所以我們可以嘗試一次真正的執(zhí)行過(guò)程。首先讓我們?cè)O(shè)置行動(dòng)列表和行動(dòng)項(xiàng)目。對(duì)于行動(dòng)項(xiàng)目我希望能夠分離執(zhí)行,所以讓我們創(chuàng)造一個(gè)接口。
?


以下便是BreakDoor行動(dòng)項(xiàng)目的IActionItem執(zhí)行:
?


對(duì)于行動(dòng)列表本身我可以使用一個(gè)簡(jiǎn)單的列表。然后我們將使用IActionItems去加載它。
?

?


之后我們將設(shè)置一個(gè)方法并在每幀中迭代列表。需要記得我們同樣也需要處理阻礙。
?


如果你想要使用行動(dòng)線路的話事情會(huì)變得更復(fù)雜。這時(shí)候我們將把行動(dòng)線路定義為位字段然后修改IActionItem界面。
?


然后我們將為這些線路修改迭代程序。如果行動(dòng)項(xiàng)目的線路遭遇阻礙,它們便會(huì)被略過(guò),但檢查的時(shí)候仍是正常的。如果所有線路都遭到阻礙,我們便會(huì)改變這一循環(huán)。
?


結(jié)論

可以看出需要理解的內(nèi)容有很多。Frankie讓我總結(jié)從中學(xué)到的內(nèi)容,于是我經(jīng)過(guò)綜合思考得出了一些關(guān)鍵要點(diǎn)。

行動(dòng)列表比小型基于轉(zhuǎn)變的狀態(tài)系統(tǒng)更容易創(chuàng)建與維護(hù)。

它們創(chuàng)造了一個(gè)可識(shí)別的優(yōu)先系統(tǒng)。

存在一些擴(kuò)展方法去處理擴(kuò)展功能。

在編程中我們很難找到最佳解決方法。所以我們必須確保我們的工具箱中擁有各種編程工具,如此我們便可以及時(shí)選擇一個(gè)能夠有效解決問(wèn)題的合適工具。最終證明行動(dòng)列表非常適合《King Randall’s Party》。而它是否也同樣適合你們的項(xiàng)目呢?

總結(jié)

以上是生活随笔為你收集整理的使用行动列表去创造简单且可扩展的游戏AI的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。