ZKIZ Archives


【產品設計】遊戲的發動機:數值設計

http://www.iheima.com/archives/44896.html

看到太多的數值相關的討論中,策劃們更喜歡也更傾向於討論一些諸如DPS、經驗分配(利益分配相關)等的問題,每個人都舉出了很多現象來證明自己推崇的公式,這是一種很有意義的交流。但是長久下來造成了一種很嚴重的不該有的結果——行業對於數值設計的理解被扭曲為了數值設計僅僅用於這些領域,且一個好的策劃在數值方面的功底應該是這些「倒推能力」。我想這是一種已經形成了一定年數的思想誤區,形成這種誤區和執行至今有很多因素,我不想進一步討論這些因素,因為這會帶來很多人的不爽,這裡我只想說說一個遊戲中真正需要用到數值設計的地方(或者說,這才是「數值策劃」所有應該做的工作)。

從實際項目出發,我們來進一步分析,那麼我們必須先擬定一個項目,我就毫不客氣的拍腦袋出來一個簡單點的項目吧,便於分析且容易理解,那麼這個遊戲是這樣的:

背景簡述

玩家扮演的是一個騎士學院的高級教師,使命是傳授那些來學校學習的騎士們實戰經驗,簡單的說就是安排戰術,讓他們去參加一些實戰活動,通過實戰活動培養他們的能力,當騎士完成學業後,會加入王國的騎士團,根據其加入時的能力總和,國王給出評價來獎勵玩家角色,如果騎士被直接選拔如皇家騎士團,獎勵會非常豐厚。

系統簡述

經營系統:一些基礎的裝備買賣,任務接受、完成等,都想得到,當然前提是這個遊戲僅供我們討論問題,而不是要做出來好玩且賺錢,所以這裡不討論挖坑問題。

養成系統:當然現在來看這遊戲的養成就只有騎士了,至於是否加入其它挖坑系統來賺錢來使遊戲更好玩?我的回答是否定的,因為我不靠它賺錢只靠他說事。玩家對於騎士的培養是從性格方面和能力2方面著手的,每次可以安排騎士突出培養自己某方面戰鬥能力(表現為訓練項目),而安排其他的工作則影響他的性格和經營系統需要的收入等。

戰鬥系統:標準的SLG(火紋、曹操傳之類的,別把神仙道說成SLG了,這是「後時代策劃」的標誌),放置型(戰鬥過程玩家無操作,你是訓導師嘛,安排戰術是你的責任),玩家要做的是開始的時候在允許的位置內安排出場的騎士(位置多於可上場的騎士),每一仗的目標都是一定回合內敵全滅,地圖是隨機的,根據騎士自己的性格和玩家對其的塑造方向,他在戰場上會有不同的行為。

簡單歸納:或者說上面這3段都是廢話,好吧,這遊戲就是玩家放置安排每個騎士訓練生活(美少女夢工廠?)和安排SLG戰鬥(自動操作的火紋、夢模?)結合,這裡不討論最終好不好玩,我們只看主題——策劃在這個項目中需要進行的數值設計:

角色屬性、戰鬥數值等等基礎設計

這些是「數值策劃」們最喜歡談論的內容之一,我覺得這裡就沒有必要反覆說這是干什麼的了,只是強調一個思路問題,很多時候策劃認為我們先有了哪些屬性,然後硬性的給這些屬性附上其作用,但恰恰相反,優秀的遊戲數值設計過程中,是先分析世界需要怎樣的屬性,然後分析我需要些什麼屬性,接下來是分析哪些屬性必須被拆分(為了賺錢也好為了平衡也好),最後敲定了屬性後,對其製作公式。

那麼回到這個遊戲,我們會有些什麼屬性呢?最基礎的就是攻擊力、血量(含上限)、移動力。這些都毫無疑問地用於負責分析每一個領域:攻擊力決定對方血量的下降速度;血量決定角色能被攻擊幾次;移動力決定了角色在地圖上一回合內移動的格子數。這個遊戲的基本屬性已經有了雛形了,完了?沒呢,這點屬性夠嗎?不夠,這只是骨架子,我們接下來要給他血肉。

