從無到有的遊戲開發心得 - 這兩年獨立工作的流程檢討

製作遊戲是學習軟體開發以來一直很想做的事情,但在實際製作的過程中發現了很多自己缺少的思考能力,也帶來了很多挫敗感。2020 年 5 月初我給了自己一個 40 個小時的工作期限,在這之前要將一款遊戲從無到有生出來,並且事後要檢討作業流程,紀錄一下開發作業遇到的問題以及解決方式,而這段時間開發的成品是一款叫做「Unstable Rider」的手機遊戲(尚未上架)。


Unstable Rider - 最有趣(?)的夏日騎車遊戲

這並不是一個成功經驗


首先必須要強調的是,這份文件比較偏向於我個人開發的紀錄,主要是試著以客觀的角度全面觀察,在一個極限條件之下,自己能將遊戲開發進行到什麼程度,我手上擁有那些籌碼?如果想要更加快速,我還需要什麼資源?


對於有興趣但沒有經驗的人而言,或者是已經開發一兩年卻沒有成品的製作者,也許還是一份可以參考的資料。


我自己是軟體工程背景的開發者,對我而言軟體方面的資源是最充足的,因此必須要著眼在其他領域的部分,例如企劃、執行方法、時間管理,以及行銷。


每個人、每個團隊所適用的方式以及所遭遇到的問題可以說是完全不同,這也是產品製作最難、最有趣的部分,一旦你披荊斬棘找到了屬於自己的製作流程,那麼就誰也搶不走,以後無論遇到什麼問題,都可以最快的速度開始執行。


善用輔助製作的工具


遊戲必須是一個結構完整的小世界,即使是簡單的遊戲也需要一個完整的系統,除了要幫自己規劃目標,也要幫玩家規劃目標,從遊戲開始、遊玩過程到結束,至少要有一個循環的完整體驗。


因此遊戲製作的本質上是多個管理、決策問題的總和,而一個人要完成這些需要一些簡單好用的工具來輔助,接下來就介紹一下我在這次專案中使用比較多的一些工具來分享一下。


內容計畫


要在沒有任何計畫的情況下開始執行通常不會是一件正確的事情,但太多的計畫也會使人裹足不前,這中間該怎麼取捨確實是一件困難的事情。這時候分階段的計畫變得相當重要,先推薦一下一項線上工具 Milanote,依照個人使用習慣不同,可以有不同的使用方式,我主要是拿他來作隨手筆記以及決策紀錄,有興趣使用的人可以使用我的 Milanote 推薦連結 來註冊。


Marketing Plan Template, within the Milanote app
Milanote 是一個不錯的專案看板工具,如果你習慣使用 Trello 也可以。

以 Unstable Rider 的開發來說,我使用了畫面導向的計畫方式,也就是「從畫面來切割功能」,以最少的畫面來說,就是主畫面、遊戲介面,跟一個管理場景切換與載入的功能性場景。


程式開發


以遊戲製作來說選用一個好用的 Game Framework 可以省不少事,尤其是當你需要製作跨平台(例如手機 + 桌機)的遊戲,可以省下大量開發時間。主流的 Unreal Engine 跟 Unity 都很強大,但學習門檻也會相對高一些,Godot 的功能雖少,但應付簡單的遊戲開發已經足夠。


以一個軟體工程師而言,評估各項工具是否適合自己使用會相對輕鬆一些,但對非軟體工程背景的開發者而言則不是那麼容易,這時候多去看看別人的說法會是一個比較有效率的作法。如果看了許多分析還是不太知道該選擇哪一項工具時,選擇最多人用的則絕對不會有錯。並不是最多人用的東西最穩定,而是你遇到問題時,至少都找得到人問,找得到人解答。


我自己之所以不使用 Unity 的原因主要是我的筆電不太夠力,Godot 目前的發展相對於 2.x 版本也穩定許多,Unity 則是正好在 Render Pipeline 轉換的過渡期,許多功能相對有一些穩定度的問題,會需要時間作 workaround。


至於如果需要各項 Game Framework 的使用教學,這邊可以推薦幾個頻道(大部分都是英文):



繪圖


