NPC 類型 · 六種,逐一解說

6 種 NPC 角色類型(附真實世界的即時 3D 範例)

打造你自己的 NPC 角色類型

任務、商人、敵人、同伴、背景、互動 — NPC 角色類型的這六種,每一種都以一個你現在就能走進去的真實 3D 世界作為範例。

✦遊戲
製作一個 NPC 角色類型

在真實 3D 世界中實際推出的 NPC 角色類型,大多可歸入六個分類:任務、商人、敵人、同伴、背景與互動。你選擇的分類,決定了你必須接上哪些系統 — 對話狀態、物品欄、路徑尋找、仇恨,或完全不需要 — 也決定了當玩家做出你沒預料到的舉動時,什麼會最先出問題。

本頁會逐一介紹這六種 NPC 角色類型。每一種都會有定義、讓它在引擎中運作的機制、我們最常看到的失效模式,以及一個來自 Neta Studio 3D 遊戲建造器的即時世界,讓你能走進去,而不只是盯著一張截圖。

快速解答:六種類型

這六種類型是:任務 NPC,負責發布並完成目標;商人 NPC,以物品交換貨幣;敵人 NPC,會戰鬥並在戰鬥之間持續存在;同伴 NPC,跟隨玩家;背景 NPC,為場景增添人氣但不互動;以及互動 NPC,也就是會就地做出反應的物件、動物與固定裝置。

整套分類就是這一句話。本頁其餘部分會逐一介紹 — 每一種類型在機制上做什麼、什麼會最先出問題,以及一個你能開啟並走進去的建造器世界。

為什麼類型先於模型

網格、骨架與動畫組在各類型之間大致可以互換。同一個村民網格配上同一段待機動作,可以是任務發布者、商人,或背景角色。真正不同的是元件堆疊:對話圖、物品欄表格、導航網格代理、仇恨半徑、觸發體積,或存檔旗標。

先挑類型,你就能把時間花在調整真正需要的那套系統。先挑模型,你就會建出四套你根本用不到的系統。Mini World 是並排比較它們最省事的地方,因為六種全都塞得進同一個場景,中間不需要讀取畫面。

任務 NPC

任務 NPC 擁有劇情狀態。它提供一個目標、知道該目標是否完成,並在完成時給予獎勵。機制上,這是一個至少有三種進入條件的對話圖 — 未開始、進行中、完成 — 再加上一個指向目標旗標的參照,讓世界的其他部分可以設定它。

失效模式是把那個旗標存在 NPC 自己身上。如果 NPC 被摧毀、被串流卸載,或世界重新載入,任務就會重置回未開始,而玩家手上還拿著被告知要收集的物品。此時玩家擁有的是沒有主人、也無法交付的物品欄物件。把旗標放進玩家存檔,以一個穩定的任務 ID 作為鍵,並讓對話圖在面板開啟時讀取該變數,而不是在 NPC 生成時讀取。

第二件要做對的事是交付判定。如果完成只在 NPC 腳邊一個很緊的體積內觸發,那麼從移動載具上或隔著柵欄交付的玩家就會錯過它。給完成判定一個寬鬆的半徑,外加一次視線測試,並讓它與互動提示分開,這樣走到 NPC 附近就不會自動完成一個玩家還沒讀過的任務。

The Cyclops' Island 是看完整個循環最短的途徑。那裡有一位發布者、一條簡短的目標鏈,以及一項能開啟島上其餘內容的獎勵。走上前、接下目標、離開、回來,然後觀察當你帶著物品返回時,對話進入條件發生了什麼變化。那個三態轉換就是任務 NPC 的全部,一旦你看過,就能在任何地方重建它。

商人 NPC

商人 NPC 以物品交換貨幣。這就是全部的機制。機制上,一個商人就是兩張表與一次檢查:一份以物品 ID 搭配收購價的庫存清單、一條售價規則,以及一次在交易成立前執行的貨幣比對。

