
前言
Unity官方教程 2D UFO 原版視頻教程地址,點(diǎn)我點(diǎn)我
抱著總結(jié)和方便回顧的念頭把Unity官方教程寫一遍。朋友—Zui,兩年前寫的球球和飛機(jī)非常精彩,我乃是繼承他的“遺風(fēng)”(→_→)。
這個(gè)2D UFO游戲個(gè)人認(rèn)為是Roll-a-Ball的2D版,實(shí)現(xiàn)起來(lái)更加簡(jiǎn)單,更適合新手入門。官方視頻未知所用Unity版本,現(xiàn)在Unity最新的版本是Unity 2017,部分界面和實(shí)現(xiàn)方式已經(jīng)有差異。
電腦環(huán)境:Windows10
Unity版本:2017.2.0
腳本/代碼編輯器:Microsoft Visual Studio Community 2017 15.4.4 (裝Unity的時(shí)候帶上的)
你將學(xué)會(huì)操作什么?
- 如何創(chuàng)建一個(gè)新的項(xiàng)目(Project)
- 如何下載資源包(Asset Store)
- 如何添加基本的游戲?qū)ο螅℅ameObject)
- 如何給游戲?qū)ο筇砑幽_本(Script)
- 如何制作預(yù)制件(Prefab)
- 如何實(shí)現(xiàn)計(jì)分板和游戲結(jié)束提示(UI Text)
- 如何發(fā)布游戲(Build)
一、創(chuàng)建一個(gè)新的項(xiàng)目(New Project)
第1步:通過(guò)菜單欄File-->New Project打開創(chuàng)建新項(xiàng)目對(duì)話框
第一次安裝unity的同學(xué)打開軟件的時(shí)候默認(rèn)就是創(chuàng)建新項(xiàng)目對(duì)話框頁(yè)面。

第2步:確定項(xiàng)目名稱、存放路徑和游戲模式

- Project name:項(xiàng)目名稱
- Location:項(xiàng)目存放路徑,可選擇電腦任意目錄(不會(huì)放C盤吧?(?Д?)ノ)
- 3D/2D:在這里我們當(dāng)然選擇2D
最后點(diǎn)擊 Creat project 按鈕創(chuàng)建新項(xiàng)目。
第3步:調(diào)整項(xiàng)目視圖布局

有可能你創(chuàng)建出來(lái)的項(xiàng)目視圖布局和上圖不一樣,可以編輯右上角Layout按鈕來(lái)改變布局。上圖布局是Tall(可以通過(guò)鼠標(biāo)調(diào)整每個(gè)窗口寬度)。其他模式可以自行選擇體驗(yàn)。

二、 從Asset Store下載素材資源包
為了方便我們跟隨視頻學(xué)習(xí),Unity官方已經(jīng)提供2D UFO游戲的所有素材供我們免費(fèi)下載——Unity Asset Store。
第1步:通過(guò)菜單欄Window-->Asset Store按鈕打開資源商店

第2步:查找和下載資源包
資源商店窗口默認(rèn)會(huì)在Game窗口右側(cè)展開,在Search搜索欄輸入游戲名字并回車,找到游戲后點(diǎn)擊標(biāo)題打開詳情頁(yè),點(diǎn)擊藍(lán)色按鈕Download確認(rèn)下載。

第3步:導(dǎo)入資源到本地打開的項(xiàng)目
下載完成后會(huì)提示是否Import到項(xiàng)目?jī)?nèi),點(diǎn)擊Import按鈕會(huì)打開導(dǎo)入資源選擇頁(yè)面。默認(rèn)全選,無(wú)需改動(dòng),點(diǎn)擊右下角的Import按鈕即可。

導(dǎo)入完畢之后關(guān)閉Asset Store頁(yè)面,回到編輯器主界面,可以看到Project窗口下的Assets文件夾多出了三個(gè)文件夾_Completed-Assets、Sprites、TutorialInfo。本教程中,除了Sprites,其他沒(méi)有用武之地?(?????)?。

