小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Unity 2D 吃豆人教程(上)

 沖涼的蜘豬俠 2017-01-04

Unity 2D 吃豆人教程(上)

前言

來(lái)用制作一款類(lèi)吃豆人的游戲吧。最初版的吃豆人游戲發(fā)布于1980年的十二月并很快成為有史以來(lái)最熱門(mén)的街機(jī)游戲。這款游戲如此流行,以至于Unity甚至在它的游戲引擎里放置了該游戲的一小部分。

Unity 2D 吃豆人教程(上)

在本教程中,我們將通過(guò)Unity強(qiáng)大的2D特性,只用62行代碼復(fù)制出一款吃豆人游戲。我們會(huì)盡量保持簡(jiǎn)單并關(guān)注于迷宮、幽靈、食物以及,當(dāng)然了,吃豆人。

照例,所有內(nèi)容都盡量解釋得簡(jiǎn)單以便所有人都能理解。

這里有一個(gè)最終游戲效果的預(yù)覽:

要求

背景知識(shí)

我們的教程沒(méi)有任何特別的技能要求。如果你已了解Unity并且之前就聽(tīng)過(guò)GameObject,Prefab和Transform,那么你已經(jīng)準(zhǔn)備好了。如果你并不了解這些,也不用太擔(dān)心。

還可以閱讀我們之間的Unity教程,如Unity 2D Pong Game,以便先來(lái)感受一下這個(gè)引擎。

Unity版本

我們的吃豆人教程是利用.04開(kāi)發(fā)的。更新的版本也同樣沒(méi)問(wèn)題,之前的版本也許不能支持?,F(xiàn)在Unity 5的免費(fèi)版隨之附帶了所有的引擎屬性,這也使得它成為推薦的版本。

工程設(shè)置

現(xiàn)在開(kāi)始。啟動(dòng)Unity并創(chuàng)建New Project:

Unity 2D 吃豆人教程(上)

我們將其命名為pacman,選擇任意路徑,如C:\,選擇2D模式并點(diǎn)擊Create Project:

Unity 2D 吃豆人教程(上)

在Hierarchy里選中Main Camera并將其背景顏色設(shè)置為黑色。還需如下圖所示調(diào)整其Size和Position。

迷宮

迷宮精靈

來(lái)創(chuàng)建吃豆人風(fēng)格的迷宮吧。我們將繪制的迷宮基于原版,但不完全一致:

Unity 2D 吃豆人教程(上)

提示:右鍵單擊圖片,選擇Save As...,到項(xiàng)目的Assets 文件夾下并將其存放于新建的Sprites文件夾中。

保存于我們的項(xiàng)目目錄后,我們就可以在Project Area選中它了。

Unity 2D 吃豆人教程(上)

然后在Inspector中修改Import Settings。

提示:一個(gè) Pixels Per Unit 等于 8 意味著游戲世界里一個(gè)單元中有 8 x 8 個(gè)像素。我們將為所有貼圖賦予這個(gè)值。選擇8是因?yàn)閮蓚€(gè) Pac-Dot(食物)間永遠(yuǎn)相隔 8 個(gè)像素,同時(shí)我們也希望這個(gè)間距為游戲中的1單元。為 Pivot 選擇 Bottom-Left 是由于它會(huì)使之后的對(duì)齊工作更簡(jiǎn)單。

現(xiàn)在我們可以從 Project Area 將地圖 Sprite 拖拽到 Scene 中:

Unity 2D 吃豆人教程(上)

再來(lái)檢查一下 Inspector 并且將地圖的坐標(biāo)設(shè)置成 (0, 0) 以保持清晰:

Unity 2D 吃豆人教程(上)

地圖物理

此時(shí)的地圖還只是一張圖片而已。它并不屬于整個(gè)物理世界,物體不會(huì)與它碰撞并且吃豆人還是能穿墻的。所以來(lái)給地圖中的每面墻加上 Collider 吧。

在 Inspector 中選擇 Add Component->Physics 2D->Box Collider 2D:

Unity 2D 吃豆人教程(上)

如果我們往 Scene 里看一下就會(huì)發(fā)現(xiàn) Unity 用 Collider 將整個(gè)地圖給包裹住了,我們可不希望這樣:

Unity 2D 吃豆人教程(上)

