Nodegraph(節點與曲線)
Nodegraph被設計者用來幫助NPC的AI規劃活動路徑,Nodegraph包括人工放置的Nodes(節點)與自動在Node間形成的Links (連結)。每個獨立的Node代表NPC實際上可以移動到的地方,Nodegraph的連結則會在編輯時自動產生,但可以用連結控制工具來調整。AI會驅使NPC順著連結從一個節點移動到另一個節點,不過不一定會精確地到達Node的位置,也不一定會走直線路徑。
- 一個節點可能會有「Hint (指示節點)」協助,像是「蹲下掩護」之類的,來幫助NPC在某些特定的位置做出反應。詳情參見Hint nodes
- Counter-Strike:Source 的 BOT 也有類似的東西,叫做 Navigation Meshes (網狀導航).
編輯
Nodegraph會在地圖載入時自動編輯且存入AIN檔,除非本來就有與地圖相對應的AIN檔存在。在建立過程中,Source引擎的AI系統將會在所有節點間(小於720單位)繪製直線和計算哪些種類的NPC Hull可以在所有路徑中移動。可動的物件像是實體物品以及門都會在程序中被忽略。AIN檔輸出之後會保存在「<遊戲名稱>\maps\graphs」
一個地圖可以有兩個Nodegraph存在(不過兩個Nodegraph都會被存在同一個AIN檔裡):一個作用於飛行的NPC上,另一個則是用來走路、駕駛或是執行其他只能在地面上移動的NPC才能做的行動。一般來說NPC可以從中選擇一種Nodegraph,但是當前沒有這樣行動的已知例子。
Air nodes(空中節點)會懸掛在任何它被放置的地方,但是Ground nodes(地面節點)會在編輯時自動落在地面上,除非有特別設定過「Keep editor position」
Flag。
構成要素
以下是建立Nodegraph的要素:
- 地面節點
info_node
info_node_hint
info_node_climb
- 空中節點
info_node_air
info_node_air_hint
- 連結控制
info_node_link
info_node_link_controller
建立
放置節點
節點的目的是在於記錄路徑,所以你放置節點的位置將會反映出這點。透過從一個節點移動到另一個節點應該就可以在你的地圖中穿梭自如了,所以只要把節點放置於地圖的角落就好了嗎?事實上,要是地圖的細節越多,那就應該提供越多的節點讓NPC來使用。要是提供的節點不足,可能會讓NPC在作戰的時候產生麻煩,更嚴重的話,甚至會讓NPC連基礎的移動都有困難。要是沒有可用的節點,NPC將會僵著不動,除了開槍射擊這種簡單的動作外,無法做更複雜的行動。
然而,這也不代表你必須將你的地圖塞滿節點。像是低細節的地區只需要注意你的NPC可以移動,不會動彈不得就行了!如果你正在製造一個沙灘戰場,你應該不需要放置太多的節點,因為你只需確定節點數足夠讓你的NPC從一端移動到另一端。就算放置了很多節點,NPC可能也不大會去運用。
記得必須在目的地多放一些節點,這樣才不會產生NPC全部擠在同一個點上的情況。
至於實際上的節點密度都操縱在你手裡,你可以參考右邊的圖片。注意一下屋頂與地面的節點數,你會發現屋頂上明顯稀疏了不少,而玩家行動的地面則到處都是節點。
map_edit
使用Hammer來製造節點是很無聊的。你可以在遊玩時用map_edit
並且配合第一人稱的畫面來提高製作效率。另外,這個同樣可以用來進行原地圖的節點修改工作。
指示節點
曲線除錯
連結控制
NPC的使用方式
當NPC試圖建立路徑,他會依照以下規則來使用Nodegraph:
- 找尋距離NPC的位置最近的節點
- 找尋距離NPC想到的位置最近的節點
- 確認兩點間有連接起來,並且找尋最佳路徑
- 使用 moveprobes 來確認NPC可以抵達目標節點
- 使用 moveprobes 來確認NPC可以利用目標節點到達他想到的位置