獨立遊戲開發是如何讓我進退兩難的?

遊資網發表於2019-07-25
引子

最近,這個折磨我多年的專案終於完成了。現在有種當年高考結束後的那種,空白的感覺。繃著的弦鬆了,之後是急劇的脫力感。其實還有一些收尾工作要做,但每次開啟電腦之後,都是坐著發呆。拖延了一個星期,還是覺得應該寫個總結。至少把自己走過的彎路寫下來吧。

做獨立遊戲,我覺得至少應該具備三個條件:

1.具備能看懂技術文件的英文水平

2.具備基本的程式設計能力

3.具備基本的將想象具像化的能力

但如果你像我開始的時候一樣,什麼都不會,我會鼓勵你保持熱情,但我不建議你真的全身心投入進去。如果還是心中躁動不安,無論如何都想嘗試的話,我真的希望每一個這麼有熱忱的人都能成功。所以我寫了幾條淺薄的建議,至少請你規避我犯過的錯誤吧。

所以,這應該算是一篇錯誤經驗總結,以下的建議或者犯得錯誤可能在專業人士眼裡不值一哂,但這些東西的確困擾了我很長時間,我希望我的這點建議能夠給予像我一樣,一無所知而又無知無畏的愣頭青們些許幫助吧。

問題之一:目標不明確

其實開始的時候,目的並不是做獨立遊戲。根本就沒敢想。當時只是想做一個demo,好讓自己去應聘的時候更得心應手一些。但是做著做著就開始失控。誰說的來著,創作是件非常讓人上癮的事。

開始沒多久的一天,我突然意識到這可能是長這麼大頭一次做自己的東西,做自我表達,那為什麼一定要做一個demo呢,直接做成遊戲的話表達的不是更清楚嗎?說幹就幹,從那天以後專案鋪的越來越大,想法也越來越多。潛識裡就想把它做好,這個功能想做,那個東西想加進去,再加上那個時候精力無限,從早上一直忙到晚上十點多,飯都能忘了吃。那段時間很過癮,但也因為那種熱血上頭的狀態,使我忽略了很多問題,為以後的日子埋下了不少隱患。

第一個被忽視的問題就是,目標不明確。

憑著飽滿的精神和一腔熱血,看似每一天都很忙碌。但倒底要做成什麼樣,自己並沒有想好。在很長一段時間裡,我的工作模式都是,突然有個想法感覺不錯,然後馬上去搗鼓出來的個原型,一會兒又覺得那個創意很好,立刻著手做個功能實現。最後發現積攢下來的東西,前言不搭後語。這些也許可以作為素材以後用,但是做遊戲不能這樣想到什麼做什麼。

創意可以天馬行空,但程式是一個系統工程。我是後來看羅伯特麥基寫的《故事》-第十九章-作家的創造方法才意識到這個錯誤。之後又推倒重來,浪費了大量時間。

總體而言,成功者和掙扎者之間的區別在於他們相反的工作方法:從裡到外和從外到裡。掙扎型作家傾向於採用這樣的工作方法:他憑空想出一個想法,稍加醞釀,便直奔鍵盤。——羅伯特麥基《故事》

真是當頭棒喝。將demo改成獨立遊戲的決定做的太草率了。其實無論在何種狀況下,如果打算做獨立遊戲,還是應該冷靜下來,認真考慮一下的。現在回過頭來看,更恰當的方式應該是,像大家廣泛建議的那樣:在開始動手做之前,先完成一個事無鉅細的設定文件。比如遊戲的核心玩法是什麼;要用什麼演算法實現;是3d還是2d;是橫版過關還是第一人稱;需要講故事嗎;要講故事的話是線形敘事還是非線性;需要人物嗎;人物動畫是幀動畫還是骨骼動畫……

或者收集腦子裡蹦出來的各種畫面,比如坐車的時候窗外流動的霓虹燈,進而做出個特效;比如在快餐廳吃飯的時候看到的某個角落的景色,從而做出個場景;最後將這些零零碎碎的東西整理拼湊出個大綱。

這個過程需要的時間可能要比想象中的長的多,但好在這個部分可以在大腦中完成,有些時候只需要紙和筆,而不需要耗費過多的資源。在這個設定完成之前,不建議動手去做,但也不是說這個工程中就不需要寫程式了。想法還是需要去通過寫程式去驗證,看是否能夠實現或者效果是不是足夠好。

比如,我就曾想在遊戲裡實現一個畫面波動的效果。以下是將這個想法實現的過程,可能會感覺非常冗長:

獨立遊戲開發是如何讓我進退兩難的?

靈感

