Unity GameAI-(9)Hide

Hide(隱藏)

  • Hide行為旨在找到一個(gè)位置使得障礙物總是在角色自身和它想躲開的智能體之間。

  • 圖中的黑點(diǎn)為潛在的隱藏點(diǎn),圓形為障礙物,黑色三角為躲藏體


    Image.png

Hide算法思想

  • 找到合適的隱藏點(diǎn)
    • 確定附近障礙物對應(yīng)的隱藏點(diǎn)
    • 計(jì)算出到每個(gè)隱藏點(diǎn)的距離,找出最近隱藏點(diǎn)
  • 使用Arriva行為移向最近處(動(dòng)態(tài)避開障礙物)
  • 如果找不到合適的障礙物,則Evade目標(biāo)

Step(1)

  • 對于每一個(gè)障礙物計(jì)算出隱藏點(diǎn)
  • 最好的做法是以躲藏體的中心為圓心畫圓,找出這個(gè)范圍內(nèi)所有可以躲藏的地點(diǎn),并移向最近的隱藏點(diǎn),這里將不使用圓,將所有的隱藏點(diǎn)都計(jì)算出來。


    Image.png
  • DistanceFromBoundary:需要離躲避障礙物多遠(yuǎn)??梢酝ㄟ^(obstacle.postion-hidePoint.positon).maguie -obstacle.radius得到。

Step(2)

  • 計(jì)算出到每個(gè)隱藏點(diǎn)的距離,距離角色最近的點(diǎn)即為合適的隱藏點(diǎn)。

Step(3)

  • 智能體使用arrival行為移向最近處,如果找不到合適的障礙物,則Evade

代碼實(shí)現(xiàn)

  • 首先為場景添加障礙物,紅色方塊為躲藏體,白色Sphere為障礙物
Paste_Image.png
  • 為兩個(gè)紅色的躲藏體添加Hide腳本,并添加需要使用到的字段
Paste_Image.png
  • 將障礙物放入Obstacles數(shù)組里
Paste_Image.png
  • 在拖放障礙物時(shí)可以先鎖定Inspector面板
Paste_Image.png
  • 添加Hunter
Paste_Image.png
  • 到達(dá)Hide重點(diǎn)(獲取最佳隱藏點(diǎn))
    • 通過sphere上的collider獲取到障礙物的半徑,并針對Scale縮放問題進(jìn)行優(yōu)化。獲取到DistAway,隱藏點(diǎn)到障礙物圓心的距離
    • 接著得到隱藏點(diǎn)的全局坐標(biāo)
Paste_Image.png
  • 得到隱藏點(diǎn)以后開始進(jìn)行判斷,最佳隱藏點(diǎn)
    • 在getSteeringForce方法里先聲明三個(gè)需要計(jì)算的Vector3
Paste_Image.png
  • 接著進(jìn)行foreach遍歷找出最佳隱藏點(diǎn)
Paste_Image.png
  • 分別對找到了何沒有找到最佳隱藏點(diǎn)進(jìn)行判斷,如果找到了使用arrival進(jìn)行判斷減速半徑問題。
Paste_Image.png
  • 最后將得到的操控力進(jìn)行使用
Paste_Image.png

效果實(shí)現(xiàn):

  • 起始位置


    Paste_Image.png
  • 進(jìn)行Hide

Paste_Image.png

最后謝謝寒江獨(dú)釣9527老師的指導(dǎo)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容