我在過去年幾負責了多款遊戲的AI設計工作,我從中收穫的一個最基本,可能也是最令人沮喪的經驗就是:建立一個出色的AI真是出奇地困難。不但製作一個符合最低標準的AI很難,即使你真的做出一個極為智慧的AI也並不意味著它就是一個優秀的AI。畢竟,沒有玩家希望自己被一個無情的對手徹底打倒。有些人只是希望在遊戲中過把角色扮演癮,或者希望AI能夠手下留情,即便它真的很強大。即使是那些追求挑戰性的玩家也並不希望輸掉每場遊戲。

recipe_book(from gamasutra)

recipe_book(from gamasutra)

那麼,設計師或AI程式設計師在這一點上首先要準備什麼對策呢?無論你負責的是哪種工作,答案都一樣:確定你的目標。

重中之重

“編寫AI太難了”已經不算什麼新鮮的經驗之談了,但開發者還必須掌握另一點:讓玩家看到並且相信才是最重要的。AI可以作弊,扮演或脫離某個角色,制定愚蠢的決策,怎麼樣都可以——讓玩家樂在其中才是關鍵。開發者常會遇到自己完全沒想到的功能竟會成為玩家最大的樂趣來源這種情況,“什麼,你在遊戲中最喜歡的東西居然是帽子?它只用一天時間就可以新增到遊戲中!”切中要害是所有遊戲開發中的最重要之事,但它對AI來說尤為關鍵。

AI與其他任何系統一樣,如果玩家並不能從中獲得樂趣,那麼它編寫得再好也不會有價值。開發者通常很容易被不時湧現的大量難題所困,卻沒有發現自己在無法為遊戲體驗增色的內容上花了太多精力。編寫AI特別容易遇到這種情況,因為多數時候你無法知道自己的程式碼執行效果是否同預期一致,更別提它是否將有出色表現了。

那麼,現在你已經制定了一些目標,並打算老老實實地遵循這些目標。下一步就是確定遊戲AI可能發生哪些錯誤。如果玩家認為AI太隨機或太愚蠢,那麼這個AI設計就是失敗的。AI開發者的職責就是儘量避免這些錯誤。我們首先來談談怎樣讓AI顯得更合理而不僅僅是隨機性。

不可設計隨機AI

讓AI降低隨機化的一個策略就是減少其隨機性。這是很明顯的答案,但要注意如何讓AI呈現預見性或奇異性則是一個重要的設計決策。也許在戰爭開始的時候,就可以通過單個回合讓玩家確定所有AI單位的進攻強度,而非AI每回進攻的時候就製作一個隨機強度。這些是值得開發者考慮的技巧,但最終選擇哪種方式則要取決於遊戲目標以及設計師想要遊戲呈現的感覺。

另一個策略可能有點違反直覺,即讓AI解釋遊戲當前發生的狀況,以此讓AI看起來更智慧一些。某個首領是否正在組建大部隊以圖摧毀人類?讓AI來“報信”!

你可能會想,這就是提前通知玩家,令其做好應對準備,這樣AI就無法真正打垮玩家。但同時這也可以提高玩家警惕,讓他們開始擔憂AI下一步行動是什麼,這樣他們就會預先制定計劃。等到AI確實帶上大隊人馬現身時,玩家就會開始想:“沒錯,看來AI果然早就算計好這一步了”。如此,玩家就會更注意AI接下來的動向,比起簡單地偷襲,這會讓AI顯得更為智慧。

玩家並不清楚AI私低下有什麼舉動,並且他們也不在乎這一點。開發者應該向玩家呈現自己的勞動成果。開發者可以花些時間製作看似“無價值的”AI,讓後者呈現電腦所知道的情況,即使這與實際遊戲玩法影響不大。數行可令AI呈現智慧感的程式碼所發揮的作用,可能比一個龐大而複雜的智慧AI系統要管用得多。

當然,AI可以神通廣大,無所不能,但最重要的是它能夠恰如其分地呈現在玩家面前。這就涉及了下一個重要內容……

不可設計愚蠢的AI