在網上搜尋一番之後,發現最常用的方法是用OpenGL自己寫一個shader,然後加進遊戲裡。但是我對OpenGL一竅不通,又不想花時間學習,當時就想放棄了。不過在瀏覽遊戲引擎SpriteKit類庫的時候,發現有一個叫SKEffectNode的類,文件中提了一句說可以呼叫CIFIlter類實現某種效果。我又去看CIFitler類,這個類好像是iOS用來處理圖片的,其中有一些Distortion的filter效果看起來很有趣,也許能用來實現我想要的效果,但是這些都是處理靜態圖片的,並不能處理動態的東西。

獨立遊戲開發是如何讓我進退兩難的?
CIBumpDistortion文件說明

前提

實驗嘛,那就弄著玩唄。SpriteKit是先在ViewController裡設定一個SKView,然後再通過SKVIew的Scene屬性來設定遊戲內容。所以基本上這個Scene類就是遊戲場景的地基,之後所有的人物啊,物體啊等等就加在這個Scene裡。文件裡有一個提示,說SKScene類其實是SKEffectNode的子類,所以也就是說如果對Scene類像使用SKEffectNode類一樣操作,比如指定filter什麼的,理論上是可行的。並且對Scene新增效果,那所有新增到Scene類的子類都會有相同的效果。

獨立遊戲開發是如何讓我進退兩難的?

獨立遊戲開發是如何讓我進退兩難的?
SKScene是SKEffectNode的子類

實施:

1.實際操作之後發現黑屏,而且記憶體猛增。不好使?

2.看log發現實際上方法已經執行了,但不知道為什麼沒有效果。難道不相容?官方文件上建議可以使用CIFilter,應該是沒問題的。

3.於是又重新開了一個hello world工程,用最簡單的方式測試,這次卻可以執行了。

4.好吧,最起碼證明這個方案是可行的,只是不知道為什麼在我的遊戲工程裡不行。像我這樣的凡人,就只能用最笨的方法,一點點的去試,看到底是哪裡出了問題。於是我在遊戲工程里加了一段跟在測試工程裡一模一樣的程式碼,執行之後發現還是不行。

5.唯一不同的是在測試工程裡用的是隨便找來的圖片素材,而遊戲工程裡是遊戲素材。這次又換成測試工程裡的圖片,執行之後,ok了。

6.所以是素材的問題,又是一番測試,最後得出結論:想要通過SKEffectNode實現效果,整體Scene的內容不能大於1024*768。超過這個尺寸就無法顯示。這一點我覺得應該在文件裡註明的,但是並沒有。也許寫在別的地方了,但我沒有發現。有很多時候文件並不會寫的事無鉅細,在網上也找不到與之相關的帖子。

7.總之,又是對素材和場景一番修改,總算是可以執行了。但是如之前所說,CIFilter是處理靜態圖片的,而這個Distortion在設定好,center,scale等等引數之後,效果是固定的。比如這個圓心就在那個位置,然後半徑就是那麼大,而我需要的是動態的,是半徑逐漸變大的波動效果。

8.電影的原理不就是每秒24幀,本質上也都是靜態圖片。想到這,心裡也就有了答案。只要在一秒以內更新24次以上就行了,而遊戲引擎自身攜帶的update方法就是每秒更新60次,所以把變化的方法寫在update方法裡就能實現動態效果了:

獨立遊戲開發是如何讓我進退兩難的?

最終效果:

獨立遊戲開發是如何讓我進退兩難的?

雖然說不應該邊想設定邊寫程式,但我說的是應該將設計與實現分開,其實上面寫的這個過程是想法的驗證,應該算是設計的一部分。做遊戲絕對需要奇思妙想,但將想法落地,要比想象中困難的多,而且很有可能完成的東西,的確實現了想要的效果,但卻和想象中的不一樣。

在整個遊戲的構思慢慢成型之前,這種橫衝直撞的試錯階段會持續很長時間,新接觸的時候尤其如此。這是一個驗證的過程,也是一個妥協的過程。也正因為這樣,這種耗時費力的工作應儘量在設定階段完成。如果像我一樣,想到什麼做什麼,很有可能會因為,不斷在發散思維和邏輯思維之間做轉換,且因為想法驗證出錯而打擊積極性,搞得自己精疲力盡。

沒有文件或明確的目標,就是需求不明確。需求不明確,就沒法做需求分析。沒有需求分析,就沒法有條理的做設計。沒有設計,也就沒法做功能實現和程式設計。

從外到裡的寫作:邊寫對白邊尋找場景,邊寫場景邊尋找故事———是最沒有創造力的方法。——羅伯特麥基《故事》

