遊戲開發雜記(三) 開發及學習過程中的體會

swimmingsoft創始人發表於2018-12-14

其實最近在寫系列教程了,主要的提綱都定好了,第一篇教程也寫了一大半了,無奈上上週臨時接到通知要去北京出差,所以沒有把教程寫完並且發出來,一直折騰到上週日才回杭,真的是有點累的。不過這周也是迴歸了正常的開發及學習進度,每天下班回去就嚴格按照自己的計劃去學習和工作。

因為自己最近有很多體會和想法,本來是想寫到教程系列中去的,但是仔細考慮了廣大程式設計師及專案人員的閱讀習慣,還是單獨把這些東西寫到雜記系列裡面來吧。博主的計劃是想要看乾貨的人可以直接看我的系列教程(這週末第一篇就可以出爐了),想要看軟技能比如學習方向和感受以及技巧之類的可以看我的雜記系列,不過大家不要忽視任何一方面,任何的失衡都會影響你後續的發展。

鑑於這裡是CSDN,所以博主還是先談談程式方面的東西吧。

程式:

1.做遊戲還是用自己最擅長的語言好

這一點是博主所堅信的一點,理由很充分。

首先,我相信大家基本都是主流的程式語言使用者,而主流的程式語言基本都有了對應的遊戲(圖形)引擎或者框架

參考如下的網站

https://blog.csdn.net/goodeveningbaby/article/details/51079857  引擎與框架   這一部分

你應該能找到自己最擅長的程式語言架構的遊戲引擎。

其次,用最擅長的程式語言做開發是最容易上手和理解的,你的成本會低很多。當然,不可否認的是,C++還是在遊戲方面最有效率的高階語言,至於指令碼語言方面據我瞭解應該還是lua佔據最大優勢。

最後,用你擅長的程式語言是為了讓你不要將遊戲開發和你的本職工作剝離開。為什麼會有這種考慮呢,因為遊戲程式設計師只是程式設計師中的一類,還有很多其他行業的程式設計師。用你擅長的程式語言去開發遊戲是為了你以後在本職開發和遊戲開發之間建立橋樑,可以互相輸送,互相促進。有人可能會好奇,遊戲和我的本職開發八竿子打不著,怎麼可能會有橋樑呢?好的,我來舉個例子,如果你是做前端的,需不需要寫UI控制元件,做各種動畫或者轉場效果,那麼你用相同語言掌握的遊戲部分的UI程式設計技巧可不可以用在工作中?如果你是做後臺的,遊戲開發中多人遊戲需不需要伺服器,資料庫?可以用吧,而且在語言一致的情況下就更容易轉換了,一份學習換兩份結果,划算的買賣。還有這一點也是為了讓你不要揹負過多的擔憂,因為同時兼顧主業和副業是很辛苦的,也會有心理上的負擔,畢竟你的精力會被業餘的專案分流一部分,難免會擔心本職工作上會不會成長變慢,甚至影響自己的本職工作,這一點博主之前是深有體會。所以一定要做好本職和業餘開發的平衡,這樣子你才能專注在真正的工作上,不必擔驚受怕。

這裡擴充套件一下,看到前面有人可能會說那這樣我還不如直接辭職專心做獨立開發者,博主建議你千萬不要這樣做,業餘並不代表你沒有投入自己的心力,而且獨立遊戲開發說實話成功的機率微乎其微,你看到的成功的遊戲基本都是鳳毛麟角。有心的人會在steam上發現一堆你從來沒有聽過,評價數寥寥無幾但都是特別好評甚至好評如潮的遊戲。如果你真的試玩這些遊戲,你會發現有些製作是真的用心了,有的甚至畫面能達到2線商業遊戲的水準,但是從那幾個屈指可數的評價中我們能夠直接瞭解到的是,這個遊戲賣的非常差,事實也就是如此。好的東西不一定賣的好,這是多方面因素導致的,我看到過好幾個國外的遊戲從業經歷極其豐富的老兵宣佈自己獨立遊戲工作室破產的經歷,所以這條路是相當困難的,一般很多工作室都是遊戲還沒做完就破產了,能釋出出來已經是很不錯了。這裡說的有點多了,也是希望大家一定要考慮清楚。

2.學習一個遊戲框架或者引擎的時候最好再複習一遍對應的程式語言(包括資料結構和演算法)和基礎數學知識

很多人看到這裡可能會說,我用某某語言開發了多少年了,做了多少專案,對於這個語言我瞭如指掌。當然,如果你確實覺得自己的實力足夠強大,那麼就不用理會博主的建議了,不過你也必須清楚一點,遊戲程式設計應該還是處在程式設計梯度中較難的部分的,如果是一個人或者幾個人的小團隊,你更是要負責幾乎所有模組的程式設計。無論是圖形渲染,AI,物理,控制,攝像機......每一個部分都需要比較紮實的基礎,而現實中大部分程式設計師的工作都是負責一個模組的,你可能以前在資源釋放,記憶體分配,效率優化上淺嘗輒止,也許你最熟悉的語言中有很多東西你過去幾年從來沒有碰過,所以複習一遍還是有必要的。至於數學方面,基礎的三角函式和點線面等等的相關知識應該是必須複習的,要做3D遊戲的話推薦一本《3D數學基礎:圖形與遊戲開發》,什麼四元數之類的都有的,如果要在更深入的話,我覺得線性代數應該是首選,寫shader必用的。

