如何根據自己的需要培養遊戲開發技能?又一篇遊戲程式設計入門指南

遊資網發表於2020-03-24
如何根據自己的需要培養遊戲開發技能?又一篇遊戲程式設計入門指南

對遊戲程式設計感興趣或是想自己做遊戲的人可以參考一下~

我是一個獨立遊戲開發者,在一個主機獨立遊戲開發團隊裡做主程。大學畢業 10 年,畢業以後就一直在做遊戲程式設計,從一開始的“端遊”,到頁遊,再到手遊,到現在的主機獨立遊戲,也算是有一些經驗了。

在這些年裡見過挺多想了解“遊戲是怎麼做的”的人,也有挺多對遊戲程式設計感興趣的人。這些人裡,有行業外的人,也有行業內的非程式設計師。我希望通過在這裡寫一篇文章的方式,向大家推薦一個學習資料,傳授點兒學習方法,希望對大家有所幫助。

但是有一個事情我覺得大家需要先想清楚:你是哪種人?

想要確定你自己是哪種人,首先需要問自己幾個問題:

如何根據自己的需要培養遊戲開發技能?又一篇遊戲程式設計入門指南

之後我會針對這三種讀者提出相對應的建議。不過首先,有一些東西是共通的,我認為所有人都應該儘可能掌握的幾個技能。

最重要的 3 個技能

其實下面列的這些技能,就一個目的:掌握第一手的高質量學習資料。然而由於各種各樣的原因,高質量學習資料在國內並不多,第一手就再甭提了,所以我們需要在全世界尋找這些資料,於是我們就需要去 Google 搜尋資料。

英語

我接觸過很多英語不好的朋友,說他們在上學的時候就對英語產生了牴觸,看見英語就頭疼。還有的人說,雖然不至於到看見就頭疼的程度,但是單詞背不下來,口語就更慘了。那我在這裡就傳授一下我是怎麼學英語的。

先說清一點,這裡說的英語技能僅包含“聽說讀寫”中的“讀”。因為這整件事的目的就是看資料,所以“讀”就夠了。

首先,先放下心理負擔。很多人看到英語就頭疼可能是因為潛意識裡他們看到英語就聯想到了考試,聯想到了可怕的英語考試和自己悲慘的英語成績,聯想到了看到成績後生氣的父母,聯想到了。哦,總之,先不要怕,你讀一篇英文文章,並不是為了考試,也沒有人讓你在讀的時候不許查詞典,沒讀懂也不會有人罵你。你想想,多少遊戲那麼難,你不都打通了麼,讀個文章比打《血源詛咒》簡單多了~

其次,

不要背單詞!

不要背單詞!

不要背單詞!

重要的事情說三遍!

背單詞可能是很多人的痛苦記憶。我個人認為,背單詞這個方式一是為了考試,二是為了“速成”。這個“速成”並不是貶義。背單詞對於語言學習來說的確是一種比較高效的方式,如果你不牴觸的話。如果背單詞已經讓你產生牴觸情緒了,那它本身意義就不那麼大了。但是不背單詞的話,怎麼提高詞彙量呢?我的答案是:愣特麼看。

我來解釋一下什麼叫“愣特麼看”。很簡單,利用專業英語本身詞彙量就比較少這個點,每次你看到一個生詞的時候,去查一下詞典,就知道是什麼意思了對吧,然後你就繼續看文章就成了。直到下一次你遇到這個詞的時候,你還是不記得這詞是什麼意思,沒事兒,再查一次,哦,是這個意思,繼續看文章。

這方法簡單到都不應該被稱為是一個“方法”,但我的邏輯是,如果一個詞出現的頻率低到你只查了一兩次,根本記不住,那說明,它可能在現在的階段根本不值得你把它記下來;相反,如果一個詞已經出現的頻率已經高到你查了 N 次詞典,那你差不多也已經把它背下來了。這個方法的重點其實是,看大量的英文內容,讓你一遍又一遍的鞏固這些經常出現的詞,從而記住它們。把自己的手機、PS4 換成英文系統,想解悶兒去看 Reddit 或者 9GAG,想看圖去 Instagram,想看新訊息去 Twitter,想看視訊去看 YouTube,想看直播去 Twitch,想看 ** 去 PxxxHxx。總之就是用英文包圍你的生活,慢慢你就習慣了~