在遊戲中我們有物理和魔法兩種攻擊方式(體現劍與魔法的時代),那麼我們規定魔法不會受到防禦力影響,但是物理攻擊會,因此我們必須加入一項防禦力,區別出物理和魔法來;為了平衡魔法與物理的攻擊,我們得給角色一項叫做靈性的屬性,他決定了角色魔法的命中率(而物理的是必定命中的),此時我們不難看出本質上物理和魔法2者是平衡的,因為各有優缺點,換成賺錢思路,物理攻擊這叫低風險低收益,而魔法則是高風險高回報。當然我不認為這是唯一的解決辦法,更不認為這是最好的解決辦法,這當然需要設計師自己根據遊戲去設計。但是這裡有一個核心問題就是——質的平衡,在數值設計中有質的平衡和量的平衡兩點,哪個屬性高了低了,叫做量的平衡,而質的平衡則描述了屬性本身的價值。

如何去做質的平衡思路非常簡單傳統,給你一些就要剝奪一些,首先我們分析出世界上所有等價的事情,比如在這個遊戲中,我們可以看到DPS,假如你的命中率100%,攻擊力30,面對防禦力10的怪物,造成20傷害(是的,就是減法,這裡還沒法說減法不好,當然也不在這裡說,這裡僅為說明質的問題),我們給他在這個世界中的估價就是20分(20×1),那麼同等條件下,命中率80%的魔法,他的攻擊力應該是25,不難看出他也是20分的(好吧,別說25×0.8×1=20你都算不出來)。這裡x1代表傷害這個事件在世界中的價值,由於世界現在非常簡單,沒有其他因素影響,所以他就可以是1的,我們又何必把它定成0.5或者為了顯示自己高端把它定義為一個1.3724之類的看起來很不規整的數字自尋煩惱呢?那麼思路上上來說,我們給了物理攻擊受到傷害減免的懲罰,影響了他在傷害這個事件的估價,而給了他一定命中這個「獎勵」,影響了他在傷害事件的估價;我們給了魔法攻擊無視防禦這個特性影響了他在傷害事件的估價,卻給了他可能未命中的「懲罰」影響了他在世界的估價。本質上,這兩者平衡了,數據上,通過估價不難看出面對防禦力10的怪物,他們兩者表現相似(但不可能相等,至於具體差據,其實是一個概率問題,切比雪夫不等式會給你答案),至於再要進一步分析哪個好壞,我覺得你就進入了禁區了,因為我們已經製造了一個見仁見智的問題了,這就是給遊戲提供了一個樂趣了,我們沒必要進一步主觀的去把科學的問題複雜化,最後做的要麼做不出來要麼感覺很不對。

思路確定後,我們看到可行,那麼就加入這兩個屬性給角色。同時還有些不需要這樣去分析的屬性也可以被假如,比如我們需要移動方式——騎馬、走路、飛行、木輪(運輸隊?),這些是因為遊戲規則的允許,並且更好的體現世界觀才產生出來的,只要道理上說的通,他就合理,但是有一條最基本的道理就是,至少這兩兩之間必須存在差異,如果我騎馬和飛行在各種地形都消耗1點移動力,這就有些荒謬了。那麼我們在這個基礎上再加入一種移動模式——履帶行不?你說呢?

簡單的說,設計這種數值我們需要從實際出發分析問題,把問題存在的世界當作觀察對象,進行簡單的估價之後進行屬性設計,然後公式化屬性,讓他起到自己的作用,而公式化的同時,你還需要注意到一點就是你想要的曲線是如何的?你想要的是y=x平方的還是還是y=x的1.2次放的?自己分析吧,看你的遊戲需要什麼,但你必須注意感覺要對勁。

那麼是不是屬性設計到這裡就完了?當然不是,不然我也就不寫這段了,除此之外,我們還會為AI、角色成長定一些「隱藏屬性」,這些屬性玩家肉眼看不到數字,但是你一個自稱「數值策劃」的人也看不到可就麻煩了。

隨機地圖產生算法數值設計

上面說的這些都只是基礎的設計,如果你覺得一個數值策劃要干的就是不斷地「平衡」不斷的「反覆測試」上面這塊就算工作了,那活該你的薪資低於期望了因為你的工作量也低於了期望了。在這個項目中,我們還會涉及到一些數值設計,這些數值設計是玩家肉眼看不到的(好吧我不重複相同的話了),但是他們能感覺得到,並且在遊戲開發中需要用到。

隨機地圖產生算法,我們說這個遊戲的地圖是隨機產生的,那麼第一我們就想到了柏林噪聲,柏林噪聲用於產生3D遊戲中高低不平的起伏路,它的核心意義是「平滑」整個曲線,讓她更柔美。事實上如果你把它抽象到另外一個世界,你可以把這些曲線的值域分段,形成我們這種遊戲需要的地圖元素,比如水總是挨著平地的,那麼水可以是(0.25, 0.4],而平地則是(0.4, 0.77],好吧,這裡的具體數值毫無根據是我拍腦袋來的,只是說明你這樣可以讓水和地面相連,你同樣可以設計帶草的地面是(0.44, 0.79],再取到0.48的時候我們再算一次到底帶不帶草就好。這個數值的值域規劃是一個簡單的數值工作,這個程序員沒法替你完成,所以需要策劃自己去完成,首先程序員對遊戲現在有多少種地形,將來有多少種地形毫無興趣,但是對於地形種類會變,可是很反感的,因為「變」總是意味著「麻煩」,因此一個優秀的策劃可以用數學來解決這樣的麻煩。