三、創(chuàng)建第一個(gè)游戲場(chǎng)景(Scene)
第1步:創(chuàng)建一個(gè)文件夾存放場(chǎng)景文件
Unity中,游戲場(chǎng)景、腳本、預(yù)制件、美術(shù)等所有資源文件都放在Assets文件夾下。游戲越復(fù)雜文件可能就越多,如果不對(duì)這些資源文件合理進(jìn)行分類的話,那么查找和管理起來(lái)就非常困難。所以在學(xué)習(xí)Unity的過(guò)程中要有意識(shí)地培養(yǎng)自己合理分類資源文件的習(xí)慣,這點(diǎn)不要忘記!那現(xiàn)在就開始創(chuàng)建一個(gè)Scenes文件夾來(lái)存放游戲場(chǎng)景文件吧~
創(chuàng)建辦法有3種:
- 菜單欄Assets-->Create-->Folder
- Project窗口下的Assets文件夾右鍵快捷方式創(chuàng)建
- 左鍵選中Project窗口下的Assets文件夾,點(diǎn)擊Project正下方Create右側(cè)小三角,選擇Folder。

第2步:保存場(chǎng)景文件到Scenes文件夾
通過(guò)菜單欄File-->Save Scenes(快捷鍵Ctrl+S)保存場(chǎng)景文件,記得是保存在Scenes文件夾,我們命名主場(chǎng)景文件為Main。

可以看到,Hierarchy窗口下出現(xiàn)了Main場(chǎng)景。

四、添加游戲?qū)ο蟆尘埃˙ackground)
有了游戲場(chǎng)景,我們就可以開始在場(chǎng)景中添加一些我們需要的游戲?qū)ο罅?。首?dāng)其沖需要添加的是游戲背景,也就是UFO背后那張棋盤。選中Sprites文件夾,鼠標(biāo)左鍵按住Background文件不動(dòng),拖到Hierarchy窗口空白處松開。

可以看到,Hierarchy窗口下新增了一個(gè)Background游戲?qū)ο?。新增游戲?qū)ο笾笞詈眠M(jìn)行重命名(更好地說(shuō)明它的作用),重命名有2個(gè)方法:
- 左鍵點(diǎn)擊選中要改名的GameObject,稍微等一會(huì),再左鍵點(diǎn)擊一下,進(jìn)入編輯改名狀態(tài)。和平時(shí)修改電腦文件名字是一樣的~
- 選中要改名的GameObject,在右側(cè)的Inspector窗口下方名字欄處修改,改好回車。
在這里我們不改名( ? ?ω?? )? Background這個(gè)名字挺好的。

接下來(lái)要做一件很重要的操作(官方和Zui強(qiáng)力推薦)——重置(reset)游戲?qū)ο蟮?strong>Transform屬性:在右側(cè)的Inspector中找到組件Transform,點(diǎn)擊它右上角的小齒輪,選擇reset選項(xiàng),如下圖:

官方建議我們每次新增GameObject之后都進(jìn)行雙標(biāo)動(dòng)作:改名和重置Transform。改名是方便解釋對(duì)象的作用,重置是讓游戲?qū)ο蟮奈恢没氐皆c(diǎn),避免因?yàn)椴辉谠c(diǎn)產(chǎn)生一些詭異的事情。
背景添加成功之后,可以看到Scene窗口的背景不完全可見(jiàn),鼠標(biāo)滾輪控制縮放,鼠標(biāo)左鍵拖動(dòng),調(diào)整到Scene窗口可以看到完整的背景,方便后續(xù)操作。
鼠標(biāo)切到Game窗口,背景圖片看起來(lái)還是很大,無(wú)法窺得全貌,這是由于正交攝像機(jī)的Size太小,可視范圍太少。鼠標(biāo)選中Main Camera游戲?qū)ο?,?strong>Inspector內(nèi)的組件Camera找到Size,把它的數(shù)值改成28(可以根據(jù)自己的窗口大小來(lái)調(diào)整這個(gè)數(shù)值)。

Tips:鼠標(biāo)放在Size輸入框前面一點(diǎn),出現(xiàn)左右兩個(gè)箭頭的時(shí)候,按住鼠標(biāo)左鍵上下移動(dòng)可以微調(diào)數(shù)值。其他有輸入項(xiàng)的都可以使用這個(gè)操作~
五、添加主角——UFO
前面都是浮云,到現(xiàn)在為止我們的游戲主角終于要登場(chǎng)了,淚流滿面(;へ:)……添加UFO和Background的操作是一樣的,在Sprites文件夾里面把UFO拖到Hierarchy窗口即可。添加完GameObject不要忘記雙標(biāo)動(dòng)作了,這次我們把UFO重命名為Player,因?yàn)樗褪俏覀兺婕宜懿倏氐膶?duì)象。