總結了失敗經驗,才發現動手去做所花費時間反倒不是最長的,而做設定也是需要耗費大量心血的。

通過這個經歷也折射出第二個我沒意識到的問題:

問題之二:做獨立遊戲花費的時間往往超乎想象

很多成名老哥都說過這個問題,像高瞰老師和吹哥都說過:人們往往對專案週期估計不足。但我聽到這些忠告的時候都是專案進行到中後段,進退兩難的時候了,並沒有起到什麼作用。所以我希望你看到這個建議的時候,還來得及。

設定需要異想天開,然後還要驗證這些想法能否實現。尋找靈感和處理bug都需要時間,如果你做的是個全新的東西,出了問題也只有你自己能幫你。因為別人沒做過,也就沒遇到過這些問題,自然也無法在網上找到解答,時間上更是沒法保證。

我應該建議:對專案週期有足夠的估計,但這也可能是一句廢話。

獨立遊戲開發是如何讓我進退兩難的?

嘗試新的東西,總會有新的問題。而新的問題誰也不知道什麼時候能解決。所以,要做好足夠的心理準備,慎重選擇開始的時間和地點。在什麼時間,什麼樣的地點,看似微不足道,但如果對開發週期估計不足,這些因素反倒會成為最棘手的阻礙。

時間

兼職去搞聽起來不錯,下班之後總能抽出點時間吧。但是如果是遊戲開發相關的職業,工作壓力還是挺大的。加班是常態,回家之後倒頭就睡,連週六日都在家中補覺。就算時間抽得出來,精力也抽不出來。如果不是it相關,就算有時間,也得花大把時間從頭學起。學習是最累的,而世上大多數工作都不輕鬆,等費勁心思鼓動起來的寥寥熱情與精力消耗殆盡,卻連基本的動畫與移動,都無法做到同步的時候,也定會產生放棄的念頭。但只要意志堅定堅持下去,無論是以上哪一種情況都會有成效的,只是無法改變兼職所帶來的事倍功半。

只有全身心投入,才能以最大的效率去隨心所欲的創作。但無論做什麼,將自己全部的時間投入進去勢必會打亂生活重心。而在這樣的情況下,對開發週期估計不足,就可能會消耗大量的成本。時間成本自不必說,生活成本超支的痛苦往往超乎每一個社會新鮮人的想象。宮崎駿曾經說過:要想隨心所欲的創作就要攢夠五年的生活費。可能原話不是這麼說的,但說的是這個意思。

時間總會不知不覺的流失,但究竟時間都花在哪了?以我自己的情況舉例,首先是畢業後的這個時間點可以說非常糟糕,不確定性太多,導致專案在前期時一再中斷,拖長了週期。但無論怎樣,憑著下班後抽出來的空閒時間兼職做了一段時間之後,感覺自己也積攢了一些經驗,專案也初見雛形。但如果集中力量全職去做的,覺得三個月就能做出成品,遂辭職回家。

嘿,愣頭青,什麼也不懂,怎麼可能會估計的準呢。

獨立遊戲開發是如何讓我進退兩難的?

當初說是三個月,可三個月之後又三個月,三個月之後又三個月。

就像上面提過的,驗證新的想法並將其實現,耗時費力。但有很多看似普通的問題,不一定很費腦子,但做起來非常麻煩。比如最基本的角色移動,想起來很簡單:玩家發出移動命令,人物移動到指定地點同時播放走路的動畫,到達地點人物停止移動並停止動畫。

但是真正程式設計起來就很複雜:

  • 什麼時候開始移動?是點選手機螢幕之後,還是點選的手指抬起之後。
  • 是勻速移動,還是先加速再勻速?
  • 就先設定成勻速移動,但是如果在角色第一步抬腳的動畫開始的時候就移動,那人物抬起的腳還在空中,人物已經漂移了,不行,太突兀了。
  • 必須要在人物第一步落地之後再開始移動,這就需要把人物走路動畫分成,抬腳,走路迴圈,停止走路三種動畫。
  • OK,設定完動畫狀態,使人物在抬腳動畫播放完之後,再觸發移動方法,但是人物已經移動到指定地點了,人物的動畫還沒播放完,還在邁步,怎麼處理這個情況呢?


開始的時候,我每天處理最多的都是這些細枝末節的問題,因為是新手,沒接觸過自然也考慮不到那些細節。對我來說這個過程沒法避免,只有通過不斷的犯錯和學習,才能最終找到合適的解決方案:

獨立遊戲開發是如何讓我進退兩難的?
人物走路的邏輯圖