3.學習一個遊戲框架或者引擎最好的入門方法是看官方的wiki或者官方推薦的書籍

我無法想象一個框架最好的入門手冊不是官方給出的資料或者推薦書籍,如果真的有,請你告訴我,我一定要見識一下。為什麼要強調這一點呢,因為我們常用的框架很多都是國外開發的,英文作為使用最廣泛的語言,這些文件肯定也是英文首選的。目前還是有一些主流的框架沒有中文文件,很多人看到這裡望而卻步,選擇去讀國內一些大神整理的技術文件。我不是說這些大神的文件不好,但是考慮到翻譯和理解的問題,你接收到的知識是經過加工了的,可能會失去原有的內容。我覺得最好還是先啃官方文件,開個劃詞翻譯的軟體也不算太麻煩,然後再看那些大神的文件,你的收穫一定更多也更深刻,也更能體會這個框架的精髓,因為原始文件一般就是這個框架的開發者寫的,沒有人比他更清楚這裡面的妙處和深坑。

比如我現在在用的libgdx,其中就有官方的wiki和推薦書籍

 

把這些吃透了,我覺得是相當有用的(博主目前也在啃這些東西)。

4.多多關注一些遊戲/電影/圖形公司的github倉庫裡面都有些什麼東西

這個其實是很有趣的一個點,大家可能一直覺得像sony,capcom,disney,皮克斯,工業光魔,夢工廠等等這些大牌公司不會把自己家的程式碼公之於眾,當然現實可能還是稍稍有些不同的,他們可能會有一些開源的倉庫,就算是沒有開源的倉庫,你也可以看看他們fork的是哪些東西,從而為你的開發提供思路和學習的方向。

5.多看看用的框架的demo,多看看對應的論壇,這個是非常有用的,避免閉門造車的現象發生。比如遊戲開發的框架通常是實體系統,AI有行為樹,基本每個引擎或者框架都會有人去寫這方面的demo,你不必擔心跟主流的遊戲開發背道而馳,很多遊戲開發的專業術語掌握了也有助於後續的發展,因為其實很多框架關於遊戲開發的術語在程式中的識別符號都是一致的,你吃透了一個以後想轉另外的框架也是非常方便理解的。

影像:

1.掌握一些基礎的美術知識及美工技巧

這個是很重要的,因為我認為對於現代遊戲來說,不管是3A還是獨立遊戲,玩家在沒有體驗到實際遊戲內容之前對於他們最大的吸引力便是影像了,而影像不管是程式動態生成的還是從圖片中讀取到記憶體的,都是屬於美術的範疇。我很難想象一個完全不懂美術基礎的人能夠做出一款好的遊戲。而且光照,陰影,還有shader,UI,遊戲場景等等都需要美術知識和美工技巧與程式配合。這些知識不用跟美術生一樣瞭解的那麼具體,但是起碼需要知道基礎,就算你的遊戲是像老式FC遊戲一樣背景是一個大色塊,也得要顏色配合得當才可以。如果配色什麼的不得當輕則讓玩家覺得遊戲很廉價,重則甚至會導致人出現生理反應(紅藍兩個顏色快速連續切換,傳言某知名動畫當年就因為這個處理方式導致小孩子昏迷嘔吐),所以為了玩家的身體健康,我們也是要掌握美術的(笑)。美工技巧則是指PS,AE,SAI,spine,龍骨,live2D等等影像處理,繪圖,動畫製作的軟體,這個根據自己的專案去學習吧,因為牽扯的太多了,個人覺得PS和AE是必學的,因為基礎的影像處理以及一些特效動畫,還有後續上線的宣傳視訊都可以用這兩個軟體完成。

2.多多看一些遊戲的開發日誌

一些眾籌或者比較喜歡公開開發進度的開發商會階段性的公佈開發日誌,通常不是介紹程式上的內容的,因為玩家們並不太懂和關心這方面,一般都是遊戲的原畫,人設,還有開發中的場景等等,這些東西好好學習並且鑽研的話,對於提升在遊戲應用這塊的美術提高是很快的。建議可以看一看骷髏女孩(skullgirls)的開發商,他們新作的開發日誌我看了,感覺非常的不錯,很有參考價值,steam上就有。香草社(代表作朧村正,龍之皇冠,奧丁領域)的原畫和ori和迷失森林的原畫也是非常的棒,所以多多收集設定集吧,絕對有用。

技術之外:

1.切忌急功近利,好高騖遠

博主知道大家開始做遊戲的時候都是以做出這些遊戲為目標的

 

 

