五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

從零開始獨(dú)立游戲開發(fā)學(xué)習(xí)筆記(二十三)--Unity學(xué)習(xí)筆記(十)--M_Studio教程2D入門

2022-02-08 23:36 作者:oyishyi  | 我要投稿

小小小小小狐貍

1. 物品收集

先加上櫻桃,這個(gè)之前講過就不說了。然后是櫻桃的收集效果。

1.1 IsTrigger

首先得加上碰撞體,然后勾上 IsTrigger,因?yàn)槲覀兿胱屵@個(gè)碰撞體作為一個(gè)觸發(fā)手段而不是物理效果。

1.2 tag

在 layer 左邊還有一個(gè) tag,也是用于給 objct 分類。不過兩者側(cè)重點(diǎn)不同,像是馬上準(zhǔn)備要做的碰撞效果 就是 tag 比較側(cè)重的部分。之前講的選中物體就是 layer 主場(chǎng)。

這里我們添加一個(gè) collection 的 tag,給櫻桃加上。

然后在 unity 里加一個(gè)新的內(nèi)置方法,叫做 OnTriggerEnter2D,這個(gè)方法會(huì)在 trigger 碰撞發(fā)生時(shí)觸發(fā)。參數(shù)為碰撞的物體。這里判斷如果碰撞的物體的 tag 為 Collection 的時(shí)候銷毀它。

1.3 物品收集

只是銷毀當(dāng)然不夠,還需要增加收集的數(shù)量。這個(gè)很簡(jiǎn)單,給 player 加一個(gè) cherry 變量,吃到櫻桃的時(shí)候 + 1 即可。

1.4 關(guān)卡設(shè)計(jì)

然后就是自由發(fā)揮,把關(guān)卡畫豐富一些。

2. bug 修復(fù)

2.1 撞墻不掉落

通過之前的流程做出來的游戲,小狐貍撞到墻后只要按著方向鍵不會(huì)掉落。原因是小狐貍移動(dòng)的時(shí)候有一個(gè)向左/右的力,而這個(gè)力加上摩擦系數(shù),就會(huì)產(chǎn)生垂直方向的摩擦力,因此小狐貍不會(huì)掉下去。

解決這個(gè)的方法當(dāng)然是對(duì)摩擦力進(jìn)行調(diào)整,為了調(diào)整摩擦力,需要用到 2D -> Physics Material 2D,也就是物理材質(zhì) 2D。在 asset panel 新建這么一個(gè)材質(zhì)。拖到小狐貍的臉部的 box collider 上,當(dāng)然這是取巧之技,真實(shí)情況應(yīng)該是在墻面上新建一個(gè)層賦予光滑,只是比較麻煩現(xiàn)在不做。

2.2 多級(jí)跳

現(xiàn)在小狐貍可以在空中跳且無限跳,這很不好。當(dāng)然之后會(huì)介紹更好的方法,不過現(xiàn)在可以先通過判斷是否在地面上來判斷是否跳躍做一個(gè)簡(jiǎn)單的處理。

2.3 多次積分

有時(shí)候小狐貍收集到一個(gè)櫻桃卻加兩分,這是因?yàn)槲覀兘o小狐貍設(shè)置了兩個(gè)碰撞體,因此當(dāng)某一幀這兩個(gè)碰撞體恰好都碰撞了后就會(huì)觸發(fā)兩次 OnTriggerEnter2D。
當(dāng)然你可能回想,可是我們第一次碰撞后就 Destroy 了???沒錯(cuò),但是 Unity 的 Destory 并不會(huì)在這一幀給你銷毀掉,而是要等到下一幀。因此可以選擇碰撞后將其 tag 設(shè)置為 Untagged,這樣就可以避免第二次加分了。

3. UI

所有的 UI 都要在 canvas 上,因此首先創(chuàng)建的應(yīng)該是一個(gè) canvas。
雙擊 canvas 聚焦,會(huì)發(fā)現(xiàn)其在一個(gè)完全看不到游戲界面的地方,這是因?yàn)?UI 全部是在單獨(dú)的界面。 新建幾個(gè) text 和 image,顯示出一些 UI