單就這一個問題,在腦海中設想,也就三分鐘,但做起來兩天都不一定能從各種bug裡找到出路。這還沒涉及到場景之間的轉換問題;戰鬥系統里人物的ai問題;另外我用的是橫版過關的視角,還要處理人物離螢幕遠近導致的上下關係變化;還得考慮人物離螢幕遠近的大小關係,從而實現透視效果,等等等等。

時間就是在這樣不斷解決零散問題中悄悄流逝的。

地點

當時間超出預期的時候,你會開始變得焦躁不安,而且日漸嚴重。而長時間深入簡出使你在親戚中宣告遠揚,你的臥室會變成十里八村七大姑八大姨鍾愛的旅遊景點,各路沒聽說過的陌生親戚會強裝客套滿臉堆笑以示關心的擠破門來想要一睹你超凡脫俗的尊容。讓本就心急如焚注意力難以集中的你更加精神渙散。所以這裡有個衷心建議:除非是你自己的房子,你一個人住,否則千萬不要在家裡工作。

很多時候你自己最清楚風險是怎樣的,而你身邊的人往往覺得你不知道,會不斷提醒你。也許你不往心裡去,因為你自己最清楚自己在追求什麼,但誰也耐不住這樣日復一日的干擾。給自己一個良好的工作環境能提升不少效率,這個地點設在哪裡都行,就是千萬別設在家裡。

時機

說了這麼多,那到底什麼情況下開始比較好?在我看來,做獨立遊戲的最佳時機應該是在大學階段。

我特別後悔,為何沒有在大一時萌生想法的時候就開始。即使起初沒找到入門的途徑,也應該堅持求索。大學時期,只要不是勵志搞學術,只單單應付考試的話,相信絕大多數人都有充裕的業餘時間。如果你是遊戲開發相關專業,程式設計,美術,數字多媒體藝術等等的在校大學生,並且有做遊戲想法,那我建議你馬上,立刻動手。也不用花太多時間,只要每天拿出兩小時搗鼓搗鼓,一年下來也應該能做個差不多的東西出來。四年下來能積攢不少經驗,即使只做出了一個遊戲,那也會是個不錯的畢業設計,運氣好還能靠它掙點零花錢。

當然,剛開始立項要緊湊,不要鋪張。先做設定,慢慢驗證,想法成型之後再做成品。

第一,大學時期精力充沛。第二,大學時期食宿不用操心。第三,也是最主要的,大學時期有時間,時間是最大的本錢。並且這也算是課餘練習,失敗了也無所謂。

簡單建議

1.選擇遊戲引擎

對於初學者而言,無論是什麼平臺,相對3d引擎而言,選擇先從2d遊戲引擎開始,會更輕鬆一些,至少可以先了解一下游戲的開發機制。而我自己選擇了2d引擎之後,平臺上則選擇了手機平臺,因為它相對來說更加輕量化。

我最開始也打算做3d的,但是建模這一塊完全不行。大學時為了學分也選修過maya,材質啊,光照啊,折射率啊已經很頭疼了。除此之外,建模相當於用滑鼠做雕塑,和所有技能一樣需要時間練習,沒個一年半載熟練不了。我開始的時候以為只需要三個月就能把遊戲完成,哪有心思去學習建模啊。

不過,要是決心做3d,建模是必須要掌握的,不然也要有一個會建模的夥伴。雖然我自己是單幹,但我是找不到人同時又沒錢僱人。有條件的話還是要找合作伙伴,畢竟多人分工總要快過一人苦撐。

選擇2d引擎,還有一個原因是我囊中羞澀,掏不出高昂的授權費。我最開始的第一選擇其實是unity,但1000刀授權費把我勸退了(現在據說不需要了),2d引擎中很多都是開源的。

立項的時時候,遊戲引擎的第一選擇其實是cocos2dx,但上學的時候cpp並沒有學好,而且我一直在說,三個月嗎,心急火燎的,根本沒心思去看那個亂成一團的類庫。當時我對iOS開發非常感興趣,一直想學習一下Object-C。再加上蘋果公司看好手機遊戲的前景,釋出了自己的遊戲引擎。我本著學習Object-C的初心,而且當時釋出的蘋果遊戲引擎SpriteKit並不比其他2d引擎差多少,再加上iOS又不是開源,蘋果自家引擎相容性上不會有太多問題,遂決定使用Sprite kit。但這算是踩了一個坑。