3D 繪圖軟體連業界都開始傾向使用 Blender,他好用又免費,對於窮困的獨立製作者而言,基本上沒有什麼其他選擇。兩年多前有學習了一些 Blender 的操作,臨摹三視圖做一些 Low Poly 的模型還算可行,不過光想要去找圖庫來慢慢描可能會花不少時間,我上次操作 Blender 也已經是一年前的事,只記得 G 是 grab,E 是 extrude,其他搞不好都忘光光,於是考慮了一下決定上 TurboSquid 找現成素材。


TurboSquid 上有很多質量不低的免費 3D 素材,只需要在使用時標示作者即可。

其他不錯的素材網站有 SketchFabcgtrader 等等。看到好素材不要吝嗇花錢,有時候一個高品質的 3D model 甚至省一餐就能買到,相當超值,而且 3D model 的重複使用性強,不用執著於一定要使用免費素材。


數學模型


遊戲的行進過程中常常需要建立數學模型,例如等級提升需要多少經驗值?難度曲線是線性成長或是曲線?預計讓玩家遊玩的時間上限?這些數字能夠幫助開發者在決定遊戲難度時,用更精確的方式去量化遊戲進行到某個時間點時的難度。


Unstable Rider 隨著時間玩家騎乘的距離越遠,有陰影可遮的機會將會越來越少,這部分也是靠 Desmos 這個網站簡單畫了幾個函數來達成。


Desmos 能夠繪製並儲存數學函數圖

音樂


本來打算自己做一段類似頭文字 D 的那種 Upbeat Eurodance 音樂,但因為取捨某些功能花了太多時間,導致我只能用之前的作品來放。


音樂資源可以到 GameDevMarket 去找。


音效


從音效庫搜尋想要的音效其實比想像中費時許多,因為音樂跟音效都不像圖案那樣可以一眼瀏覽很多資訊,必須一個一個去聽去過濾。時間有限的情況下,我使用了 BFXR 這個工具來製作簡單的音效,日後要作精緻一點再代換聲音檔即可。


簡易的遊戲音效合成器軟體 BFXR

挑戰與解決


功能取捨


在 Milanote 上寫下對遊戲的想法後,發現需要解決跟取捨的問題實在太多,而作決策時要考量的面向太廣的話,會增加決策難度以及拉長開發時間,因此我選擇了一個最優先目標:最小化開發時間。有了這個目標之後,本來打算自己刻 3D 模型、作配樂的計畫立刻無法實現。但如果不這麼做的話,恐怕半年後都還不會有 prototype 可以玩吧。(笑)


另外為了進一步縮短時間,我給自己設下了「每個功能開發或作決定不能超過 2hrs」的限制,當然這個限制有點籠統,不過在明顯覺得思考某個問題過久之後,就可以提醒自己還有這項限制的存在。在做每個功能跟嘗試之前紀錄一下開始的時間點也是一個很好的方式,幫助自己釐清是否在不必要的功能上花費了太多時間。


遊戲模式


首先如果你沒有遊戲企劃的經驗,建議可以多看一些 Game Jam 的影片,了解別人創造遊戲的發想過程。慢慢建立一些「怎樣的遊戲比較好做」的觀念,這樣才不會不小心選了一個不好起步的路線前進。


Unstable Rider 一開始的發想是在某個大熱天騎車時,發現自己常常需要躲在陰影底下遮陽,沿途就想了一下遊戲該怎麼進行:「玩家以時限內騎車最遠距離為目標,但被太陽曬太久會曬死。」成了最核心的系統概念,為了增加遊戲有趣的非現實成分,我特別多加了「曬到太熱時會有爆發性的加速」這個設計,當然最初的構想還有交通號誌、回血機制、延時機制等等,但開發途中都因為想在時限內完成而通通捨棄了,日後的版本再加上去吧。



工作細節與那些先被捨棄了的功能