我們真正想要的是地圖中的每面墻由一個(gè) Collider 包裹。實(shí)現(xiàn)它有兩種做法。我們可以創(chuàng)建一個(gè)算法來(lái)讀取迷宮圖片然后生成一系列基于它的 Collider,或者全部手動(dòng)添加。

點(diǎn)擊 Inspector 中的 Edit Collider 按鈕:

Unity 2D 吃豆人教程(上)

提示:這個(gè)按鈕是 Unity 4.6 中新添加的,所以若你看不到這個(gè)按鈕請(qǐng)確保使用了最新版本。

這允許我們?cè)趫?chǎng)景中使用綠點(diǎn)修改Collider:

我們將為迷宮中的每一堵墻重復(fù)這一過(guò)程。需要做的就是選擇 Add Component->Physics 2D->Box Collider 2D,點(diǎn)擊 EditCollider 按鈕并在 Scene 中修改它直到適合相鄰的那堵墻。

每個(gè)Collider的精確是很重要的。舉例來(lái)說(shuō),如果我們放大來(lái)看,這些綠線應(yīng)該完美包裹藍(lán)色的方塊:

Unity 2D 吃豆人教程(上)

實(shí)現(xiàn)的技巧是選擇 Collider 中的 Center 和 Size 屬性,那樣它們就一直是 1.25、 1.5、 1.75 或 2.00,永遠(yuǎn)不會(huì)出現(xiàn)像 1.24687 或 1.25788 這樣的數(shù)字。這里有一些例子:

Unity 2D 吃豆人教程(上)

提示:如果稍后你的吃豆人在迷宮中卡住或者移動(dòng)有困難,那就是由于 Maze Collider 沒(méi)有被完美放置。

下面是最終效果:

Unity 2D 吃豆人教程(上)

提示:校準(zhǔn)所有的 Collider 可能得花上一些時(shí)間。

添加吃豆人

吃豆人Sprite

現(xiàn)在到了我們游戲中最重要的部分了:吃豆人。我們將需要每個(gè)移動(dòng)方向的不同動(dòng)畫(huà):

- 右

- 左

- 上

- 下

來(lái)把所有動(dòng)畫(huà)畫(huà)在一張圖里,同一方向的動(dòng)畫(huà)位于位于圖中的一行:

Unity 2D 吃豆人教程(上)

提示:右鍵單擊圖片,選擇 Save As... 并保存在項(xiàng)目 Assets/Sprites的文件夾里。

我們將為它使用下面的 Import Settings:

Unity 2D 吃豆人教程(上)

切割 Pac-Man Sprite

將 Sprite Mode 設(shè)置成 Multiple 是很重要的,那將告訴 Unity 在我們的 Sprite 里哪里有多于一個(gè)的吃豆人。來(lái)通過(guò)點(diǎn)擊按鈕打開(kāi) Sprite Editor:

Unity 2D 吃豆人教程(上)

現(xiàn)在我們可以告知 Unity 哪些地方的吃豆人動(dòng)畫(huà)切片是定位在我們的 Sprite 中的。我們將選擇 Slice,然后將其切割成 16 x 16 Grid 并在之后按下 Slice 按鈕:

Unity 2D 吃豆人教程(上)

一旦Sprite 被切割好,我們就可以再次關(guān)閉 Sprite Editor 了。如果 Unity 詢(xún)問(wèn) Unapplied Import Settings,那就點(diǎn)擊 Apply。

結(jié)果就是我們現(xiàn)在在 Project Area 的Pac-Man Sprite 之下有了 12 片:

Unity 2D 吃豆人教程(上)

創(chuàng)建吃豆人動(dòng)畫(huà)

好了,現(xiàn)在我們有了動(dòng)畫(huà)的切片,可以用它來(lái)創(chuàng)建 4 個(gè)動(dòng)畫(huà)。

right (Slice 0, 1 and 2)

右(切片 0、1 和 2)

left (Slice 3, 4 and 5)

左(切片 3、4 和 5)

up (Slice 6, 7 and 8)

上(切片 6、7 和 8)

down (Slice 9, 10 and 11)

下(切片 9、10 和 11)

來(lái)創(chuàng)建一個(gè) right 動(dòng)畫(huà)吧。

Unity 2D 吃豆人教程(上)

然后將它們拖拽到 Scene 中:

Unity 2D 吃豆人教程(上)