在這裡再說一個我自己的建議:無論是3d引擎還是2d引擎,應該選擇那個被業內廣泛使用的遊戲引擎。更流行代表執行更穩定,功能更強大,即使出現了各種各樣的問題,因為使用的人多也就有更活躍的社群,更大機率能找到相似的解決方案,即使是遇上了引擎自己的bug,也會因為龐大的市場壓力,廠家會在更短的時間裡釋出補丁修復。即使專案不成功爛尾了,也能憑著積攢下的經驗獲得更多新的工作機會,畢竟使用相同引擎的人多。

我學習遊戲引擎的主要方式是看官方文件,主要難點是英文。關鍵是掌握遊戲引擎使用的計算機語言,比如cocos2dx是cpp,unity是c#,我用的spritekit是oc。之後就是熟悉引擎的各種方法,然後就可以開工了。

2.美術

我在美術上能說的乏善可陳,因為我自己不會畫畫,吃了不少虧。唯一能有點價值的就是,一定要控制素材的大小。雖說素材越大細節越好,但是匯入到遊戲中之後佔用的記憶體可不等於素材在磁碟上佔用的空間,有的時候佔用的記憶體是磁碟上的四倍大小。而如果用幀動畫的話也要控制幀數,而且每一幀的素材也要儘量小一點,畢竟幀數越多,佔用的記憶體就越大。素材應該在儘量保有細節的情況下儘量小,用壓縮工具給圖片素材瘦身是必須的。

3.一些建議

  • 在實際開發當中,update方法是遊戲引擎的核心。我一般是拿來判斷狀態和實現邏輯。
  • 光照效果非常昂貴,慎重使用。要想在手機上使用華麗的光照系統,要對場景大小嚴格控制。
  • 多執行緒不是必須的,但如果打算用無loading機制,應該花心思好好設計一個多執行緒系統。
  • 謹慎將所有資源都載入到一個關卡里,無論最開始的時候它佔用的記憶體有多小。除非遊戲已經定型,否則永遠不知道還要往裡加多少東西,一旦關卡的系統骨架確定,再去修改資源載入邏輯等於傷筋動骨。
  • 記憶體管理是重中之重,千萬別裝太多素材讓記憶體爆了。iOS上的記憶體洩漏是主要課題,這一點如果有設定文件指引按部就班的寫程式碼,仔細一點就可以避免。可別像我一樣,想到哪寫到哪,等開發時間長了,自己寫過的程式碼自己都能忘,什麼地方強引用,什麼地方記憶體沒釋放肯定也記不清了,出問題了根本找不著北。


雖然開發過程艱辛且漫長,煎熬且令人瘋狂。但是日復一日的努力,最終會在某一天化腐朽為神奇。當第一次在腦中靈光一閃的情景,不佳思索的化作程式碼,全新而又不存在的東西一如自己的設想,在程式裡沒有報錯一次通過,並分毫不差的呈現在眼前的時候,就是最爽的精神刺激。

現實的差距

經過無數思維停滯的下午,熬過無數輾轉難眠的午夜,數不清多少次徘徊於放棄的邊緣,憑著僅存的一絲夢想的餘燼,隱忍著將所有模組一一完成,終於第一次執行設想中的遊戲流程。

獨立遊戲開發是如何讓我進退兩難的?
初版執行截圖

心情從期待到興奮,又從興奮到失望。因自我感覺良好而產生的零星閃光點也在多次執行後無影無蹤。

獨立遊戲開發是如何讓我進退兩難的?
初版人物

平庸,溢於言表的平庸,甚至有點不堪入目。實現功能和做出表達是兩回事,就好比實現了人物擊打敵人的功能並不代表一定能獲得打擊感。遊戲除了程式以外的,應該還需要別的什麼,不可名狀的東西。這一點我作為玩家時就知道,但真的動手做起來,是如此的手足無措。當嘗試了各種自己能想到的方法,依然達不到心中模板遊戲的效果,我才真正認識到什麼叫不可名狀。

從小到大也玩了不少遊戲,多年遊玩的經歷讓我對高標準習以為常,我自己並沒意識到玩家其實是很挑剔的。那些脫穎而出的作品,我不假思索的認為那就是遊戲本該有的樣子。但如果想做出那樣的優秀作品,就必須同那些作品一樣,與那些默默耕耘多年的大廠競爭。而我自己含辛茹苦做出來的初版樣品,連我自己都沒法說服。

絕望。

要放棄嗎?轉眼間已經做了一年半了,各大公司的校招早就已經開始招聘我下一屆的學生了。社會招聘,我有什麼呢,一個平庸的半成品。這麼長時間的心血付之東流,心裡也過不去。

做下去?困難高聳入雲,根本看不到盡頭。騎虎難下,進退兩難。


作者:火樹
來源:機核
微博地址:https://weibo.com/u/7023268710

相關文章