運動:
移動,在很多基本情境中,是一種在一定時間內從一個座標點推進到另一點。這通過一個方向向量和遊戲單位的速度來做到,開始時還要獲得起始的座標。
因為我們通常使用滑鼠,所以並不需要玩家必須用遊戲手柄和第一人稱光電手柄。一個解決如果饒過障礙物的方法是建立一個行為的序列,這樣在一次行動中就會有多個動作被完成。用這種方式如果一個路線必須饒過障礙物,則可以在目的地到達前添加路徑,其結果是玩家不用幹涉的自動饒過障礙。
巡邏:
巡邏是在一系列的指定點之間移動的一個指令。當一個遊戲單位移動到一個目的地並不在動時,我們可以比較它當前的位置和巡邏的目的點列表中的點,然後設定靠近它位置的一個新的目的地。
通常是不會這樣只是讓遊戲單位在螢幕上移動而沒有站立和等待,讓這個世界變的更鮮活,給它們比較少的機會被發覺和遭遇敵人。
饒過障礙:
尋路演算法是在地圖的設計時就已經明確的,還要考慮遊戲單位在移動時之間的互相作用。這裡我是要允許一種室外的環境,涉及一些簡單的障礙如建築。假設你不能進入其中。障礙就是一個由4的頂點組成的矩形。
在這種情形下,我通常用開放式運動並用1-2的迴避運動方式饒過。
假設在遊戲單位和目的地之間有一個4點的矩形。這裡我們先移動到距離最近的一個矩形的頂點,遊戲單位之間的碰裝時則旋轉90度。這裡給出了一個緩衝區用來在障礙附近移動。
障礙迴避取決於障礙無的類型。這裡只是一個4點的矩形,或是一個菱形。因為如此可以簡單的發現障礙邊緣最靠近目的地的點。這樣可以簡單的建立一個迴避路徑,在兩個障礙靠的很近時也會這樣。
當你將要將尋路演算法進一步增強時,有一種叫A*的演算法,非常流行。尤其在迷宮一樣的障礙地形中尋找路徑時經常用到。比A*更進階的是方向嚮導演算法用來逐漸的饒過障礙。有些複雜的地形如十字路口用來轉移到地圖的不同地區。
鎖定敵人:
如何對待一些遊戲單位目標,取決於玩家在遊戲中的意圖。也許你希望你的遊戲單位自動攻擊目標,這樣玩家會關注情境中的其它事情。你也許希望你的遊戲單位攻擊某個指定的目標。另一方面,你也希望敵人能主動發覺你的遊戲單位這樣會使敵人有挑戰性。
你可以規定8個方向,並允許一個遊戲單位面對另一個遊戲單位時,或是在正前方或是在其它方向。一個簡單的測試決定是否遊戲單位在最大視野範圍內,在三個方向上的其中一個上進行檢測,並得到結論用最少的計算時間完成。
你當然要做障礙測試,來觀察是否有遊戲單位被阻塞,用同樣的方法來測試障礙迴避,結果經常是要麼有一個清晰的路徑或是沒有。增加高度視覺檢測將改變測試的範圍,但在其它文章裡會討論。
追擊:
當你的敵人發現一個目標,在他們失去目標後你當然不希望它們慢無目的的徘徊。這樣的話你需要給出選擇進行進一步的搜尋。在這之前我們只是談了遊戲單位如何定點,基於可以察覺它們時。在有些情況下可以使對敵人的追蹤變的更加機智。你可以選擇欺騙地只是跟隨跟蹤目標。
如果你希望保持真實性,你應儲存目標的最後位置,然後給出一個搜尋範圍。一個例子是在一個失去目標的遊戲單位的隨機方向上進行的搜尋。
在這裡我們允許目標遠離遊戲單位,如果正確,遊戲單位會快速的結束第一輪目標搜尋然後積極的去尋找目標。如果遊戲單位沒找到目標,將安排其撤回並在原來的目標點附近開始巡邏。這樣遊戲單位就會回到最後一次發現目標的地方開始做類比搜尋。
這並沒有包含所有可能的情況,但也確實給出了一些合理的方法。
結論:
所有遊戲AI的秘密是理解你要解決的問題並得出能夠表現出來的結果。如果你能將這些畫出來並用公式來表示一個演算法,則你已經完成了90%的任務。最後的10%是讓其正常的發揮作用,簡單的用10次左右的嘗試來描繪怎樣去做這些。