它在經濟中的角色比單筆交易更大。商人是主要的貨幣回收口,這正是阻止戰利品累積成一個玩家不再在意的數字的原因。他們也是節奏的調節閥:一個商人賣什麼,決定了玩家接下來能嘗試什麼。當測試員卡關時,第一個該檢查的是商人的庫存,而不是敵人的難度。

這是最容易製作的類型。一個觸發體積、一份物品清單,以及一個面板。不需要導航網格、不需要仇恨,如果你不想的話也不需要對話圖。面板就是大部分的工作。

它也是最容易做得無聊的類型。固定庫存會把商人變成販賣機:玩家買一次就再也不回來。兩個便宜的解法。第一,補貨 — 用計時器或在世界事件觸發時更換庫存清單。第二,設限 — 把物品藏起來,直到玩家去過某處或清掉某樣東西。兩者都不需要新系統。售價要嚴格低於收購價,否則玩家就有了無限循環,經濟在第二個區域之前就結束了。

敵人 NPC

敵人 NPC 是一個敵對的行動者,無論玩家是否正在與它戰鬥,它都存在於世界中。它在戰鬥之外也有狀態 — 待機、巡邏、警戒 — 並會轉入戰鬥。這就是敵人 NPC 與單純的 CPU 對手之間的界線。

CPU 對手只存在於一場對局之中。它在對局開始時生成、在對局結束時被移除,並且不會在回合之間攜帶任何狀態。它的行為受對局規則約束,而對局就是整個世界。敵人 NPC 則必須回答 CPU 對手永遠不會被問到的問題:玩家離開時它去哪裡、它死後會不會回來、玩家存檔並重新載入後它是否還存在。

為什麼這個區別對設計很重要:敵人 NPC 的擺放是關卡設計,不是對局調校。你是在世界座標中挑選仇恨半徑、巡邏路線與牽引距離,而這些數值會改變關卡讀起來的樣子。仇恨半徑若比關卡的視線還長,就會在玩家看見敵人之前先開打。牽引若太長,就會把一場戰鬥變成一場橫越整張地圖的追逐,並把其他每一場遭遇都拖進來。給每個敵人三個可逐個調整的數值:仇恨半徑、牽引距離與脫戰時間。

持續存在是另一半。逐一為每個敵人決定它是否重生,以及依什麼觸發 — 世界重新載入時、依計時器,或永不。如果你不決定,預設行為幾乎永遠是永不,而你在一次通關之後就悄悄刪掉了世界的一塊。敵人死亡也需要一條屍體規則:屍體要嘛依計時器消失並在那一刻掉落戰利品,要嘛留在原地、由屍體讀取戰利品表。把兩者混用,就會做出可以重複掠奪的敵人。

同伴 NPC

同伴會跟隨玩家、參與移動或戰鬥,並跨場景攜帶狀態 — 生命值、物品欄,有時還有好感度。它是唯一一種大部分時間都在畫面上、且在那些影格中大多都在做事的類型。

路徑問題正是同伴之所以困難的原因。同伴是一個導航網格代理,其目標是另一個會移動的代理。門口最先出問題:如果同伴的代理半徑大於門的開口減去餘隙,它就會拒絕尋路通過,而玩家只能自己往前走。狹窄的樓梯、梯子與移動的平台也會以同樣方式出問題。三個設定就能處理大部分情況。跟隨偏移 — 以玩家後方的一個點為目標,而不是玩家的精確變換 — 一個停止距離,讓同伴不會擠到鏡頭,以及一條追趕規則。

追趕規則不是選配。如果同伴離開視線超過幾秒,且落後超過幾個身長,就把它傳送到玩家後方最近的導航網格點。每個玩家最終都會把同伴卡在幾何物件上,而且每個玩家都會察覺到。沒有傳送的話,失敗的不是同伴走丟,而是玩家得走回去找它,兩次,然後就再也不帶它了。