AI大軍上門了,那麼現在又該如何?讓我們首先確定一下優先順序。

避免AI顯得愚笨這一比讓其顯得智慧更重要。我的意思是什麼呢?

AI被貼上“壞”標籤並不是發生在它無法準確無誤地執行某項操作的時候,而是在它甚至無法使盡全力殺死人類軍隊中的一個傷員的時候。

開發者首先要重視的就是減少AI所犯的這種明顯錯誤。假如AI可以執行某項特殊行動,但若沒有剔除其所有的“愚昧性”,這個功能並不會有多大意義。玩家只要發現AI的一個愚蠢行動,他們就會立即對自己的電腦對手失去信任感,而遊戲所呈現的真實幻象也會消失殆盡。

那麼,優秀的AI一般都不笨。那麼,我們又該如何製作“智慧”的AI?在這裡我不會詳述演算法等具體內容,但我認為有必要提及一些普遍原則。

關鍵就在於分清主次,並貫穿始終。專注於製作通常很簡單,但在特殊方面有過人之處的AI。千萬不可製作各個方面都無懈可擊的人工對手。AI背後的行動環節越少,程式設計師就越容易為其新增效能並優化現有內容。

要建立一個支援頻繁改動的系統。AI是遊戲中最常迭代的內容之一,因此要簡化這個系統。假如每次開啟AI程式碼都會讓人抓狂,這就會極大降低開發者改進遊戲的積極性。

讓AI儘量快速地執行簡單的任務,這一點非常重要。只有基本功能到位了,才可以再新增複雜功能。AI是遊戲開發中少數幾個崇尚簡潔性的環節之一。其設計本身並不是問題,但如果在其中投入過多時間卻可能產生不必要的複雜性,並且轉移人們對高階目標的注意力。

神經網路和基因演算法等高階AI技術極為強大,並且可以做出一些驚人的效果,但不幸的是對多數遊戲而言,它們很可能是“禍害”,尤其是那些需經歷多次迭代的遊戲(遊戲邦注:而通常情況下,遊戲經過越多次迭代就有可能越完善)。用一句話強調上述觀點,那就是:AI越簡單,其可行性就越高,並且越容易優化。

設計師和AI

假如遊戲設計師及AI程式設計師並非同一人,那麼任何複雜遊戲(尤其是戰略遊戲)中的AI成功的機率就會大大降低。

AI本質上只是眾多遊戲系統中的一個環節。所以讓非遊戲設計師來部署整個遊戲中的這麼一個重要環節,是不是有點不合適?設計師需花大量時間和精力確定所有系統的目標及關注點——AI也是其中之一。簡單地將這項任務移交給程式設計師,往往容易釀成大錯。程式設計師的職責是編寫高效、穩定且易於維護的程式碼,確保遊戲體驗具有趣味性才是設計師的職責所在。這些目標並不具有一致性,如果不提供一個方向,程式設計師一般只會像對待自己往常的工作那樣建立系統和編碼。

但這並不是說如果遊戲設計和AI設計不是同一個人或團隊完成,這個遊戲專案就必敗無疑。但這確實需要雙方團隊具有高度組織性和警覺性。設計團隊需要確保所有AI行為的目標,都像其他系統一樣清楚標示出來。

即使是這樣,設計AI也仍然具有其他遊戲系統鮮見的挑戰性,因此最理想的情況是遊戲設計師和AI程式設計師就是同一個人。電腦可能擅長處理某方面事物(例如同時管理多個偵察單位),但在某此方面可能缺乏可行性(比如在27個回合中推出三次交叉進攻)。如果設計AI的人同時瞭解技術侷限性以及玩法可行性,那麼就相對更有可能實現專案中的AI目標。

總結

當AI程式設計師不是件容易的差事。這一工作的成果通常並不明顯,而這其中又多歸咎於一些很大很顯示的問題。但這些灰色區域也有一些創新空間。堅定地專注於終極目標以及避免將簡單事情複雜化,可能有助於AI開發者成功實現目標。

via:遊戲邦/gamerboom.com