然后在 player 里去改變這個(gè)值(也是為了取巧,真實(shí)情況寫在 player 里并不好),在 player 里新建一個(gè) Text 類型的變量(這個(gè)變量需要導(dǎo)入 UnityEngine.UI 庫),然后運(yùn)行的時(shí)候更改這個(gè)變量即可。

不過依然有一個(gè)問題,那就是當(dāng)切換分辨率的時(shí)候,會(huì)發(fā)現(xiàn) UI 的位置會(huì)換來換去。

3.1 錨點(diǎn)

進(jìn)入 canvas 視角,選中一個(gè) UI object,會(huì)發(fā)現(xiàn)屏幕中央有一個(gè)錨點(diǎn):

這個(gè)錨點(diǎn)的意思就是這個(gè) object 是按照和這個(gè)錨點(diǎn)的距離關(guān)系保持不變的。這時(shí),選擇 inspector 里上方的這個(gè),這樣就可以將其始終固定在左上角:

但是依然有問題,那就是調(diào)整到高分辨率(如 4K) 的時(shí)候,UI 會(huì)變得非常小,如果有點(diǎn)前端知識(shí)可以知道這是因?yàn)槲覀兊?UI 用的是 px 為單位造成的,因此我們前往 canvas 的 inspector 里將 UI scale mode 更改為隨著 screen size 而改變(類似于前端的 vh,vw 單位)

4.敵人

首先給一個(gè)簡(jiǎn)單的,碰到敵人就消滅的效果。做法和收集類似,不過敵人是有碰撞體的而不是 trigger,因此用得另一個(gè)方法,這個(gè)方法有一個(gè)明顯的區(qū)別就是參數(shù)不是 collider 而是 collision,因此選取 tag 前搖先取得 gameobject,不過都在 collision 里可以直接訪問因此也不麻煩。

當(dāng)然這樣很不好,我們想讓角色在踩到敵人才會(huì)消滅。因此可以使用之前的 isFalling 來判斷。當(dāng)然這樣也并不精確,依舊存在很多 bug,這是為了教程取舍。

4.1 彈回和硬直

再給角色添加一個(gè)碰撞后彈回的效果,當(dāng)碰撞發(fā)生時(shí),判斷如果不是踩死敵人的話,就彈回對(duì)應(yīng)方向一段距離。不過添加完彈回的代碼后發(fā)現(xiàn)并不會(huì)運(yùn)作,這是因?yàn)榉较蜴I一直按著的時(shí)候,角色會(huì)一直被賦予速度,覆蓋掉彈回效果的速度。因此我們引入了硬直效果,當(dāng)碰撞后賦值硬直,移動(dòng)動(dòng)畫里判斷當(dāng)硬直的時(shí)候無法移動(dòng)。

當(dāng)然,效果依然還有問題,第一次碰撞后就無法行動(dòng)了,這是自然,因?yàn)槲覀儧]有把硬直調(diào)回來。 方法是在 update 里加這么一段:

當(dāng)速度的絕對(duì)值小于 0.1 的時(shí)候恢復(fù)硬直,也就是當(dāng)彈回接近停止的時(shí)候恢復(fù)。

4.2 受擊動(dòng)畫

除了 falling 狀態(tài)的所有狀態(tài)都可以變成 hurt 狀態(tài),結(jié)束后效果類似如下:

5. 簡(jiǎn)單敵人 AI

相當(dāng)簡(jiǎn)單的 AI。

首先給青蛙添加腳本,之前都是在 component 里添加的,這樣其實(shí)有一個(gè)不好,就是自動(dòng)創(chuàng)建的腳本文件在最外層,還要手動(dòng)拖到 Scripts 文件夾里,因此比較方便的是直接在文件夾里新建腳本,然后拖到青蛙組件或者h(yuǎn)ierarchy上即可。