許多決策問題中,遇到第一個卡關的是:遊戲畫面應該要是直式還是橫式?這看似簡單但實際上不是一個容易的決定,當遊戲打算要出在手機上時,就要考慮到手機基本上還是直的拿比較好拿,如果要設計讓人在大眾運輸上通勤時可以打發時間,那麼一手拉著拉環的情況下就無法操作橫式遊戲了;橫式的遊戲則是適合在玩家已經穩定坐在一個地方,可以專心投入的情況下。這會依照企劃者對於這款遊戲定位為休閒向還是競技向而有所不同。Unstable Rider 在極其有限的開發時間以及 2hrs 的單題思考限制下,決定了休閒向的主要路線。


再來是陰影角度。本來打算樹的陰影隨著日照時間而有所不同,這方面的程式其實也不會太難寫,只要太陽光的角度跟玩家身上的 RayCast Detection 一直是相反的向量就可以了,問題在於「視覺」的部分,這個 3D 遊戲畢竟不是使用 VR 來操作,人眼對於虛擬的 3D 景象,要抓距離是很困難的一件事情,而以這個遊戲被定位為休閒向的前提之下,開發到 2hrs 就立刻進入決策階段並且將這個功能捨棄掉了。


還有交通號誌,這是一個不算難寫,但卻嚴重影響遊戲體驗的一個功能,本來這個功能是核心概念,玩家必須要在紅燈前找地方躲,以免被曬死,但紅燈一多變得整場遊戲需要玩家操作的部分變得很少,反而花了很多時間在等紅燈,這個玩起來有一點荒謬,因此後來還是先移除了這項功能,日後再加入囉。


畫面特效上,本來打算除了 Particles 的應用之外,還想順便寫一些之前學的 Shaders 來增加豐富度,不過 2D Shaders 跟 3D Shaders 還是有一些不同,為了節省時間也是先打入冷宮了。


至於廣告,一方面是因為自己實在也是很討厭遊戲遊玩中一直有一些低質量的廣告插入,一方面是之前去 SensorTower 查了一些資料,發現有些沒有廣告的獨立遊戲營收也是不低,主要還是消費模式要建立起來,因此最後還是決定不放廣告。


另外,雖然決定用現成素材而不自己刻,但途中發現了 3D 素材網站有些共同的奇怪問題,例如很多作者附了 .obj 檔卻沒有附 .mtl,這就跟只給 .htm 沒給 .css 檔案一樣意思,或是附了一些 .f3d 這種 closed source 的格式,我花了蠻多時間才找到一款 CAD Exchanger 可以無痛轉檔,這應該是開發過程中意料之外多花時間的部分了。


從無到有的迷思


兩年前我有開了一個遊戲專案,堅持不使用別人的素材、程式、音樂,不參考同類型遊戲的作法,且不與人討論,從頭到尾自己想自己做。


我不認為這個方向是錯誤的,畢竟這個專案對我自己而言有一件獨特的意義,但兩年後的現在沒有產品產出也是事實,在有限的時間以及自己能力不足的情況下,也只能選擇用一些手段來妥協。不過製作的過程中想到,我使用 Game Framework 基本上就已經也是使用了別人的程式,因此陷入了一些很困難的邏輯思考。最後我所能想到的折衷方式就是另起一個專案捨棄這些堅持,但原來的專案還是繼續並延長開發時間,畢竟此刻我相當需要一些自己的作品集,而不是一個永遠無法完成的(自以為的)大作。


後職業倦怠症候群


雖然現在與職業倦怠可以和平共處了,但適當的休息以及工作壓力釋放還是相當重要的。工作一陣子後常常大腦會習慣性的放空,會有點無法判斷接下來要作什麼事情比較合乎效益。簡單來說就是「開發者的大腦」跟「管理者的大腦」沒有辦法順利切換,這種情況也許使用番茄鐘工作法會是一個不錯的方式,穿插開發工作與決策工作,用鬧鐘定時提醒自己在不同的角色中切換,以免陷入一個問題花了太久時間。但番茄鐘我一直沒有找到一個合適的輔助工具來使用,這方面我會再找找能夠與行事曆跟 ToDo List 完美整合的工具。


另外釋放工作壓力的方式,我選擇了一個最偷懶的方式:喝氣泡酒。


