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

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

【教程】Unity行為樹插件behaviour trees制作敵人AI

2022-11-24 17:05 作者:楓2  | 我要投稿


這里是楓2,最近比較忙,先做個圖文版,空了來做個視頻版…………

看這個教程前首先大家要知道unity的行為樹插件behaviour tree,如果不知道可以搜索,這方面的教程很多,我就不做了,總之就是一個可視化無代碼做敵人AI的插件

教程的功能需要買兩個內(nèi)容,第一個是behaviour主插件,第二個是MovementPack,建議大家打折購買

打折價格一覽


AI邏輯

我要設(shè)計個AI,邏輯是這樣的,當(dāng)敵人發(fā)現(xiàn)范圍內(nèi)的player,就會靠近player,在靠近player足夠近的時候,會攻擊玩家,當(dāng)玩家遠(yuǎn)離敵人的時候會拉脫戰(zhàn)

我們就一步步來完善這個AI邏輯

掛上腳本

首先我們要在敵人身上掛上腳本,其中包含兩個腳本

如果你找不到這個那肯定是沒有裝插件
導(dǎo)航插件腳本,如果不會可以看看教程
設(shè)置導(dǎo)航區(qū)域

設(shè)置導(dǎo)航區(qū)域

關(guān)于導(dǎo)航的內(nèi)容可以去查閱導(dǎo)航插件的相關(guān)教程,這里就簡單說明下了

  • 把需要導(dǎo)航的區(qū)域設(shè)置成導(dǎo)航static

  • 菜單的Windows-AI-Nav.....打開導(dǎo)航窗口

  • 在導(dǎo)航窗口里這樣設(shè)置

  • 上圖切到Bake按鈕,點擊Bake區(qū)域,你地圖上會有一片藍(lán)色的區(qū)域,這個區(qū)域就是導(dǎo)航區(qū)域了,敵人可以在這個區(qū)域行動

注意:敵人如果掛的有Animator,rootmotion一定打勾,我之前遇到敵人無法移動,找了半天才發(fā)現(xiàn)這里沒勾上

獲得Player

我們可以自定義個腳本來獲得player,這樣算是最節(jié)約效能的了(比起大范圍的Findtag來說,我也不推薦大量用find來查找,這種方式很耗性能)

  • 我們可以為Player的腳本寫個單例,目的是方便別的腳本能夠很快找到角色,不知道啥是單例就直接看代碼

麻煩大家照著圖片手抄一遍了

一般角色之類的,因為游戲里只有一個,所以我們可以用單例聲明這個角色,既然叫單例腳本,意思就是這個腳本不能在場景里出現(xiàn)兩個,貌似這是很基礎(chǔ)的知識了

單例寫完后,怎么在別的腳本里獲得player呢,你可以在別的腳本里寫playerBoyManager.Instance就可以獲得了

  • 自定義一個行為樹腳本,內(nèi)容差不多照抄就行,行為樹必須要符合這個格式,具體為社么這樣寫可以看官方文檔,Sharedxxxxx變量是行為樹插件安裝后會自帶的變量,這個腳本的主要目的就是把sharedValue值返回成player

  • 在之前敵人上添加的節(jié)點里點OPEN,就可以打開行為樹界面

  • 我們可以在參數(shù)界面里設(shè)置一個叫做Player的參數(shù),Type點開,改成GameObject

  • 在Task界面找到剛才自定義的節(jié)點,拖出來連上Entry

此時你運行游戲,你會發(fā)現(xiàn)行為樹的參數(shù)能獲得角色了

當(dāng)玩家在視野里敵人會跟隨玩家?

當(dāng)玩家在視野里會被敵人跟隨

我們來加點節(jié)點

上圖有兩個新節(jié)點,當(dāng)你加上Within Distance節(jié)點的時候,你會發(fā)現(xiàn)敵人周圍多了個圈,這個圈的意思是,當(dāng)Target(玩家)進入圈內(nèi),就會執(zhí)行右邊的節(jié)點

但是,如何告訴節(jié)點Target是玩家呢,剛才我們不是寫了個自定義節(jié)點叫做獲得Player了,并把Player的GameObject給了一個參數(shù),所以我們按照下圖設(shè)置就可以讓敵人知道Player是誰了