這麼大的接觸面,也是同伴是最難出貨的類型的原因。同伴會碰觸一切:它會拉走敵人的仇恨、擋住玩家自己的移動、觸發壓力板、佔用生成額度、出現在原本只為一個角色封鎖的劇本橋段中,並在對話時站在鏡頭前面。其他每一套系統現在都必須回答同伴在這裡會做什麼。商人當你走過時什麼都不做。同伴則在每一個場景裡都會做點什麼,包括那些從來不是為它設計的場景。這就是為什麼同伴比這份清單上任何其他東西都更常被砍掉。

背景 NPC

背景 NPC 的存在,是為了讓一個地方讀起來像有人居住。沒有對話、沒有物品欄、沒有互動。通常有三、四段待機動作、一段行走循環,以及一條樣條路徑或一個小小的巡邏半徑。

你需要它們的數量比你以為的少。真正要緊的是同一時間有多少個在鏡頭視錐內,而不是關卡裡存在多少個。只要有一些在動,一條街用少數幾個看得見的角色就能讀起來像有人氣。眼睛讀的是動作與輪廓,不是人數。在鏡頭真正會看的地方稀疏地放幾個錨點 — 沿著主要路線、在玩家會用的門口附近 — 然後讓關卡的其餘部分保持空曠。

讓一群人看起來不對的具體原因,是同步。如果每個背景 NPC 都在同一個影格開始同一段待機動作,場景就會讀起來像一整排人偶。把每個個體的動畫片段起始時間,以該片段長度的隨機比例錯開,並給行走的角色略微不同的速度,讓它們在一條長視線上逐漸分散。Agent Sprite Forge 是產出一群人所需那組小片段 — 幾段待機與一段行走 — 最快的方法,不必逐一手動做動畫。

成本控制在這裡比其他任何地方都重要,因為背景 NPC 是你唯一會大量擺放的類型。讓它們離開導航網格,才不會佔用真正代理需要的尋路查詢。讓它們全部共用一個骨架與一份材質圖集。給它們不要碰撞,或給一個無法擋住玩家的推開半徑。也不要因為怕玩家跟它說話就給它一個對話圖 — 一句佔位台詞會讓玩家學到這個世界很單薄,而他們一定會去試。

互動 NPC

互動 NPC 會就地做出反應:按鈕、拉桿、門、告示牌、動物。它們有一個狀態與一個反應。它們沒有行程、沒有路線,也沒有對話樹。

與道具的界線在於狀態。道具播放一段動畫後回到靜止,或只做一件事而沒有做過這件事的記憶。一旦一個物件有了持續存在的狀態變數 — 上鎖或解鎖、開或關、餵過或餓著 — 並在第二次互動時有不同行為,它就進入了 NPC 的範疇,需要和任務旗標一樣的存檔紀律。一個狀態位元與一個反應,是道具。兩個以上、各有不同反應的狀態,就是 NPC,即使這個 NPC 是一扇門。

動物屬於這個類別,而不是背景。一隻在玩家越過某個半徑時逃跑的動物,有一個感知輸入與一個反應,也就是一個小小的狀態機。實作方式和門所用的相同:一個互動或感知半徑、一個寫入存檔的狀態變數,以及一個至少有兩段片段的動畫狀態機。

失效模式是穿過幾何物件觸發的提示。如果互動半徑很寬,又少了視線測試,玩家就會在牆的另一側收到一扇門的互動提示。用一次射線投射加上半徑來管制提示,並用同樣的檢查來管制互動本身,而不是只管制提示。否則提示會在牆邊消失,但一個排入佇列的輸入仍然會把門打開。

你該做哪一種類型?

依目標來挑,而不是依角色的樣子。第一欄是你想讓玩家做的事。第二欄是能產生這件事的類型。第三欄是一旦其他一切都建立在它之上後,就會變得很難改動的東西。

如果一個角色兼做兩件事,就把它做成一個角色搭配兩套元件,而不是兩個角色並排站著。一個同時發布任務的商人,就是一個帶有兩個面板、共用同一份存檔參照的互動物件。代價是兩條流程現在都必須互相對照測試 — 一個在還沒開過商店前就完成任務的玩家,會發現庫存處於一個你也許沒寫過對應情況的狀態。

