RPG游戲開發日志12:隨機地形的思考

寫在前面

本項目同步上傳于coding上,國內讀者可以通過在coding下載項目。
也歡迎你加入我的UE4學習交流QQ群:872537977。如果你喜歡我寫的文章,也希望你點贊、收藏、轉發。謝謝!
如果你喜歡我寫的文章,也希望你點贊、收藏、轉發。謝謝!
如果你想參與到這個項目的開發中來,唯一的要求是像我一樣編寫開發日志讓更多的人看到并學習。
coding地址:https://git.dev.tencent.com/JeremyBrett/uRPG.git
上周五這周一請了兩天假,去內蒙古額爾古納散散心。回來之后就感覺很疲憊,前幾天下班回到家都是秒睡。今天算是緩過來一點了吧。這些天把開發任務暫時擱置了,在路上我也看了不少關于隨機地形的技術文章吧。還是有點兒困惑的,這次決定一反常態。不再記錄開發過程,而是把思考的過程也記錄下來跟大家分享,也希望小伙伴們能有些好的意見或者建議吧。大家分享一下。

Rougelike思考

在之前的策劃案那一期,我說我想做一款Rougelike向游戲,或者說沙盒游戲吧。這主要是考慮到我自己的短板,既沒有強大的劇情腳本撐腰,也沒有很好的美術效果或者程序產能。在這種情況下,能夠重復游玩的Rougelike游戲似乎是我絕佳的選擇。換句話說,我唯一能搏一搏的就只有“游戲性”了。
之前有寫過一篇關于Rougelike游戲中的資源投放設計的文章,看的人還挺多的。也有人質疑這部分內容應該是“關卡”內容而非“數值”內容。實際上所有和游戲體驗(游戲節奏)相關的內容都是有數值參與的。曾經有同事說出“我認為調體驗能不用數值就不用數值”的高論。我當時就很好奇“游戲體驗,不調數值?那調什么呢?”。有些人對數值的工作范疇有誤解,以為游戲中只有屬性、戰斗和道具價格,物品掉率這些和數值有關系。但世界上并非如此。
即使在一個線性敘事的單機游戲中,也要將一些核心參數抽象出來,用來不斷調試,達到最滿意的體驗。比如說這個線性敘事游戲總流程1小時,其中分為2個大章節(每章30分鐘),每個章節中有5個小段落(每段6分鐘),然后每個段落中會有1場戰斗(2分鐘),還有3個謎題(每個1分鐘)。這樣不斷拆解下來,就對要做的游戲有了更為客觀、理性的認知。也就解決了不知道如何開始制作的問題。
有點兒扯遠了,還是說會Rougelike的問題上來,在這個游戲中,我首先想到的就是可重復游玩的價值。《文明》為什么會不停的開新存檔?為了刷出一個更新奇的開局地點。每一次開局都會至少在前期創造一種完全不同的游戲體驗。《饑荒》、《minecraft》等沙盤生存游戲也是如此。
但是我又想到了另一種不同的可能性,那就是《騎馬與砍殺》。騎砍的地圖并不是隨機的,騎砍隨機的是另一個維度——事件。騎砍的世界有一套自己運行的機制,所以雖然世界是固定的,但事件是隨機的。因此每一個新的存檔的體驗也會有很大不同,這種差異是很強烈的。換句話說,即使玩家有意為之,也很難復刻完全相同的劇情。
但是關于隨機事件,這是另一個話題了。我們今天首先考慮的還是隨機地形的問題。

什么程度的隨機地形

事實上我一直再考慮這個問題,是否要使用隨機地形?是哪種程度的隨機?是體素世界嗎?是無限還是有限的?
我很快回答了第一個問題:我要使用隨機地形!原因很簡單,有隨機地形元素的游戲讓我著迷。我能隨便說出我游玩時間最長的游戲:《饑荒》《文明》《缺氧》《環世界》《放逐之城》等等都是隨機地形的!我著迷的游戲元素,我也能最大程度的去還原這部分游戲體驗。
接下來第二個問題:是哪種成都的隨機呢?
要不要做一個體素的世界呢?從《minecraft》開始,到最近玩的《方舟:方塊世界》、《創世小玩家2》這幾款游戲,我必須要說,體素世界有太大的游戲,那就是堆積木似的游戲體驗。體素是游戲世界的基本組成單位,這帶來的是超棒的擴展性。舉個簡單的例子,未來我想做一個“建造系統”,這個建造系統可能類似《堡壘之夜》、或者其他有建造元素的生存游戲,但是這樣的工作量會翻倍。我也并不知道能否駕馭這種工作量。但是類似的系統在體素世界里要簡單很多!所以這個念頭很誘人,讓我幾乎沒有不使用體素的理由!
現在好了,來回答第三個問題吧:是無限的大地圖嗎?
《minecraft》有著無限的地形,但它的問題就是局部重復性很高。事實上我認為地形的“大”是個很難傳達給玩家的概念,或者說只能作為一個噱頭。玩家在意的是游戲是否好玩,但地形的龐大并不能和游戲行建立直接的關系,參見《無人深空》。基于這個思考,最終我打算使用大小固定的隨即地形,就像《饑荒》或類似的游戲那樣。
現在,基本的方向我們明確了,那么我們來考慮一下關于技術實現的一些設計思慮吧。

使用C++

很不幸的消息就是我在地形生成這部分將使用C++完成,雖然我認為用“藍圖”也可以實現這部分功能。但是眾所周知,使用藍圖來實現算法部分是很痛苦的事情,原因就是運算過程變成一個個節點后反而麻煩,影響開發效率,并且在執行效率上也沒有優勢,我們在開始使用藍圖的時候說,它是為了提高開發效率而犧牲部分執行效率,既然在這個環節上開發效率也沒有提升,那就果斷選擇C++了。

設計過程

我想具體的設計和實現過程可以單獨寫一篇文章了,我這里只是大概介紹一下我實現的順序。首先是實現一個無限生成的大地圖。這個大地圖由若干個Chunk組成。玩家的坐標更新時,這些Chunk會跟著加載或卸載(所謂加載或卸載就是將對應的Actor產生或移除,并將數據緩存起來,以此來達到提升性能的目的)
然后就是使用噪聲來生成不規則的地形了。這部分看起來不容易,但實際上還算簡單。
真正復雜的是關于生物群落的創建,這部分我暫時思路還不是很清晰。一邊做一邊思考實現方式吧。有了解相關實現方式的小伙伴也歡迎分享一下。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容