好啦,其實還有玩了一些遊戲,畢竟我這人還是蠻喜歡 hard fun 的。前兩個月開始我規定自己一週要玩三個新的遊戲,並嘗試在自己覺得不錯的遊戲上破關,在這邊順便推薦一些這幾年覺得不錯的遊戲:


  • 單人動作:Celeste(蔚藍)
    2018 年的獨立遊戲大作,IGN 滿分神作就不用多說了吧。
  • 益智休閒:Kami 2
    這是我說的那款沒有廣告但收益卻不錯的休閒小品遊戲,畫面非常精緻,填色遊戲方式雖然並非獨特但因為動畫展示方式而給人耳目一新的感覺。
  • 多人合作:Arena of Valor(傳說對決)
    DOTA 類型遊戲一場需要花費較多時間,而 AoV 這款遊戲針對在手機上遊玩而簡化了許多複雜的遊戲機制,門檻相對也降低很多,我自從玩了這款遊戲之後也變得比較能看懂多人塔防競技比賽那些微操作以及控線入野等戰略決策,由於單排需要面對各式各樣不同的人,且常常玩輔助跟打野位,連 EQ 都變得很高,畢竟要跟討厭的人一起團隊合作從來就不是一件簡單的事情呢。
  • 卡牌遊戲:Slay the Spire(殺戮尖塔)
    是需要耗腦的回合制 PVE 遊戲,每一局都是獨立的,可隨著遊戲進行解鎖更多遊戲內容,但原則上不需要練等,每天玩個一兩局已經相當足夠,想要動腦玩一些策略但又不喜歡過於龐大的戰略型遊戲,這款會是不錯的選擇。

最後 5 小時


途中取捨了很多功能,不過開發階段還是來到了尾聲。最後 5 小時,花了蠻多時間在瑣事上,例如產 AppIcon 以及上架 App Store 所需的螢幕截圖等等。這方面之前雖然也是有經驗,但再操作一次還是時時刻刻都想罵髒話。臨時抱佛腳找了一些產圖的網站但要不是都要支付高額訂閱費用,就是功能不齊全。


好不容易把該填的資料填完準備送審,才想到還有行銷這回事(崩潰)。當然這種只花幾天開發的小糞 Game 要吸引人來玩本來就是一件不太可能的事情,因此行銷這方面也是簡單成立個粉專,轉貼自己的廢文這樣就結束了,算是有點虎頭蛇尾。


可以再做更精緻的部分


如果要我選擇的話,我希望這個時限內做出的遊戲至少能再加入這些元素:


過場動畫


主畫面跟遊戲畫面之間目前是沒有動畫的,即使場景載入的程式不是寫得很順利,但基本的過場動畫還是不要偷懶比較好,現在看起來覺得這讓遊戲的完整度缺了一些,蠻可惜的。


延長遊戲時間


基本上雖然這是一款休閒向遊戲,我還是希望玩家能有機會在單指操作且熟練的情況下,可以秀一下操作。目前想到的方式是用手指向上滑動翹孤輪吃補包的方式來回血或延時,讓玩家有機會可以追求極致高分,這方面還在構想數學模型中。


一些ㄎ一ㄤㄎ一ㄤ的東西


「遊戲性不如其他作品,那麼至少畫面要有趣吧。」在最後處理行政問題的那五小時中我才想到這件事情,不過 3D Shader 完全沒有好好花時間寫過,要現在寫,臣妾作不掉啊!


於是到最後在主角被太陽曬到開始扣血的時候,讓牠以不合理的角度旋轉了一下,這個程式基本上只寫不到 8 行,不過讓整個畫面總算看起來有了一點靈魂,這是之前沒有好好考慮到的事情,以後還是多花點時間優先考慮一下好了。


大麻趕快合法化啦(咦)。


然後


App Store 送審至今已經被退了好幾次,網路上查了一下發現是沒有企業憑證的開發者本來初次送審就會比較困難,大概是沒辦法趕上預定的上架日期。這個計畫算是失敗啦~


不過這也沒關係,因為我總算是從三年前的泥沼中踏出了一小步,這份紀錄就當是一份給自己的結業證書,這個部落格會不會也從此跟著 Unstable Project 從廢文平台畢業了呢?齁齁。


Unstable Rider 遊戲的開發還是會繼續,但計畫上我必須要開始下一個小遊戲的製作了,下一次希望可以順利上架呀。