Seek節(jié)點的意思是追角色,也有參數(shù)設(shè)置,具體大家自行研究了,但是需要注意的是,里面有個Target參數(shù),需要指定給player

此時運行游戲,你會發(fā)現(xiàn),當(dāng)你進入?yún)^(qū)域后,敵人會對你緊追不舍,就算你脫離了區(qū)域,敵人依然追你,這個要怎么解決呢

脫戰(zhàn)功能

點擊如圖節(jié)點,設(shè)置Abort Type為Self,再運行下游戲,就會發(fā)現(xiàn)你離開敵人區(qū)域后會脫戰(zhàn)了

雖然很簡單,但是這個是什么意思,這里就要說下Abort Type

這個可以理解成強行打斷Sequence,默認(rèn)是None

  • 為None的時候,也就是不設(shè)置打斷,比如運行到敵人追你,就會一直追,除非追到你否則不會停下來

  • 為Self的時候,會打斷自身,比如檢測范圍的節(jié)點為False時,就會打斷節(jié)點,讓敵人不追你了

  • Lower Priority,高優(yōu)先級的Sequence為True,會打斷低優(yōu)先級執(zhí)行高優(yōu)先級,什么叫高優(yōu)先級呢,在行為樹里,左邊的節(jié)點比右邊的優(yōu)先級高

  • Both,當(dāng)然就是上面兩個一起執(zhí)行,即可以打斷自己,也會被高優(yōu)先級打斷

脫戰(zhàn)回到原點

我希望敵人脫戰(zhàn)后可以回到自己的初始地點

  • 創(chuàng)建一個V3變量,并在開始時存儲角色的位置


  • 修改節(jié)點,主要是增加了個Get Local Position節(jié)點,獲得角色的位置

  • 節(jié)點里的參數(shù)設(shè)置中,Target為空,意思就是Self,即自身,然后我們把這個節(jié)點傳遞給StartPos

  • 后面的IDLE節(jié)點意思是掛起,等待角色進入范圍,如果不加IDLE,這個行為樹就運行結(jié)束了,但是此時的節(jié)點有問題,你會發(fā)現(xiàn)程序卡IDLE上了,所以我們進行一些修改和調(diào)試

我們的目的是,敵人沒發(fā)現(xiàn)你時運行IDLE,發(fā)現(xiàn)你后開始SEEK


上面的節(jié)點多加了個Selector節(jié)點,以及將Idle左邊的Sequence改成了Both模式,Selector的意思是,當(dāng)?shù)谝粋€節(jié)點不成立時,會繼續(xù)執(zhí)行下一個,而Sequence設(shè)置成Both,就會不斷檢測角色是否進入?yún)^(qū)域,一旦進入打斷右邊低優(yōu)先級的Idle


攻擊主角

通過上面的內(nèi)容,應(yīng)該對節(jié)點都比較理解了,所以接下來會加快速度直接給答案


補充

如何讓角色移動的時候播放行走動畫?

可以在Animator里面設(shè)置參數(shù)WalkSpeed

給敵人一個腳本,注意需要引用using UnityEngine.AI;

在動畫里設(shè)置一個混合動畫(如果不會找別的教程)

這樣敵人行動起來就可以播放動的動畫了

敵人可能出現(xiàn)莫名其妙的自轉(zhuǎn)?

下圖位置打勾

如果覺得文章不錯,歡迎三連,連的多以后分享更多教程

【教程】Unity行為樹插件behaviour trees制作敵人AI的評論 (共 條)

分享到微博請遵守國家法律
滨州市| 固原市| 桂林市| 黄浦区| 法库县| 汽车| 清新县| 霞浦县| 灵璧县| 彰化市| 康保县| 祁连县| 和静县| 泗阳县| 正镶白旗| 兴业县| 彩票| 岑巩县| 阳朔县| 锡林浩特市| 纳雍县| 昌吉市| 方山县| 崇文区| 逊克县| 深泽县| 甘孜县| 申扎县| 工布江达县| 上高县| 东乌珠穆沁旗| 扶绥县| 万年县| 积石山| 来凤县| 石嘴山市| 阿合奇县| 丹棱县| 青冈县| 泗水县| 西充县|