這個(gè)主角有點(diǎn)太胖了,格子都裝不下了,讓我們給它減減肥。選中Player,把Transform的Scale內(nèi)的x和y都改成0.75(2D游戲不用改z)。看,格子這么合身!
Transform屬性說(shuō)明:Position位置,Rotation旋轉(zhuǎn)角度,Scale縮放比例。
在Player的Inspector窗口下有一個(gè)組件Sprite Renderer,有一個(gè)選項(xiàng)Sorting Layer,它控制渲染層級(jí)的順序。在這里我們需要把UFO也就是player的這一項(xiàng)改成Player,然后把Background的改成Background。很繞→_→ 這個(gè)改了之后,背景就不會(huì)蓋在上面擋住UFO了~

六、讓UFO走起——添加剛體(Rigidbody2D)和腳本(script)
UFO死氣沉沉地一動(dòng)也不動(dòng),我們總不能干瞪著眼看它,這樣不叫游戲。那么接下來(lái)就該讓它走起來(lái)了~它不會(huì)無(wú)緣無(wú)故地走起來(lái),需要我們?nèi)ソo它施加一個(gè)物理作用力,控制它往我們指定的方向走。這就涉及到物理引擎的控制了,具體我們接下來(lái)看怎么實(shí)現(xiàn)吧。
第1步:給UFO添加剛體組件
剛體能讓UFO被物理引擎所控制,這樣便能模擬現(xiàn)實(shí),通過(guò)受到物理作用力來(lái)實(shí)現(xiàn)真實(shí)的物理表現(xiàn)效果比如移動(dòng)和碰撞,方便后續(xù)實(shí)現(xiàn)拾取金幣和撞墻。
給UFO添加剛體組件的2種方法:
- 選中Player,通過(guò)菜單欄Component-->Physics 2D-->Rigidbody 2D添加。
- 選中Player,通過(guò)Inspector的Add Component-->Physics 2D-->Rigidbody 2D添加

第2步:給UFO添加腳本組件
OK,現(xiàn)在UFO有剛體了,它可以接受物理作用力了,那么如何給它發(fā)出指令讓它走起來(lái)?通過(guò)給UFO添加腳本并且編輯腳本可以實(shí)現(xiàn)對(duì)它的操作。
不過(guò),首先我們要意識(shí)到,腳本也是資源文件,所以是需要存放在Assets文件夾里面的。還記得之前提過(guò)的資源分類嗎?在Assets下創(chuàng)建一個(gè)Scripts文件夾,用來(lái)存放所有的腳本文件。

給GameObject添加腳本的方法是選中GameObject(也就是我們的主角Player),點(diǎn)擊Inspector窗口的Add Component按鈕,在彈出來(lái)的菜單中選擇New Script

此時(shí)要求輸入腳本名稱和選擇語(yǔ)言類型,這里我們將腳本命名為PlayerController,然后語(yǔ)言選擇C Sharp。

點(diǎn)擊Create and Add后,我們就成功給UFO添加一個(gè)腳本組件了。接下來(lái)你們肯定以為要編輯腳本了對(duì)不對(duì)?NO,NO,NO(賤笑.jpg)。點(diǎn)擊Assets文件夾,可以看到文件夾內(nèi)出現(xiàn)了一個(gè)名為PlayerController的腳本文件。由此我們知道,每次給游戲?qū)ο笮略龅哪_本文件默認(rèn)是放在Assets文件夾。根據(jù)資源分類原則,要先記得把這個(gè)腳本文件拖到剛才創(chuàng)建的Scripts文件夾內(nèi)。
然后通過(guò)雙擊這個(gè)腳本文件,或者點(diǎn)擊腳本組件右上角的小齒輪按鈕,在彈出來(lái)的菜單中選擇Edit Script便可打開腳本編輯器了。

第3步:編寫腳本
下面沒(méi)有編程經(jīng)驗(yàn)的同學(xué),可以直接按照例子來(lái)抄寫代碼,以后做的多了自然也就容易理解了。
新打開的腳本是這樣的:

里面默認(rèn)自帶了2個(gè)方法,Start和Update,Update在這個(gè)例子里用不到。我們添加一個(gè)FixedUpdate的方法,該方法主要適用于處理物理邏輯,代碼如下:

簡(jiǎn)單說(shuō)明下:
- 新增了兩個(gè)變量成員,rb2D是剛體組件,speed是控制UFO移動(dòng)的速度。
- Start方法劃線部分,用GetComponent方法獲得當(dāng)前腳本所掛載的游戲?qū)ο螅≒layer)里的剛體組件并且賦值給rb2D
- FixedUpdate方法,定義了兩個(gè)浮點(diǎn)變量分別代表鍵盤水平和垂直方向的輸入,根據(jù)這兩個(gè)值確定移動(dòng)二維向量movement,最后由剛體rb2D調(diào)用AddForce方法給UFO添加一個(gè)力使其移動(dòng)。
Tips:腳本新增的Public變量成員,會(huì)在Unity編輯器中腳本組件內(nèi)顯示并且可以修改賦值,比如此例中的speed。

OK,現(xiàn)在回到Unity,把Speed改成10,然后運(yùn)行游戲,激動(dòng)人心的時(shí)刻要到了!

咦?為什么UFO在做自由落體運(yùn)動(dòng)?尷尬ヾ(??﹏?)??......前面提到,剛體能讓UFO處于物理引擎控制之下,所以添加了剛體的UFO是可以受到物理作用力包括重力的!那怎么樣讓它不受重力影響呢?把Rigidbody2D組件的Gravity Scale項(xiàng)的數(shù)值改成0就可以了。

現(xiàn)在再運(yùn)行游戲,UFO不會(huì)再自由落體了。按WASD或者方向鍵試試,可以看到UFO走起來(lái)的效果了。修改Speed的值可以改變速度哦。
【擴(kuò)展補(bǔ)充】
好的習(xí)慣:
- 每創(chuàng)建一個(gè)GameObject 就進(jìn)行雙標(biāo)動(dòng)作:改名、reset Transform
- 每新建一個(gè)Script,先拖入到scripts文件夾再編輯
- Script編輯完畢之后,如有新增的public成員變量,要記得在Inspector該腳本下該選項(xiàng)填充數(shù)值,或者把對(duì)應(yīng)對(duì)象內(nèi)容拖入到框內(nèi)。
Q&A:
Q1:Game窗口里面棋盤外面區(qū)域是一片藍(lán)色,怎么修改成自己想要的顏色?
A1:選擇Hierarchy窗口內(nèi)的Main Camera,在右側(cè)Inspector的Camera組件內(nèi)修改Background背景色即可。同學(xué)可以把RGB設(shè)置成75 75 75,灰色調(diào)和Scene窗口一致。
Q2:在腳本里面,Update()和FixedUpdate()有什么不同?為什么在這里我們要使用FixedUpdate()?
A2:Update() 和 FixedUpdate()在游戲中的作用是都會(huì)在更新的時(shí)候自動(dòng)循環(huán)調(diào)用。他們的區(qū)別主要就是
Update()是在每次渲染新的一幀的時(shí)候才會(huì)調(diào)用,也就是說(shuō),這個(gè)方法被調(diào)用的頻率和設(shè)備的性能有關(guān)。性能好的機(jī)器上fps高,同樣的時(shí)間傳輸?shù)膸瑪?shù)多,Update被調(diào)用的次數(shù)多,而性能差的機(jī)器就相反。這會(huì)導(dǎo)致同一個(gè)游戲在不同的機(jī)器上效果不一致,有的快有的慢。
FixedUpdate()是在固定的時(shí)間間隔執(zhí)行,不受游戲幀率的影響,所以非常適用于處理物理邏輯。因此人們處理Rigidbody的時(shí)候經(jīng)常使用FixedUpdate()。
Q3:那Start()是什么鬼?
A3:游戲初始化的時(shí)候調(diào)用Start方法,后續(xù)不會(huì)再調(diào)用。而Update之類的都是反復(fù)根據(jù)他們的規(guī)則在調(diào)用執(zhí)行~