如果你不確定一個角色屬於哪裡,就從背景開始,再往上加。加上一個觸發體積與一個對話圖,就能在不動到網格的情況下把背景 NPC 變成任務發布者。反過來則很昂貴:把互動從一個同伴身上剝除,意味著要重新測試它出現過的每一個場景。

目標類型首先要做對的事
玩家需要一個前往某處的理由任務 NPC放在玩家存檔中的任務旗標,以穩定的任務 ID 作為鍵
玩家需要把戰利品換成可用的裝備商人 NPC庫存表,外加在交易成立前執行的貨幣檢查
玩家需要一次技巧或資源的考驗敵人 NPC仇恨半徑、牽引距離與脫戰時間,逐個個體調整
玩家需要在一條漫長路線上生存下來同伴 NPC跟隨偏移、停止距離,以及一條追趕傳送規則
場景需要讀起來像有人居住背景 NPC共用動畫片段並套用隨機相位偏移,且不使用導航網格代理
世界需要就地對玩家做出反應互動 NPC一個持續存在的狀態變數,以及一個帶有視線閘門的觸發體積
The Cyclops' Island — 獨眼巨人就是敵人 NPC;船員則是同伴。
Little Days Playroom — 一整群各有自己待機動畫的背景 NPC。

走進它所屬的世界

精靈圖是一種無處可站的角色。最後這一步是別人給不了的:把你剛做好的圖集放進一個有人能四處走動的世界 — 一座小島、一顆行星、一個下雨的街角。這個網站上的每個世界,都是用一段文字描述做出來,並發佈成一個你能玩的頁面。

FAQ

NPC 角色有幾種類型? +

就我們的分法,是六種:任務、商人、敵人、同伴、背景與互動。這種分法是功能性的,不是生物學上的。它依角色需要哪些系統來組織 — 對話狀態、物品欄、路徑尋找、仇恨,或單一狀態旗標 — 所以兩個模型完全不同的角色,可以是同一種類型。

敵人也算 NPC 嗎? +

算,只要它在戰鬥之外也存在於世界中。敵人 NPC 有待機、巡邏與警戒狀態,並會在戰鬥之間持續存在,所以它需要重生規則與存檔規則。只存在於一場對局內部的 CPU 對手,在這個意義上不算 NPC,因為它沒有任何部分能在對局結束後留存。

哪種類型最容易製作? +

商人。一個觸發體積、一份附有價格的物品清單、一次貨幣檢查,以及一個面板。不需要導航網格、不需要對話圖,也沒有需要保存的狀態,除了玩家本來就有的物品欄與金錢。

同伴 NPC 需要 AI 嗎? +

比起決策,它們更需要的其實是路徑尋找與跟隨規則。困難之處在於緊貼一個移動目標、穿過門口與樓梯時仍留在導航網格上,再加上一套在失敗時用的追趕傳送。選擇同伴要攻擊什麼,只是這份工作中很小的一部分。

什麼是背景 NPC? +

一種非互動角色,用來讓場景讀起來像有人居住。沒有對話、沒有物品欄,通常沒有導航網格代理,也往往沒有碰撞。它是為鏡頭而存在,所以重要的是同一時間看得見幾個,以及它們的動畫循環是否彼此錯開。

一個 NPC 可以是兩種類型嗎? +

可以,而且通常就應該如此 — 一個同時發布任務的商人,就是一個帶有兩個面板、共用同一份存檔參照的互動物件。代價是組合式測試:每個任務狀態乘以每個商店狀態,都是你必須檢查的情況,而玩家最先找到的,往往就是你沒寫到的那些。

回到 3D 遊戲建造器

全部 31 個完成品的 3D 世界、遊戲與場景都在同一頁 — 每一個都能玩。

平台:Neta Studio頁面:6 種 NPC 角色類型(附真實世界的即時 3D 範例)接下來閱讀:/explore/guide/what-is-a-non-player-character · /explore/guide/what-are-npcs · /explore/guide/npc-video-game
×