那是不是隨機地圖就有了?當然不是,柏林噪聲嘛,你至少還得給版子定義倍頻和持續度(BTW,在這個過程中你應該自己總結一下如何建表,因為我都說了需要的屬性了,至於建表技巧,這裡我就不再重複了)。

除此之外,如果為了遊戲更精緻,我們還需要進一步工作,那就是用曲線分析出我想要的大概地形,簡單的說,我們的遊戲雖然是隨機地圖,但是根據我們派遣騎士去的地方特徵不同,他的地形應該隨機中也大概有點規律,比如我派騎士去的是魔法森林,都是森林了總不能老都是水和山吧,森林地形應該更多,這不是一個x%的比率設計,x%的設計方式是給非遊戲設計師(玩家)來用的,因為他們不需要具備這方面專業知識,而英雄無敵的隨機地圖生成也讓我們看到了糟糕的x%模式,我們要做的是,從橫向和縱向上對於一個區域進行橫截面分析,產生多條曲線,這些曲線符合我們上面說的值域規則,比如說森林,他的曲線應該儘可能保證值域在平原和森林之間(還要在別的之間?當然可以,更優秀的數值設計師能創造更優秀的地圖),最後程序根據你傳入的橫向縱向多條曲線、倍頻數和持續度,產生出柏林噪聲,然後通過映射到你的值域產生出隨機地圖來。

因此數值設計,更講究的是如何應用數學來描述你想要的東西,而不是去用一個公式驗算另一個公式達成否定推翻效果或者支持效果(這個工作也可以通過柏林噪聲做的更好)。

尋路算法數值設計

是的,AStar應該是程序員去寫,因為他們的優化能力遠比策劃好,但是有一點程序員寫不了,那就是其中的估價算法,可見這樣有地形的尋路中,簡單的曼哈頓算法不再合適,那麼程序員怎麼去做呢?他/她會感到困惑,因為想了一些算法,可能都不太適合你的需要,你很勉強的接受了,也讓他/她很為難。

因此策劃在這裡就需要去設計一個地圖單元格的估價算法,這個估價算法是針對移動力的,首先移動類型決定了移動力的消耗,那麼最簡單的一個做法就是移動力x1就是這個格子消耗力,而程序邏輯中將加分變成減分即可。當然這個算法並非相當科學,以至於最後表現的時候,角色並不一定按照你真實想法來走,有時候會有些彆扭。

好的數值設計師可以做到儘可能讓他貼切於人的思想,這其中的關鍵也是看你如何去應用數學創造這個算法。

性格與行為AI數值設計

接下來最要命的問題來了,我們都說了遊戲是放置型的,那麼事實上怪物和我方的行動都是AI控制的,這裡就有一個AI算法的問題,AI不是應該交給程序員才對嘛?那麼程序員,你玩過SLG嗎?火紋玩的如何?你對火紋的AI有多少瞭解?見鬼,老大當初怎麼招了你這樣一個不玩遊戲的程序員了!——只能說你的抱怨毫無根據,因為優秀的程序員把大量的時間花在學習好的程序算法上了,就像好的策劃會把大量時間花在研究遊戲(而不是玩遊戲)上一樣,術業有專攻,因此AI設計是策劃的工作。

AI的邏輯中其實是會有很多技巧的,我之前嘗試了一個很棒的AI算法,讓我寫著玩的SLG遊戲中雙方的角色都非常狡猾,狡猾的以至於我身邊很多火紋老手(即使是自稱的,他們對於這類遊戲也各有獨到見解,算是比較Hardcore了)都無法直接理解他們的想法,直到幾個回合後他們都拍手叫好,說這幾步走的太妙了,太聰明的AI顯然效果很不好,因為他們的行為超越了人的理解範圍,是的,如果你教會計算機思考問題,他的力量是不可衡量的。當然AI邏輯是一方面,驅動這個邏輯的才是我們要說的,那就是——數值設計。

