Hide(隱藏)
Hide行為旨在找到一個(gè)位置使得障礙物總是在角色自身和它想躲開的智能體之間妻献。
-
圖中的黑點(diǎn)為潛在的隱藏點(diǎn)娶视,圓形為障礙物幢泼,黑色三角為躲藏體
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ì)算出來恃轩。
- 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為障礙物
- 為兩個(gè)紅色的躲藏體添加Hide腳本叽掘,并添加需要使用到的字段
- 將障礙物放入Obstacles數(shù)組里
- 在拖放障礙物時(shí)可以先鎖定Inspector面板
- 添加Hunter
- 到達(dá)Hide重點(diǎn)(獲取最佳隱藏點(diǎn))
- 通過sphere上的collider獲取到障礙物的半徑,并針對Scale縮放問題進(jìn)行優(yōu)化玖雁。獲取到DistAway更扁,隱藏點(diǎn)到障礙物圓心的距離
- 接著得到隱藏點(diǎn)的全局坐標(biāo)
- 得到隱藏點(diǎn)以后開始進(jìn)行判斷,最佳隱藏點(diǎn)
- 在getSteeringForce方法里先聲明三個(gè)需要計(jì)算的Vector3
- 接著進(jìn)行foreach遍歷找出最佳隱藏點(diǎn)
- 分別對找到了何沒有找到最佳隱藏點(diǎn)進(jìn)行判斷赫冬,如果找到了使用arrival進(jìn)行判斷減速半徑問題浓镜。
- 最后將得到的操控力進(jìn)行使用
效果實(shí)現(xiàn):
-
起始位置
進(jìn)行Hide