国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

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

【Unity學(xué)習(xí)筆記】Beginning 2D Game Development

2023-03-05 09:54 作者:菜肉四喜丸子  | 我要投稿

1. class定義一個(gè)新要素;start()和update()都是函數(shù)

2. tilemap可以在每個(gè)格子里設(shè)置不同的sprite,它們?cè)谝曈X(jué)上可以彼此連到一起。

2D Object > Tilemap。Tilemap是Grid的子對(duì)象。Tilemap由Tile組成。

3. 如何創(chuàng)建2D地圖

(1)創(chuàng)建圖塊地圖(tilemap)

層級(jí)(Hierarchy)窗口>2D Object>Tilemap

創(chuàng)建一個(gè)新游戲?qū)ο螅蒅rid(網(wǎng)格)以及子對(duì)象Tilemap組成

(2)創(chuàng)建圖塊(tile)文件夾

項(xiàng)目(Project)窗口>Assets>Art(范例文件夾,即存放源圖像的文件夾)

創(chuàng)建Tiles文件夾

(3)調(diào)整源圖像設(shè)置

源圖像應(yīng)為sprite格式

項(xiàng)目窗口>Art>Sprites>Environment

選擇相應(yīng)源圖像,打開(kāi)檢查器,在Pixel Per Unit中將值調(diào)整為與源圖像大小相同的值,并點(diǎn)擊“應(yīng)用”。

(4)分割

還是在檢查器中,打開(kāi)Sprite Editor,在頂部Type下拉菜單中選擇Grid by Cell Count,根據(jù)需求選擇Column & Row的值,例如(3*3)。

然后點(diǎn)擊分割(Slice)和應(yīng)用。

(5)將源圖像轉(zhuǎn)換為圖塊

將項(xiàng)目窗口中分割好的源圖像整體拖拽入調(diào)色板(Palette)窗口,另存到Tiles文件夾。

(6)修改圖層順序

層級(jí)窗口>Tilemap>Tilemap Renderer>Additional Settings>Order in Layer

數(shù)字越小(可為負(fù),默認(rèn)為0),圖層越靠下。

(7)關(guān)于遮擋物的圖層順序

根據(jù)y來(lái)決定圖層順序,y較?。ㄎ恢幂^低)的物體應(yīng)該在y較大(位置較高)的物體之后繪制(在上層)。

Edit>Project Settings>Graphics>Camera Settings>Transparency Sort Mode>Custom Axis>增加下列坐標(biāo):x=0,y=1,z=0

玩家>Sprite Renderer>Sprite Sort Point>Pivot

Pivot:軸心點(diǎn),可以自主定義。該點(diǎn)為物體坐標(biāo)。

改變軸心點(diǎn)位置:

Project window>Assets>Art>Sprites>Environment>MetalCube>Pivot>Bottom

或者,Sprite Editor>Pivot>Custom Pivot>x=0.5, y=0

4. 關(guān)于2D物體的物理

(1)物理系統(tǒng)的更新頻率與游戲不同。Update是在游戲每次計(jì)算出新圖像時(shí)更新,但每秒的新圖像數(shù)量可能有很大差異。為了讓物理計(jì)算頻率穩(wěn)定,需要使用FixedUpdate,但這有可能錯(cuò)過(guò)輸入值,因此需要增加兩個(gè)浮點(diǎn)變量來(lái)儲(chǔ)存Update函數(shù)內(nèi)當(dāng)前的水平數(shù)值和垂直數(shù)值。

(2)為了確保物體的正確遮擋,碰撞器的尺寸需要調(diào)整為只覆蓋下半部分。

5. 生命值函數(shù)

currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth);

Mathf.Clamp:返回在最小值與最大值之間的結(jié)果。

6. 碰撞檢測(cè)函數(shù)

7. 在if函數(shù)中提取其他腳本中的值:Property

目的:不將變量改為公開(kāi),以免其他腳本中的誤操作改變?cè)兞康闹怠?/p>

Property定義:

public int health { get { return currentHealth; }}

property的應(yīng)用類似于變量而非函數(shù)

get只讀,set只寫(xiě)。

8. 傷害物

傷害不能是持續(xù)的(默認(rèn)為每幀),否則血會(huì)瞬間掉沒(méi)(每秒30幀),所以每傷害一次后要給玩家一定免疫時(shí)間,這里需要做個(gè)倒計(jì)時(shí)器(本例中為2秒),倒計(jì)時(shí)結(jié)束后再次計(jì)算傷害,直至生命值掉為零。

