從零開始獨(dú)立游戲開發(fā)學(xué)習(xí)筆記(二十六)--Unity學(xué)習(xí)筆記(十二)--Unity Essential

其實(shí)本來想去學(xué)麥克的 3drpg 的,但是突然無意間點(diǎn)進(jìn)了 unity 的官方學(xué)習(xí)網(wǎng)站?Unity learn。
之前我一直很不喜歡這種,就是把幾個(gè)視頻連在一起的路徑形式,因?yàn)槊髅骺梢宰鲆粋€(gè)播放列表,非要把這個(gè)做成路徑很傻。(絕不是我聽力太差和網(wǎng)絡(luò)差的原因)
但是萬萬沒想到, unity learn 的路徑居然是文章的形式,確實(shí)是我過于刻板印象了。既然如此,那官方出的教程必須得看的。
看啊,這令人安心的文章形式,比視頻更方便查閱,也更容易把知識(shí)點(diǎn)講透:

這篇文章便是關(guān)于其中的新手路徑?Unity Essential。講了很多原理和 unity 是什么。我認(rèn)為了解這些基礎(chǔ)原理相當(dāng)有用。
1. real-time creation
第一節(jié)叫做 real-time creation,那么什么是 real-time 呢。當(dāng)然喜歡玩游戲的大家肯定不陌生,這個(gè)名詞實(shí)在是太熟悉了。但如若不是進(jìn)入游戲行業(yè),很少有人會(huì)深入探究其代表的含義?;蛘哒f,嘗試從另一個(gè)視角去看待 real-time。
1.1 什么是 real-time?
就像所有富有教養(yǎng)的教程一樣,這個(gè)教程也喜歡上來就拋出“什么是xxx”這種句式。
所謂 real-time 就是能夠快速地在屏幕上渲染畫面,最好的 real-time 理應(yīng)讓人無延遲感地和畫面互動(dòng)。Unity 致力于在兩個(gè)方面實(shí)現(xiàn) real-time:制作者使用 unity 制作游戲的時(shí)候,以及玩家游玩用 unity 制作的項(xiàng)目的時(shí)候。
在過去,電腦性能不夠強(qiáng)大,一個(gè)畫面就要渲染很久。因此每次改動(dòng)都要等很久才知道效果,影響開發(fā)效率。同時(shí)在商業(yè)游戲中,一個(gè)新點(diǎn)子要花很久時(shí)間去實(shí)現(xiàn)和驗(yàn)證,因此也不容易被采納,因?yàn)橛?ddl。
這種渲染叫做 offline rendering,cg 和電影等媒體中使用比較常見,因?yàn)闆]有交互性,渲染的圖片不會(huì)改動(dòng)。real-time rendering 則用于 video game,早期的 real-time rendering 通常會(huì)犧牲畫質(zhì),動(dòng)畫效果,特效等等來維持實(shí)時(shí)性,隨著電腦性能的提升,實(shí)時(shí)性的效果也逐漸提升起來。目前 offline 和 real-time 的區(qū)別正在逐漸減小。
1.2 什么是 Unity?
Unity 最初是作為游戲引擎開發(fā)的,之后逐漸變成其他行業(yè)的生產(chǎn)工具。但是其主要目的仍然是游戲引擎,因此我們就從游戲引擎說起。
1.2.1 什么是游戲引擎?
簡單來說,游戲引擎就是為了讓你不用從零開始做游戲,讓你更關(guān)注游戲內(nèi)容創(chuàng)作的一個(gè)制作游戲的工具(怎么感覺開始嘲諷我的文章標(biāo)題了)。假如腳本,3d模型,聲音,美術(shù)是原材料的話,游戲引擎就是那口大鍋。
1.2.2 你在游戲引擎里干什么?
創(chuàng)作者在游戲引擎里創(chuàng)建出玩家將要體驗(yàn)的所有體驗(yàn)。你有了素材,有了游戲引擎,接下來就主要關(guān)注在創(chuàng)作體驗(yàn)上了。
1.2.3 你不會(huì)在游戲引擎里干什么?
你將不會(huì)在游戲引擎里創(chuàng)建 assets(素材,就是構(gòu)成游戲體驗(yàn)的所有東西,音樂,模型,腳本,動(dòng)畫等等,都是 assets)。這些 assets 會(huì)在外部工具里創(chuàng)建(也被稱為 DCC,Digital Content Creation)。許多 DCC 已經(jīng)和 Unity 集成以方便導(dǎo)入 assets。
DCC 有很多種,像是:
3D DCCs:諸如 blender,3dmax,maya 這些
2D DCCs:像是 PS, IL, AI 這些
Audio DCCs:像是 logic pro,cubase,AU 這些
IDEs:像是 VS,VSCode 這些
Real-time engine:比如 Unity 自身,Unreal 等
1.2.4 Unity Asset Store
Unity 提供了素材商城,如果不想自己用 DCC 創(chuàng)建的話,可以去商城購買或者找免費(fèi)素材來用。
1.2.5 關(guān)于 Unity 的故事
1.2.5.1 這個(gè)引擎誕生自游戲
聽起來很繞,但是實(shí)際上,使用 Unity 技術(shù)制作的第一個(gè)產(chǎn)品,并不是 Unity 引擎,而是一個(gè)游戲。
2005 年,3 名男性青年(中年?):Joachim Ante,David Helgason,和 Nicholas Francis。在 MacOs 上發(fā)布了一款叫做 GooBall 的游戲。這個(gè)游戲的發(fā)布公司名叫 Over the Edge Entertainment,發(fā)布這個(gè)游戲的時(shí)候這個(gè)公司已經(jīng)成立了一年,當(dāng)然,就是這三個(gè)人創(chuàng)建的公司。當(dāng)時(shí)他們從腳手架開始搭建了這個(gè)游戲的引擎,制作引擎的時(shí)候已經(jīng)想好之后要把這個(gè)引擎通過許可證來賣給別的開發(fā)者了。