首先在這個項目中,我們就需要為角色定義一些屬性(之前說沒完麼,是沒完吧),來影響他思考。那麼這個遊戲裡面角色要思考什麼?無非就是移動到哪兒,然後考慮是否打人打誰。「啊呀,這簡單,我個角色設定一個目標,然後他就衝著過去好了,比如血最少的」,那你看看效果好不好?當然這樣的做法也沒錯,只是最後高移動力成了懲罰了。我們至少需要讓每一個角色,對於地圖上的每一個單元格進行估價,評估出本回合這些單元格的價值,最高的價值的那個就是他要去的,而走不到的價值肯定都是低於1的。

之前我的做法過於複雜,我讓每一個角色都進行了深度思考,為他們設計了他們的團隊精神、他們的進攻慾望、他們的自保心裡等等屬性,讓他們既猥瑣又勇猛,最後出來了一個「太聰明」的AI,這就是因為估價的時候考慮了太多的因素,比如「我走到這裡,有多少人會打到我,這樣我大概受到最大傷害如何(當然我走到這裡了也會導致別人的行動範圍變化,比如我走到了一個「卡口」那麼同一時間只有一個敵人會近戰命中我)?我又可能在多少個友軍的庇護下?」想的太多,設計出公式釀成了錯誤。因此首先我們的數值策劃必須定義好每個角色的想法,然後再用數學去描述出他來,程序員需要做的只是讓角色選擇一個估價最高的格子過去,至於算法你愛咋該咋改,當然你可以要求程序員為你優化你的算法,畢竟coding技巧不是策劃擅長的而是程序員的強項,給他/她你的代碼,然後告訴他/她你的想法。

還是那句話,好的數值設計師會讓遊戲的AI看起來更自然,數值設計的根本是應用數學。

那麼策劃在設計數值的時候究竟需要些什麼相關的能力呢?我想這也是很多新手想知道的問題,從上面這些需要你去工作的項目來看,不難分析出你需要:

Feeling或者說是靈性

這對於數值策划來說非常重要,乍一看你會覺得數值策劃嘛,應該更理性,更相信科學而不是感覺,但事實上由於你是在應用數學,用科學去描述想法,因此首先你必須要能建立出好的想法,符合遊戲的Feeling的想法來,而一些基於這種靈感或者說Feeling的突破,才能被真正的稱為是創意,更重要的是創意別人感覺得到,看不到,而你卻用數學把他營造出來了讓別人感覺到了。

會使用搜索引擎

知識在這個年代是廉價的,因為網絡已經不再是神話,誰都能通過百度和谷歌找到想要的知識,而你需要掌握的是,知道我要的知識是什麼,然後輸入到搜索框,尋找出你想要的答案就好。我們不是搞教育的,不需要你「學生」把所有東西都背出來,用那些隨手就能查到的東西來填充你的大腦。

善於建立函數(或者說一些人說的數學模型)

對於任何事物,請用建立函數的思想去思考,這很重要,這也是邏輯化的關鍵(同時我對於男性遊戲策劃的要求如此,而對於女性我要求的是在UI設計方面的靈感,人類的染色體造就的這兩個方面的不同優勢真是沒法改變的,因此只能從區別要求出發),千萬不要提「一般情況下」,這代表你根本沒有用函數去思考,函數是一種自然規則——「當溫度變成30度的時候,人會感到熱、狗會吐出舌頭;當溫度到0度的時候人會感到冷、狗會……抱歉我沒這方面知識,需要搜索一下。」這就是大自然,一個函數,而不是if 30度如何如何,else if 0度如何如何,那麼28.34度呢?

應用數學分析並構建世界

當你有了idea之後,善於用數學去觀察他,簡單的用工作中的例子去看——你需要設計一個升級經驗表,你希望這個數值增長是怎樣的?用曲線去描述,肉眼一看就知道,之後就是把曲線函數做出來。進一步說明就是你的老大希望「我在20級是一個坎,60級是另外一個」,那麼升級經驗的2個點有了,再加入你的想法之後進行插值獲得函數。當然這並不是單向的,還包括了獲得等因素,但你思考的時候必須先統一為一個數去分析。

演算和驗算能力

一些東西要會去演算會去抽象,演算是驗算的基礎,至少你先得搞清楚事情,才可能去分析事情的好壞,不僅僅是數學公式,世界上的一切都如此,因為你需要會用數學去分析世界。比如說本篇中我定義的這個遊戲的玩法,你能演算出他最後是如何的嗎?那麼讓你來做你會如何改進?

產品 設計 遊戲 發動機 發動 數值
PermaLink: https://articles.zkiz.com/?id=64360


ZKIZ Archives @ 2019