然后我們需要給青蛙加一個(gè)左右自行移動(dòng)的效果。老師給了其中一個(gè)方法, 當(dāng)然真實(shí)情況有其他更好的方法,老師主要是為了介紹 unity 的一些特性而專門采用某些方法的。

像是這里的話,老師先是給 frog 增加了兩個(gè)子物體(空物體),分別作為左右邊界。那么當(dāng)我們看向屏幕的時(shí)候,發(fā)現(xiàn)因?yàn)槭强瘴矬w,屏幕上找不到位置,因此這里就引入了 icon 的概念:

5.1 icon

點(diǎn)擊在 inspector 左上角的方塊,可以給物體添加 icon。找不到 icon 的時(shí)候可以去 scene view 上方的 gizmos 列表里可以調(diào)整 3d icon 的大小,這個(gè)之前講過。

5.2 debug 可以去 scene 里看

老師想著通過判斷青蛙的位置和子物體的位置的對(duì)應(yīng)來判斷是否轉(zhuǎn)向。但實(shí)際上發(fā)現(xiàn)并沒有這樣做。原因很簡(jiǎn)單,因?yàn)樽游矬w跟著青蛙一起動(dòng)了。

雖然這個(gè) bug 很容易就能想到,但是這里老師讓我們?nèi)?scene 里看,有玩的時(shí)候也可以轉(zhuǎn)去 scene 里看。因?yàn)?scene 里細(xì)節(jié)很多,而且可以看到 icon。而 game view 里是看不到的。可以很直觀地看到 icon 隨著青蛙在動(dòng)。

5.3 斷絕繼承關(guān)系

這里的解決方案就是在 start 時(shí),斷絕 left,right 與 frog 的繼承關(guān)系。使用 DetachChildren 即可。

5.4 不斷絕關(guān)系的方式

斷絕后 hierarchy 上全是 left 和 right,雖然不影響游玩,退出游戲模式后也會(huì)返回。但是這樣不好看,其實(shí)可以在一開始獲得兩個(gè)項(xiàng)目的位置后,直接將這兩個(gè)項(xiàng)目銷毀。

6. 青蛙動(dòng)畫

先給青蛙加上跳躍動(dòng)畫,按照之前的來,先做出一個(gè)只要碰到地面就會(huì)跳的效果。

6.1 event

在這之后開始介紹事件,因?yàn)橐龀鲆粋€(gè),掉落到地面后完成一個(gè) idle 動(dòng)畫,再跳躍的效果。這個(gè)用之前的方式是不行的,因?yàn)橐WC一整個(gè) idle 動(dòng)畫完成,要在 idle 動(dòng)畫播放完后執(zhí)行,于是 event 出現(xiàn)了。

這里我們把 move 從fixupdate 里移出來。讓 idle 動(dòng)畫播放到最后時(shí)執(zhí)行。這樣就可以保證青蛙在 idle 動(dòng)畫時(shí)時(shí)不會(huì)移動(dòng)和跳躍了。 跳躍動(dòng)畫以及動(dòng)畫的切換和之前一樣。

7. 成果


從零開始獨(dú)立游戲開發(fā)學(xué)習(xí)筆記(二十三)--Unity學(xué)習(xí)筆記(十)--M_Studio教程2D入門的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
中阳县| 雅江县| 长垣县| 夏河县| 锡林郭勒盟| 东丰县| 泰兴市| 祁门县| 玉环县| 乐清市| 上高县| 张家界市| 嘉义县| 新和县| 乌兰县| 祥云县| 伊宁市| 苗栗市| 永新县| 江孜县| 巩义市| 澜沧| 西华县| 宁南县| 搜索| 广宁县| 澎湖县| 黄陵县| 岑溪市| 仁寿县| 望城县| 辽源市| 濮阳县| 鲜城| 石首市| 海兴县| 芦溪县| 南投市| 满城县| 周口市| 同仁县|