現(xiàn)在我們無(wú)論何時(shí)將一些切片拖入到場(chǎng)景中,Unity 都將會(huì)知道我們希望通過(guò)它們創(chuàng)建一個(gè)動(dòng)畫(huà),因此它會(huì)自動(dòng)詢(xún)問(wèn)我們存放動(dòng)畫(huà)的位置。來(lái)將它以right.anim 的名字存放于一個(gè)新建的 PacmanAnimation 文件夾中。Unity 就為場(chǎng)景添加了一個(gè) pacman_0 GameObject 并在 Project Area 添加了兩個(gè)文件:

Unity 2D 吃豆人教程(上)

第一個(gè)文件是可以具體說(shuō)明如動(dòng)畫(huà)速度以及混合樹(shù)等的動(dòng)畫(huà)狀態(tài)機(jī)。第二個(gè)是動(dòng)畫(huà)本身。接下來(lái)為剩下的動(dòng)畫(huà)(切片 3、4、5 作為左;切片 6、7、8 作為上以及切片 9、10、11 作為下)重復(fù)上述過(guò)程。

這里是 Hierarchy 在操作后的樣子:

Unity 2D 吃豆人教程(上)

Unity 后清理

Unity 為每個(gè)動(dòng)畫(huà)都創(chuàng)建了一個(gè)GameObject,但我們只需要第一個(gè),很快就能知曉原因。所以來(lái)選中剩余三個(gè),右鍵單擊并刪除它們:

Unity 2D 吃豆人教程(上)

在 Project Area 里一個(gè)相似的情況發(fā)生了。我們現(xiàn)在有了 4 個(gè)動(dòng)畫(huà)以及 4 個(gè)動(dòng)畫(huà)狀態(tài)機(jī):

Unity 2D 吃豆人教程(上)

再一次的,我們只需要一個(gè)動(dòng)畫(huà)狀態(tài)機(jī)即可,所以刪除其它三個(gè):

Unity 2D 吃豆人教程(上)

吃豆人動(dòng)畫(huà)狀態(tài)機(jī)

此時(shí)我們擁有了 4 個(gè)動(dòng)畫(huà)文件,但 Unity 還并不知道該在何時(shí)播放哪個(gè)動(dòng)畫(huà)。解決方法一部分靠 Unity 自身驚人、強(qiáng)大的 Mecanim 動(dòng)畫(huà)系統(tǒng)。我們將需要一個(gè)擁有 4 種狀態(tài)的動(dòng)畫(huà)狀態(tài)機(jī):

同樣還需要添加一些 Transition 來(lái)讓 Unity 知道何時(shí)從一個(gè)動(dòng)畫(huà)狀態(tài)切換到另一個(gè)。

提示:Unity 會(huì)在處于 right 狀態(tài)時(shí)一直循環(huán)播放 right 動(dòng)畫(huà)。它將需要使用 Transitions 來(lái)知道何時(shí)切換到另一個(gè)狀態(tài)。Unity 會(huì)全部自動(dòng)完成,我們需要做的只需用稍后的一段代碼來(lái)通知它吃豆人的運(yùn)動(dòng)方向。

好了,來(lái)雙擊 Project Area 里的 pacman_0 動(dòng)畫(huà)狀態(tài)機(jī)文件:

現(xiàn)在我們可以在 Animator 中看到狀態(tài)機(jī)了:

Unity 2D 吃豆人教程(上)

創(chuàng)建其它狀態(tài)

right 狀態(tài)已經(jīng)在 Animator 中了,所以就簡(jiǎn)單將 left.anim 文件從 PacmanAnimation文件夾中拖拽到 Animator 里來(lái)添加狀態(tài):

Unity 2D 吃豆人教程(上)

為另外兩個(gè)狀態(tài)重復(fù)這一過(guò)程:

Unity 2D 吃豆人教程(上)

Mecanim 特別厲害的一點(diǎn)是它將自動(dòng)管理所有的動(dòng)畫(huà)狀態(tài)。我們所要做的就是告訴 Mecanim 來(lái)注意吃豆人的運(yùn)動(dòng)方向,不需要做別的了。Mecanim 將會(huì)靠自己來(lái)在各個(gè)動(dòng)畫(huà)狀態(tài)間轉(zhuǎn)換,不需要我們的指引。

創(chuàng)建參數(shù)

所以讓我們來(lái)告知 Mecanim 需要注意吃豆人的運(yùn)動(dòng)方向吧。一個(gè)運(yùn)動(dòng)方向是一個(gè) Vector2 類(lèi)型,下面的圖片展示了一些可能的運(yùn)動(dòng)方向:

Unity 2D 吃豆人教程(上)

我們的吃豆人將只需要 4 個(gè)運(yùn)動(dòng)方向(上、下、左、右)。這就意味著動(dòng)畫(huà)狀態(tài)機(jī)里只需要一下 4 種 Transitions:

如果 DirY > 0 那么就 up(like DirY=1,DirY=2,DirY=3 等等)

如果 DirY < 0 那么就 down(like DirY=-1,DirY=-2,DirY=-3 等等)

如果 DirX > 0 那么就 right(like DirX=1,DirX=2,DirX=3 等等)

如果 DirX < 0 那么就 left (like DirX=-1,DirX=-2,DirX=-3 and so on)

再來(lái)看一下 Animator 的左側(cè)區(qū)域并且選擇 Parameters 標(biāo)簽:

Unity 2D 吃豆人教程(上)

這里我們要點(diǎn)擊右側(cè)的 并添加一個(gè)名為 DirX 的 Float 類(lèi)型參數(shù),再添加一個(gè)名為 DirY 的 Float 類(lèi)型參數(shù):

Unity 2D 吃豆人教程(上)

之后我們就可以通過(guò)如下代碼設(shè)置這些參數(shù):

GetComponent<Animator>().SetFloat('DirX', 0);

GetComponent<Animator>().SetFloat('DirY', 0);

創(chuàng)建 Transitions

我們希望 Unity 能基于參數(shù)自轉(zhuǎn)換動(dòng)畫(huà)狀態(tài)。這些Transition 是被用于實(shí)現(xiàn)這一效果的。舉例來(lái)說(shuō),我們可以添加一個(gè)從 left 到 right 的 Transition 帶有一個(gè) DirX > 0 的條件。

不管怎樣最好還是要有一個(gè)小的容差,因?yàn)楦↑c(diǎn)值不總是準(zhǔn)確的,這就是為什么我們?nèi)《褂?DirX >0.1。

現(xiàn)在我們也必須為其它到 right 的狀態(tài)使用 DirX > 0.1 Transition。想要省點(diǎn)力氣,可以使用 Unity 的 Any State。

Any State 確實(shí)代表了任意的狀態(tài)。所以如果我們創(chuàng)建了一個(gè)從 Any State 到 right 的 Transition 就等同于從 left、up 和 down 到 right 的。

右鍵單擊 Any State 并選中 MakeTransition。之后我們可以將白色箭頭拖拽到 right 狀態(tài)上:

Unity 2D 吃豆人教程(上)

現(xiàn)在我們可以點(diǎn)擊白色尖頭并且看一下 Inspector,在那里我們可以修改 Transition 的 Condition(換句話說(shuō),轉(zhuǎn)換狀態(tài)的時(shí)機(jī))。我們將把它設(shè)置成 DirX > 0.1:

Unity 2D 吃豆人教程(上)

提示:按下底部右側(cè)的 以添加一個(gè) Condition。

同樣在 Settings 里關(guān)閉 Can Transition To Self:

Unity 2D 吃豆人教程(上)

提示:這避免了異常狀況的發(fā)生,比如一個(gè)動(dòng)畫(huà)可能會(huì)在按下一個(gè)移動(dòng)鍵的時(shí)候一直重啟。

結(jié)果,無(wú)論何時(shí)吃豆人都向右走(DirX > 0.1),animator將會(huì)轉(zhuǎn)換到 right 狀態(tài)并播放動(dòng)畫(huà)。

再添加 3 個(gè) Transition:

Any State 到 left 伴有 Condition DirX< -0.1

Any State 到 up 伴有 Condition DirY> 0.1

Any State 到 down 伴有 Condition DirY< -0.1

以下是 Animator 現(xiàn)在的樣子:

Unity 2D 吃豆人教程(上)

我們基本上完成了動(dòng)畫(huà)狀態(tài)機(jī)。這里還有最后一個(gè)要校準(zhǔn)的內(nèi)容,所以選中所有狀態(tài)然后在 Inspector 里修改它們的 Speed 來(lái)使動(dòng)畫(huà)看起來(lái)不太快:

Unity 2D 吃豆人教程(上)

如果我們按下 Play,就可以看到 right 動(dòng)畫(huà):

Unity 2D 吃豆人教程(上)

原文鏈接:https:///unity/-pacman-game

譯文版:http://www./thread-98978-1-1.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多