另一個(gè)新知識(shí)點(diǎn)是,Unity為了節(jié)省運(yùn)行空間,只有在運(yùn)動(dòng)時(shí)才會(huì)計(jì)算剛體,不運(yùn)動(dòng)時(shí)剛體是休眠的。而本例中玩家停留在傷害物中的時(shí)候也會(huì)掉血,所以需要在玩家剛體中把相應(yīng)屬性改為“持續(xù)喚醒”。?

9. 拉伸物體時(shí)使其自動(dòng)根據(jù)尺寸平鋪

Sprite Renderer>Draw Mode>Tiled>Tiled Mode>Adaptive

Project>Mesh Type>Full Rect

Box Collider 2D>Auto Tiling

10. OnTriggerEnter和OnCollisionEnter的區(qū)別

前者無(wú)碰撞(可穿過(guò)),后者有碰撞(不可穿過(guò))。

11. 動(dòng)畫(huà)與動(dòng)畫(huà)控制器

(1)動(dòng)畫(huà)

Prefab>Add Component>Animator

Window>Animation>Animation

導(dǎo)入需要的動(dòng)作(取名)>右上菜單>Samples>設(shè)置每秒幀數(shù)

(2)動(dòng)畫(huà)控制器

圖層:對(duì)3D動(dòng)畫(huà)很有用,它讓我們可以在角色的不同部分使用動(dòng)畫(huà)。

參數(shù):腳本用其向控制器傳達(dá)信息

動(dòng)畫(huà)狀態(tài)機(jī):所有動(dòng)畫(huà)狀態(tài)及其之間的過(guò)渡關(guān)系。

混合樹(shù)(Blend Tree):根據(jù)參數(shù)混合多個(gè)動(dòng)畫(huà)。

在動(dòng)畫(huà)器中,單擊右鍵>Create State>From New Blend Tree,雙擊Blend Tree,點(diǎn)擊Blend Tree節(jié)點(diǎn),Blend Type>2D Simple Directional

參數(shù)>創(chuàng)建兩個(gè)浮點(diǎn)參數(shù)Move X和Move Y>Blend Tree的參數(shù)分別選中Move X和Move Y。

Motion>Add Motion Field(4次),拖入相應(yīng)動(dòng)畫(huà)片段

Left : Pos X = -0.5 Pos Y = 0

Right: Pos X = 0.5 Pos Y = 0

Up: Pos X = 0 Pos Y = 0.5

Down: Pos X = 0 Pos Y = -0.5

腳本:

12. Awake與Start

Awake在物體創(chuàng)建后立即喚起,而Start只在游戲開(kāi)始后喚起一次。

13. 圖層:解決子彈與玩家碰撞的問(wèn)題

將玩家放在一個(gè)圖層,將子彈放在另一個(gè)圖層,并告訴物理系統(tǒng)玩家和子彈不會(huì)碰撞。

最多可有32個(gè)圖層。

14. 自動(dòng)控制攝像機(jī)

Window>Package Manager>Cinemachine

Cinemachine可以控制多個(gè)攝像機(jī)的移動(dòng)和切換,比如同一段對(duì)話中的正反打鏡頭。Cinemachine通過(guò)虛擬攝像機(jī)(Virtual Cameras)實(shí)現(xiàn)這些功能,我們可以給每個(gè)虛擬攝像機(jī)選擇不同設(shè)置,然后告訴真實(shí)攝像機(jī)(Main Camera)現(xiàn)在哪個(gè)虛擬攝像機(jī)是活躍的,并復(fù)制其設(shè)置。

Zoom-in:Orthographic Size數(shù)值調(diào)大

Orthographic size:攝像頭視野高度的一半

攝像頭跟隨主角:將Hierarchy中的對(duì)象拖拽入攝像頭的Follow

防止游戲視野超出地圖邊界:Virtual Camera Inspector>Add Extension>CinemachineConfiner,建立空物體>Add Component>Polygon Collider 2D,設(shè)好碰撞器邊界,然后將該物體拖入虛擬攝像頭的Bounding Shape 2D。增加一個(gè)Confiner圖層,將該物體設(shè)為該圖層,然后在Project Setting中取消Confiner與所有圖層之間的碰撞。

15. 粒子系統(tǒng)

粒子效果可以通過(guò)用圖片替換粒子來(lái)實(shí)現(xiàn)。使用圖片時(shí),同樣要經(jīng)過(guò)分割。

Sprite Mode>Multiple