試試吧,這個方法在我那個看英語就頭疼、四級都過不了的老婆身上親測有效。

搜尋

搜尋大概是這個資訊時代的特色了。使用搜尋引擎的方法對開發效率的影響簡直是數量級上的區別。有一次我老婆滑鼠驅動出了一些問題,也 Google 了一下,但折騰了一個多小時找不到解決方法,後來我改了改搜尋的關鍵詞,5 分鐘就搞定了。差別實在是大。

然後,多看 Wikipedia,可以體驗到在知識的海洋裡遨遊的感覺。一個詞你不明白的時候,先去搜 Wikipedia,儘量看英文的。

科普模式(簡單)

對於只是想了解遊戲是怎麼跑起來的人,其實是不需要真正接觸程式設計的。你需要的只是去看一些科普向的視訊或者文章,比如卡姐Cara翻譯的視訊,還有卡姐那些視訊的來源。卡姐比較好的一點是,每個視訊下面會詳細寫清轉載的出處,能看生肉的話,直接看源視訊更鍛鍊英語。

另外機核上也有一些科普的文章,我之後也可能會寫一些,看看這些文章就好啦~

愛好者模式(普通)

到這個級別,你還是要想明白,你的“瞭解”一下程式設計是“瞭解”到什麼程度?必須要自己寫寫程式碼嗎?還是隻要明白程式上的一些基本概念就可以了?

如果你想自己寫寫程式碼的話

個人推薦零基礎的朋友上手程式設計學 Python。可以看看這本《深入淺出程式設計》(英文名:Head First Programming),書裡用很生動的語言講了 Python 的基礎知識,非常適合零基礎的朋友上手。

等你對 Python 瞭解了以後,可以學學 C#,再搞搞 Unity。這個部分我反而不是很瞭解,因為我學 C# 和 Unity 都太早了,而且都是會了 C++ 以後學的,所以這個路線不是很熟悉,見諒。

如果你只想明白程式設計上的一些基礎概念

推薦 Zachtronics 的遊戲,42 曾經介紹過。玩了這些遊戲,就可以對程式設計這件事有一些感性認識了~

職業模式(困難)

說明:對於程式語言的選擇各有見解,此處的推薦僅代表作者個人意見。

在這裡,我想跟所有想把遊戲程式設計當作職業的人說:遊戲程式設計的確很難,學習曲線比較陡,在最開始學習的時候一定不要浮躁,不要急功近利,穩紮穩打才是精髓。

好,那且聽我慢慢道來。應該學什麼程式語言?我推薦C++。

現在 Unity 那麼火,為什麼不學 C#?首先,在主機遊戲的領域,C++ 是完全的霸主地位,不用 C++ 的 3A 大廠幾乎沒有。另外,瞭解底層知識是非常重要的,C++ 是可以手動管理記憶體的。手動管理記憶體這件事情在遊戲開發領域是非常重要的。就算你用了 Unity,寫了 C#,資源載入解除安裝仍然是一個比較手動的過程,你可以先在 C++ 裡習慣這種做法。

我當年學 C++ 用的是這本《21 天學通 C++》,現在已經出到第 8 版了。不要被書名誤導,你不用 21 天之內學完。慢慢看,慢慢學。關於程式設計的學習方法,下面有專門的一段會講到,在這裡就不贅述了。

遊戲程式設計的特點

如果你是個其它領域的程式設計師,但希望可以轉向從事遊戲開發,那麼就需要注意一下游戲開發的特點:極其追求執行效率。我個人感覺,Donald Knuth 那句“Premature optimization is the root of all evil”在遊戲開發領域甚至都不適用。

對於學習底層知識,首先得看一些大塊頭的書,比如:

《遊戲引擎架構》

《遊戲程式設計權威指南》

《Realtime Rendering》

另外,我還有一些推薦的做法:把標準庫的一些內容自己寫一遍。我大學的時候把 .NET Framework 裡的 System.Collections.Generic 中的容器在 C++ 裡重新實現了一遍,收穫真的很大,我推薦程式設計師們都去試試~

最後,我說的底層真的要很底層,比如你要知道雖然遍歷陣列和連結串列的時間複雜度都是 O(n),但由於連結串列在記憶體中的儲存不連續,所以無法完全利用 CPU 快取,出現 cache miss,導致實際上遍歷連結串列比遍歷陣列慢。嗯,就是要底層到作業系統和硬體架構的級別。