但是現實是非常殘酷的,對於一個沒有經驗的開發者來說,就算有了開源的各種素材,程式上你也不可能直接平步青雲,除非你有了一套及其完整的開源demo,但是這樣子程式80%是別人的,素材100%是別人的,這個遊戲你能驕傲地說是你做的,並且拿出去賣嗎?

所以做遊戲一定要沉下心來,有一定基礎的人可以用已有的知識去開發,沒有基礎的人一定要從基層做起,一步一個腳印。對自己要有信心,未來我們也是可以做出這樣子的遊戲的,但是現在,我們也許只能做一些拼圖,塔防,音樂節奏,文字冒險等等型別的遊戲,再進步一點我們可以做體量大些的RPG,賽車遊戲,2D橫版闖關......在這個過程中逐漸進步,掌握更多的知識和技巧,對於發展才是良性的。

2.計劃安排要得當

先舉個極端的例子吧,博主前段時間每天下班之後回家工作到凌晨三點多,然後睡到早上7點醒,再去上班,持續了大概兩週吧,每天頭都是懵懵的。每次堅持不住的時候我就給自己加心理暗示,什麼名人都是每天只睡4個小時,獨立開發不努力根本不可能成功之類的,然後又繼續懵著敲程式碼,畫著畫。後來有一天我實在扛不住了,結果就早早睡了,然後接下來的一週我一天都沒有再去開發,感覺之前的勁都用光了,而且人特別困,一下班回去就想睡覺。

後來我體會到人是不可能也不應該長期保持緊張高壓狀態的,因為這種狀態本來就是在緊急時候才會被激發的,就像CPU超頻一樣,時間長超負荷執行會損壞硬體,計算機都會壞,何況人這樣的血肉之軀。真正的計劃是有條理,有目的,有層次,可持續發展的。該做什麼,要做成什麼樣子,現在在哪個階段,後續的計劃等等,作為一名獨立開發者這些都是需要你自己去掌控的。博主相信,獨立開發不僅會提高你在技術和藝術上的造詣,還會把你變成一個能夠高效利用時間,做事有條理的人,對於立志專案管理的碼農們來說,絕對是非常有幫助的。

3.適當的放鬆

博主開始做遊戲之初,每天腦子裡都是相關的東西,睡覺的時候睡不好,電影看不下去,遊戲也玩不下去,感覺自己好像要研發火箭一樣,那種責任感和使命感我連高考的時候都沒有過。我想,對於一個人的團隊來說,這個應該也是正常的,從巨集觀層面上看,遊戲無非是兩部分,程式和素材,但是其中涉及的東西內容之多,簡直讓人無所適從,你幾乎可以把現實中所有的東西都塞進去,記得那時候看到CDPR(代表作巫師系列)為了賽博朋克2077在招募載具設計的人員,我就意識到隨著遊戲的體量越來越大,未來可能會把現實中的一切都完美對映進去......

咳咳,說的有點偏題了,那麼我們怎麼去適當放鬆呢?

首先,可以適當的“玩”遊戲。這個“玩”可能跟沒開發遊戲之前玩的心態不一樣,你會比以前更加敏感,可能注意到這個遊戲有一些很酷炫的視覺特效,你會想這個是怎麼做到的;可能注意到這個遊戲的攝影機運鏡是如此地絲滑順暢,你就會了解到原來這個是用補間動畫來處理的;可能注意到這個遊戲的打擊感特別棒,然後你就會注意到原來是動畫下了功夫,打擊的瞬間還做了頓幀的處理。玩遊戲放鬆的同時還在學習和思考,賺到了吧。

其次,每週一定要抽時間出去走走或者運動。這是減壓的好方法,不僅讓你接觸一下陽光或者寒風(笑),也讓你暫時不去考慮開發的任務,好的休息才能迎來更好的工作狀態。

最後,有時間多跟朋友交流,獨立開發是獨立的,但是作為一個人你還是社會的一部分,不要因為自己忙就把交流溝通忽略了,偶爾的談天說地,其實也沒那麼壞對嗎?如果你的朋友也是遊戲迷,那麼我相信你們的共同話題也會不少的。

 

總結:

對於技術的東西,一定要是有使用場景再去學,而不是學了之後再考慮怎麼用,這樣子你會失去方向和重點。就像上學時一樣,說的簡單粗暴一些,我們知道要考試才去學習,而不是學了之後我們想這個知識怎麼用啊,不如去考試檢測一下吧。沒有目標的學習就像失去了指南針的海上旅行,你會迷失在一片蔚藍之中。

至於技術之外的東西,我想只有保持良好的心態,努力拼搏的精神,制定明確的計劃並且付諸實現,才能快快樂樂地開發遊戲。

不管你開發遊戲的目的是什麼,最最最重要的是不要偏離自己的初衷,做你最想做的東西吧(當然為了市場適當的妥協也沒什麼不好的嘛(笑))。

謝謝大家閱讀到這裡,願大家熱愛遊戲,熱愛生活。

 

 

 

 

 

 

 

 

 

 


 

相關文章