需調(diào)整的變量:Texture Sheet Animation>Start Frame(Random Between Two Constants)&Frame over time(刪除幀)、Shape>Radius(0)&angle(5)、Start Lifetime、Start Size、Start Speed、Color over Lifetime(調(diào)透明度)、Size Over Lifetime(拉曲線)

Simulation Space(Local=>World)

public ParticleSystem smokeEffect;(沒(méi)有用GameObject是因?yàn)橥献矬w到窗口中時(shí),會(huì)自動(dòng)提取出該類型的組件,在腳本中不用再GetComponent,也防止拖拽不含該類型組件的GameObject而出現(xiàn)bug)。

對(duì)于粒子系統(tǒng),使用Stop可以讓已產(chǎn)生的粒子自然消失,只是不再產(chǎn)生新粒子。而Destroy是刪除粒子系統(tǒng),因此所有粒子將同時(shí)消失。

解決粒子遮擋問(wèn)題:在使用粒子系統(tǒng)的物體上增加組建Sorting Group,然后在物體的Sprite Render>Additional Settings>Order in Layer中將圖層順序選為0

循環(huán)系統(tǒng):去掉Looping前面的勾,設(shè)置Duration,并將Stop Action設(shè)為Destroy

爆炸效果:Rate over Time(每秒產(chǎn)生的粒子數(shù)),Rate over Distance(只有在物體移動(dòng)時(shí)才產(chǎn)生粒子),Emission>Bursts>"+"。例如,打擊效果:去掉Looping前面的勾并將Stop Action設(shè)為Destroy>Rate over Time設(shè)為0,設(shè)為在0.0秒產(chǎn)生20個(gè)粒子。

16. UI系統(tǒng)

Canvas的三種模式:Screen Space-Overlay(默認(rèn)模式,始終在游戲最上層描繪UI)、Screen Space-Camera(在與攝像機(jī)匹配的平面上描繪UI,可以被游戲物體覆蓋)、World Space(可以放在游戲中任何地方)

用遮罩(mask)制作血條

靜態(tài)(static):變量和函數(shù)都可以是靜態(tài),設(shè)為公共靜態(tài)后,可以直接從其他腳本中引用,而不用先獲取游戲?qū)ο蟆?/p>

單例(Singleton):靜態(tài)的特例,只能存在一個(gè)該類物體。不能有其他物體的參數(shù)存到該靜態(tài)中。

17. 音效

在Unity中,負(fù)責(zé)“聽(tīng)”聲音的“耳朵”一般是綁在主攝像機(jī)上的,讓攝像機(jī)走到哪里,就聽(tīng)取它周?chē)穆曇?。游戲中的背景?lè)、打擊聲、加血聲使用的都是2D音效,如果不手動(dòng)調(diào)節(jié),它們的音量是不會(huì)變化的。不過(guò),機(jī)器人的腳步聲使用了3D音效。當(dāng)狐貍子走近機(jī)器人時(shí),腳步聲會(huì)變大,遠(yuǎn)離機(jī)器人時(shí),腳步聲會(huì)變小(而且是環(huán)繞立體聲效果,戴耳機(jī)聽(tīng)比較明顯)。如果狐貍子走出3D音效的范圍(是個(gè)立體圓球)外,腳步聲就會(huì)消失。

這里出現(xiàn)一個(gè)問(wèn)題:在2D游戲中,主攝像機(jī)和游戲畫(huà)面并不在一個(gè)水平面上,這就導(dǎo)致綁在主攝像機(jī)上的“耳朵”可能因?yàn)樵谝粜蝮w范圍外而聽(tīng)不到聲音。這時(shí)可以在主攝像機(jī)下添加一個(gè)子對(duì)象,把“耳朵”綁在這個(gè)子對(duì)象上,并將子對(duì)象的位置設(shè)為和游戲畫(huà)面在一個(gè)水平面,問(wèn)題就解決了。

【Unity學(xué)習(xí)筆記】Beginning 2D Game Development的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
土默特右旗| 平阳县| 安顺市| 海盐县| 五莲县| 凤台县| 抚松县| 绥阳县| 津市市| 福州市| 康保县| 革吉县| 泰来县| 昌黎县| 平昌县| 龙岩市| 河北区| 建水县| 庆云县| 突泉县| 洛南县| 沾化县| 海城市| 仪征市| 依兰县| 修水县| 红原县| 庆元县| 日照市| 新安县| 禄丰县| 安阳县| 邻水| 视频| 洞口县| 通辽市| 万安县| 扎赉特旗| 衡阳市| 宿迁市| 乌鲁木齐市|