程式設計的學習方法——如何自學?

我一直覺得,程式設計可能是全世界的職業技能裡最好自學的了。因為程式設計這件事反饋非常準確且及時。你編錯了,就跑不起來,或者跑出問題;編對了,就沒問題。但最開始學習程式設計的時候,還是可能走一些彎路,有兩個點,我在這裡先列出來,大家繞著點兒走。

瘋狂看書不寫程式碼

這是很常見的問題。大家在學校學知識的時候可能習慣了這種學習方式,就一直沿用下來了。然而在學習程式設計的時候,我推薦大家學一點兒寫一點兒。比如今天學了個條件判斷語句 if,那你就用這個 if 寫個程式出來,跑起來看看是什麼樣,邊學邊用才行。一定不能狂看書不寫程式,哪怕有些語法你記不住,要邊查書邊寫,都比一直看不寫強。否則的話,你在真正寫程式碼的時候記不住多少不說,你還會被編譯器的錯誤資訊搞懵,很容易被打擊。

不考慮程式碼的可讀性

在學習程式設計的時候,很多人經常為了實現功能就不管程式碼的可讀性了,寫到最後程式碼越來越長,也記不住之前定義的變數叫什麼了,整個人都很煩躁。這是非常錯誤的。

首先,先保證你的程式碼格式整潔,縮排對齊,該空格的地方空格。我大學的時候,有同學程式碼調不出來,讓我幫他改調。我一看,程式碼格式混亂,就讓他把縮排對齊,該空格的地方空格,再來找我調。然後他就沒找我了,因為調完格式以後他自己就明白問題在哪兒了。各種程式語言都提供了為你節省腦容量的功能,比如把一堆語句封成函式,把一堆資料封成類或者結構體,要用啊!

對於這個問題,有個比較簡單的評價方法,就是去看看你一個月以前寫的程式碼,看自己還能不能看懂。如果你看不懂,那說明你一個月前的程式碼的確可讀性有問題。如果你還覺得看著你之前的程式碼感覺有點兒噁心想吐,那說明你在這一個月裡進步了,因為你知道什麼樣的程式碼噁心了。

團隊合作的重要性

這一部分是我額外想多說兩句的。現在社會上對程式設計師的刻板印象一直都是不太說話的理工男,但實際上,起碼在國外的程式設計師教育上,是非常強調溝通的重要性的。一個遊戲,除非策劃程式美術全你一人搞定,否則你一定會面臨溝通的問題。與人溝通的技巧已經有無數文章和書在講了,我在這裡就講兩個跟遊戲開發密切相關的點。

關於“程式設計師宗教”

應該有不少人看過《矽谷》,知道劇裡面 Richard 和一個妹子因為用 Tab 還是用空格吵翻的故事。另外你可能也聽說過大括號放上行還是放下行之類的程式設計師宗教問題。

我想說,多人合作最重要的就是入鄉隨俗。你用 Tab,但團隊裡的規範是用空格,那你就用空格,沒什麼可說的。當然,你寫自己的小專案還是可以用 Tab。這些程式設計師宗教現在都是程式設計師之間開玩笑用的了,不要把電視劇裡的情節當真啊~

編輯器的重要性

這是一個程式部門和其他部門溝通的話題了。作為一個遊戲程式設計師,你的程式碼面向的客戶可不是隻有遊戲玩家。策劃、美術、測試、市場運營等等,都是你程式的使用者。把遊戲的編輯器做好是你的義務。我在公司裡要求程式設計師都去學習 UE/UX 的知識,就是為了他們把編輯器做好,讓使用者用著舒心。我可是見過 N 多個因為編輯器垃圾離職的策劃或者美術。

結語

囉裡囉唆寫了這麼多,不知道大家看著覺得如何?如果大家對程式設計的一些概念還有興趣的話,我可以再開一篇文章,用比較白話的方式,結合主機遊戲的內容講講程式設計的基礎知識,比如:

什麼是資料抽象(結構體)?

什麼是過程抽象(函式)?

什麼是程式導向?

什麼是物件導向?什麼是例項?什麼是繼承?什麼是多型?

作者:Fitbos
來源:機核
原地址:https://www.gcores.com/articles/119460

相關文章