Path Following
路徑跟隨
- 原理:
- Path following 行為產(chǎn)生一個(gè)操控力,使交通工具沿著構(gòu)建路徑的一系列路點(diǎn)(Waypoint)移動(dòng)。
- 路徑類型
- 線性-有起點(diǎn)和終點(diǎn)
- 循環(huán)型- 封閉路徑

Paste_Image.png
- wander也可以用這種方式來(lái)實(shí)現(xiàn),即把這些路徑點(diǎn)讓智能體來(lái)隨機(jī)選取進(jìn)行移動(dòng)。
實(shí)現(xiàn)的原理
- 判斷下一個(gè)節(jié)點(diǎn)是不是終點(diǎn),如果是終點(diǎn)就采取arrival行為,不是終點(diǎn)就將target的節(jié)點(diǎn)數(shù)組++然后采取Seek行為。

Paste_Image.png
Unity 中的代碼實(shí)現(xiàn)
- 首先我們需要在場(chǎng)景中為智能體添加路徑點(diǎn)(transform)

Paste_Image.png
- 接著給智能體添加pathFollowing的腳本,并且為腳本添加需要使用到的字段

Paste_Image.png
- 將場(chǎng)景中的wayPoint添加到pathPoints的數(shù)組里

Paste_Image.png
- 接著進(jìn)行操控力的獲取

Paste_Image.png
如果當(dāng)前的目標(biāo)點(diǎn)已經(jīng)是最后一個(gè)點(diǎn)了,進(jìn)行arrival行為,從而開(kāi)始進(jìn)行判斷,智能體是否到達(dá)了減速半徑以內(nèi)如果沒(méi)有到達(dá)就用Seek,到達(dá)了減速半徑則使用arrival(arrival里直接包括了Seek行為)。
如果不是最后一個(gè)目標(biāo)點(diǎn)

Paste_Image.png
通過(guò)使用dist(距離向量)的模小于0.2f(假設(shè)值)來(lái)判斷已經(jīng)到達(dá)了當(dāng)前目標(biāo)點(diǎn),數(shù)組下標(biāo)++,重置target,繼續(xù)Seek行為。
通過(guò)獲得的操控力控制智能體移動(dòng)

Paste_Image.png
- 演示:

3.gif
Interpose(插入)
- Interpose行為返回一個(gè)操控力操控角色移到2個(gè)智能體(或空間兩點(diǎn),或一個(gè)智能體與一個(gè)點(diǎn))的中點(diǎn)。
- 預(yù)測(cè)(猜測(cè))算法:得到連接兩智能體當(dāng)前位置的線的中點(diǎn),計(jì)算:從交通工具到該點(diǎn)的距離/交通工具的最大速度=交通工具走完這段距離的時(shí)間T;使用T推斷2個(gè)智能體未來(lái)位置,得到兩智能體未來(lái)位置的線的中點(diǎn),最后交通工具使用arrive行為移向該點(diǎn)。
原理圖:

Paste_Image.png
C++偽代碼:

Paste_Image.png