上圖從左到右分別是 Joachim Ante,Nicholas Francis,David Helgason。
大家可以去搜一下他們現(xiàn)在長啥樣了。
1.2.5.2 Unity 誕生前大家都是怎么做游戲的
當(dāng)時(shí)每家公司都會(huì)自己制作引擎,自己使用。有些公司會(huì)做很多引擎用來滿足不同的游戲需求。由于制作引擎需要時(shí)間,很多公司中引擎的開發(fā)和游戲的制作是同時(shí)進(jìn)行的。導(dǎo)致制作游戲中途需求發(fā)生變化后,又要去改引擎,中間設(shè)計(jì)很多對接的改變。因此很耗費(fèi)時(shí)間和人力。
而對于獨(dú)立開發(fā)者和小型開發(fā)團(tuán)隊(duì)來說,引擎的開發(fā)是一項(xiàng)非常艱難的問題。除非有強(qiáng)大的編程能力,不然就要像其他公司購買昂貴的引擎許可證。因此直到 2005 年左右之前,獨(dú)立游戲非常少,而其中能做到商業(yè)成功的就更少了。
1.2.5.3 Unity 引擎的誕生
GooBall 并沒有成功。但是 Unity engine 成功了。3 位創(chuàng)始人在蘋果開發(fā)者大會(huì)上首次亮相了這款引擎,一開始并沒有很受關(guān)注,但是隨后,獨(dú)立開發(fā)者開始關(guān)注到這款引擎。
2005 年左右,Unity Engine 迅速席卷市場,當(dāng)時(shí)的游戲行業(yè)也是風(fēng)起云涌,Unity 在 “獨(dú)立開發(fā)者革命” 中占了一個(gè)非常重要的位置。Unity 成功的因素有三個(gè):①可信賴的數(shù)字版游戲模型的引入(意思是無實(shí)體純數(shù)字版游戲的引入)②主要關(guān)注獨(dú)立開發(fā)者③對早期智能手機(jī)的支持。
我只能說,這三點(diǎn)完美詮釋了目前 Unity 的現(xiàn)狀??梢哉f是不忘初心嗎。當(dāng)然,第一點(diǎn)在 Unreal 的資本投入下顯然是完全被打敗了,不過好歹通過模仿還是趕上了一些。第二點(diǎn)和第三點(diǎn)表明了 Unity 如何能夠堅(jiān)持住目前的市場。如果能夠堅(jiān)守本心,我覺得 Unity 還可以保有一席之地的,嘿嘿。
Unity 第一次上市的時(shí)候,高速網(wǎng)絡(luò)正在興起,這使得發(fā)布數(shù)字版的游戲第一次成為一個(gè)可選項(xiàng)。在此之前,獨(dú)立開發(fā)者只有很少的渠道去發(fā)布游戲,游戲基本上都是實(shí)體店里販賣,而販賣主要又由發(fā)行商安排。
高度網(wǎng)絡(luò)發(fā)展后,用戶終于可以快速在網(wǎng)上下載游戲了,網(wǎng)上也有很多服務(wù)用于販賣游戲,又了這些幫助,獨(dú)立開發(fā)者終于可以安心開發(fā)游戲了。自此,獨(dú)立開發(fā)者開始步入消費(fèi)者的視野。
Unity 進(jìn)入市場的時(shí)候,并不是第一個(gè)賣許可證的引擎(這個(gè)之前也提到過),但是其價(jià)格是最低的(現(xiàn)在不是了),易于獨(dú)立開發(fā)者接受。此外,Unity 也花了很多心思在優(yōu)化開發(fā)者的開發(fā)體驗(yàn)上,這是當(dāng)時(shí)其他引擎忽視的一點(diǎn)。這兩點(diǎn)也是讓 Unity 在獨(dú)立游戲開發(fā)市場上大放光彩的原因。
當(dāng)蘋果把 app store 開放給第三方的時(shí)候,Unity 也是第一批支持者。這讓其奠定了手機(jī)游戲中的地位。當(dāng)時(shí)超過一半以上的 apple store 里的游戲都是 Unity 制作的。如今在安卓和蘋果市場上也是。
開發(fā)一個(gè)手機(jī)平臺(tái)獨(dú)立游戲是不是就能吃滿 BUFF 了(不是)
1.2.6 在此之后
Unity 現(xiàn)在已經(jīng)逐漸不再只是一個(gè) game engine 了,而是 real-time engine。除了游戲也開始包含其他行業(yè)的功能。
1.3 Unity 可以干啥?
剛剛才說到 Unity 已經(jīng)不只是 game engine 了,那現(xiàn)在就看看還有哪些行業(yè)用到 Unity 吧。
游戲:不用說
媒體娛樂:迪士尼就用過,
工程設(shè)計(jì)。
自動(dòng)駕駛。
其他一些需要交互的應(yīng)用。
好的,別說了。Unreal 5 都已經(jīng)發(fā)布了,這些大部分都用不上你了。
下一章是請一些 Unity 的創(chuàng)作者來吹 Unity,我就不放了。 之后是一些簡單的 unity 操作,也不說了。直接跳到最后一章。
2. 游戲工業(yè)
2.1 標(biāo)準(zhǔn)游戲開發(fā)流程
我們經(jīng)常會(huì)說到什么開發(fā)啊,prototype啊,我們也都知道這些是工業(yè)流程的一環(huán),但是具體是個(gè)什么樣呢?其實(shí)也說不大清楚,這下就來好好學(xué)習(xí)一下: 總共流程分為 4 大部分:
pre-production
production
post-production
operations
2.1.1 pre-production
首先,工作室產(chǎn)出一個(gè)設(shè)計(jì)文檔。這個(gè)文檔是一個(gè)指導(dǎo)創(chuàng)意方向的來源。如果是電影,那就是腳本和分鏡,關(guān)于內(nèi)容,外觀,感覺等。如果是游戲,那就是游戲設(shè)計(jì)文檔,關(guān)于故事,gameplay,藝術(shù)方向,目標(biāo)群體,可訪問性等。
pre-production 的一個(gè)重要目的是為了早點(diǎn)開始設(shè)計(jì)迭代,加入新 idea。因?yàn)樵缙诟姆较蚣尤胄?idea 比較容易。
pre-production 結(jié)束后,會(huì)有一個(gè)產(chǎn)出給 stakeholder 或者 investor 看。如果通過那就可以進(jìn)行到 production 階段了。
2.1.2 production
production 是產(chǎn)品開發(fā)中最長也是最難的階段。這個(gè)階段是所有人一起做出一個(gè)真正的產(chǎn)品出來,也就是一般玩家想到游戲開發(fā)的時(shí)候,腦海里蹦出的畫面。所有人嘗試把設(shè)計(jì)文檔中的東西實(shí)現(xiàn)出來。
這個(gè)階段往往會(huì)設(shè)計(jì)到很多種職業(yè)如下圖:

其中,有一個(gè)?producer?全程盯著整個(gè)項(xiàng)目的開發(fā)進(jìn)度是很重要的。同時(shí) producer 還要避免?feature creep,防止加上一堆新奇的 feature 和設(shè)計(jì)文檔逐漸偏離。
production 會(huì)在 deadline 之前停止。deadline 會(huì)在 pre-production 的時(shí)候被定好。
2.1.3 post-production
post-production 指游戲技術(shù)上完成了,但是還沒有發(fā)行之前的階段。
這個(gè)階段,項(xiàng)目會(huì)被評(píng)估,修改,潤色,修復(fù)等等。一般包含?alpha testing?和?beta testing。其中 alpha 測試往往是在內(nèi)部進(jìn)行的,用于確定一些問題和修復(fù)。而 beta 測試則會(huì)找一些潛在用戶來測試。兩者都會(huì)產(chǎn)出一堆 bug 列表和新的需求 feature 列表。
post-production 階段會(huì)在產(chǎn)品發(fā)行后結(jié)束。
2.1.4 operations
產(chǎn)品發(fā)行后就進(jìn)入了 operation 階段,所有為了讓產(chǎn)品繼續(xù)維持的行為都屬于這個(gè)階段。諸如銷售,分析,維護(hù)等等。這個(gè)階段在不同行業(yè)做的事差距很大。
以 video game 為例,一個(gè) opertion 階段可能包含以下部分:
Support:處理來自用戶和 partner 的各種問題,需求等。
Monetization:內(nèi)購,內(nèi)置廣告等
Analytics:分析用戶行為以確定游戲功能等是否需要修改。
Server Maintainance:維護(hù)服務(wù)器。
Website Maintainance:維護(hù)游戲相關(guān)網(wǎng)站。
Business and Sales:提升游戲的銷售額。
2.1.5 Unity 在這 4 個(gè)階段中的作用
實(shí)際上 Unity 提供了很多功能,在所有階段中都能起到作用。比如說就提供了內(nèi)購的功能,分析的功能以方便 operations 階段。
2.2 游戲行業(yè)標(biāo)準(zhǔn)工作崗位
我們經(jīng)常聽到諸如程序員,美術(shù),制作人這種稱呼。但是具體都有哪些。分工是如何的,其實(shí)也不甚了解。那現(xiàn)在就來看一下。
從大的層面來看,可以分為兩種類型:①藝術(shù)設(shè)計(jì)類②程序類。
2.2.1 藝術(shù)設(shè)計(jì)類
一些比較常見的藝術(shù)設(shè)計(jì)類有這么些工作崗位:
3D 藝術(shù)家:創(chuàng)建 3D 物體和背景,優(yōu)化圖形性能。
2D 藝術(shù)家:同上,更改成 2D。
燈光藝術(shù)家:開發(fā)優(yōu)化燈光特效,還包括一些后處理諸如景深,顏色校正等
音頻設(shè)計(jì)師:創(chuàng)建和實(shí)現(xiàn)音效,旁白,音樂等聲音
人物藝術(shù)家:給人物建模,包括一些素材諸如頭發(fā),衣服,飾品等
技術(shù)藝術(shù)家:也就是我們常說的 TA,或者技美。和藝術(shù)家以及程序員都要打交道,將他們的作品統(tǒng)合為最終產(chǎn)品。
視覺特效藝術(shù)家:創(chuàng)造好看的視覺特效,諸如巖漿,火焰之類的。實(shí)現(xiàn)物理特性,諸如碰撞,掉落等。
動(dòng)畫師:創(chuàng)造并優(yōu)化所有物體和人物的動(dòng)畫。確保燈光和視覺特效在動(dòng)畫的時(shí)候表現(xiàn)良好。
游戲/關(guān)卡設(shè)計(jì)師:設(shè)計(jì) gameplay;設(shè)計(jì)游玩測試和反饋;和藝術(shù)家程序員以及測試者討論以獲得游戲性的反饋。
2.2.2 程序類
一些比較常見的程序類有這么些工作崗位:
質(zhì)量保證:也就是 QA,主要是測試 bug,寫報(bào)告。寫一些測試案例。
程序分析:根據(jù)設(shè)計(jì)文檔寫代碼,修改應(yīng)用以維護(hù)功能
C# 開發(fā):開發(fā)新功能和應(yīng)用;管理產(chǎn)品發(fā)布。
Unity 開發(fā):用 Unity 開發(fā)新功能和應(yīng)用
研究工程師:設(shè)計(jì)實(shí)現(xiàn)研究一些前沿算法
軟件開發(fā):設(shè)計(jì),開發(fā),測試新功能和工具
VR/AR 開發(fā)。
手機(jī)開發(fā):開發(fā)手機(jī)端功能和應(yīng)用;了解最新手機(jī)端技術(shù)
UI 程序員:編寫 UI 代碼以滿足設(shè)計(jì)文檔;將 UI 和功能整合在一起。
gameplay 程序員:分析設(shè)計(jì)文檔;開發(fā) gameplay 相關(guān)系統(tǒng)。