2D游戲?qū)氲膱D片瀑焦,Texture Type會(huì)默認(rèn)變?yōu)?Sprite(2D and UI)
剪菱,此時(shí)可以直接將其拖拽進(jìn)場(chǎng)景成為GameObject浪耘;也可創(chuàng)建一個(gè)空物體症汹,手動(dòng)添加Sprite Renderer
組件。
Sprite 屬性
- Sprite Mode:Single(默認(rèn))溉委。Multiple(包含多個(gè)精靈鹃唯,可分割或動(dòng)畫(huà))。
注意瓣喊,2D紋理本身不是精靈坡慌,其下附屬的展開(kāi)內(nèi)容才是精靈。 - Pixels Per Unit:Unity場(chǎng)景里每個(gè)格子對(duì)應(yīng)圖片中多少像素藻三。
Tilemap(瓦片地圖)
該功能依賴包管理器中安裝2D Tilemap Editor
包洪橘。
將場(chǎng)景平面劃分為網(wǎng)格狀,并在網(wǎng)格上繪制內(nèi)容棵帽。
瓦片地圖
- 創(chuàng)建瓦片地圖 Hierarchy - Create - 2D Object - Tilemap - Rectangular
- 創(chuàng)建調(diào)色板 Window - 2D -Tile Palette(打開(kāi)調(diào)色板窗口) - Create New Palette
將精靈/瓦片拖拽入調(diào)色板(一個(gè)調(diào)色板里可以容納多個(gè))熄求,資源管理器會(huì)自動(dòng)創(chuàng)建瓦片文件。 - 蘸取調(diào)色板中的格子逗概,即可在場(chǎng)景中刷涂弟晚。刷涂部分的內(nèi)容會(huì)自動(dòng)加入第一步創(chuàng)建的瓦片地圖。
拆分瓦片集
拆分后可以讓 2D Texture 下出現(xiàn)多個(gè) Sprite(制作動(dòng)畫(huà)也需要該操作)
- 選中一個(gè)Sprite - Sprite Mode - Multiple
- Sprite Editor - slice
其中 Automatic 會(huì)根據(jù)透明像素自動(dòng)分割逾苫,也可以手動(dòng)在畫(huà)面中拖拽出綠框進(jìn)行分割
為 Tilemap 設(shè)置碰撞
- 方法1:在需要存在碰撞的位置創(chuàng)建空物體卿城,并為其添加Collider組件
- 方法2:為Tilemap 添加 Tilemap Collider 2D(瓦片碰撞)組件和 Composite Colloder 2D (復(fù)合碰撞體)組件
前者會(huì)讓該Tilemap中所有Collider Type
為Sprite
(默認(rèn)值)的瓦片都具有碰撞效果(對(duì)于不想碰撞的瓦片,可以選中其瓦片源文件铅搓,將Collider Type
改為None
)
后者會(huì)合并前者中的多處碰撞以減少優(yōu)化性能(因此會(huì)自動(dòng)額外添加剛體組件)瑟押。且添加后還需要勾選前者的Used by Composite
選項(xiàng)才能生效。
精靈平鋪
2D物體-》Sprite Renderer組件-》Draw Mode
- Simple:默認(rèn)值星掰,強(qiáng)行拉伸
- Sliced:根據(jù)九宮格切片多望,中間部分拉升,四角不變
- Tiled:根據(jù)九宮格切片氢烘,中間部分重復(fù)平鋪怀偷,四角不變
當(dāng)啟用 Sliced / Tiled 時(shí)
會(huì)多出Width、Height屬性播玖,此時(shí)應(yīng)使用 Rect Tool(快捷鍵T
)而非 Scale Tool 進(jìn)行大小拖拽椎工。
九宮格切片可在Sprite Editor
中拖動(dòng)綠線調(diào)整(默認(rèn)在四邊)。
Tile Mode:
- Continuous:默認(rèn),精靈會(huì)均勻重復(fù)
- Adaptive:重復(fù)部分僅在精靈的尺寸達(dá)到 Stretch Value 時(shí)才進(jìn)行重復(fù)
2D物體的渲染層級(jí)
Sprite Renderer 組件 - Additional Settings - Order in Layer
數(shù)字越大渲染越晚(表現(xiàn)為覆蓋在最高層)Edit - Project Settings - Graphic - Camera Settings - Tranparency Sort Mode
可用于控制相同 layer 時(shí)渲染的先后順序
若選為 Custom Axis 則按照 Tranparency Sort Axis 渲染晋渺。可實(shí)現(xiàn)隨著物體移動(dòng)脓斩,根據(jù)坐標(biāo)位置不同產(chǎn)生不同的優(yōu)先級(jí)
可通過(guò)Sprite Renderer 組件 - Sprite Sort Point
切換中心點(diǎn)或軸心點(diǎn)來(lái)進(jìn)行坐標(biāo)位置比較
其中軸心點(diǎn)(Pivot)的位置默認(rèn)在中心點(diǎn)(Center)木西,可以在精靈的設(shè)置(Sprite Editor)中修改,拖拽藍(lán)色圓圈或直接設(shè)置均可随静。
動(dòng)畫(huà)
Unity動(dòng)畫(huà)有自己的狀態(tài)機(jī)八千,而非直接通過(guò)腳本控制。
1. 為游戲?qū)ο筇砑?Animator 動(dòng)畫(huà)組件
可將動(dòng)畫(huà)分配給場(chǎng)景中的游戲?qū)ο罅敲停壤习姹镜?code>Animation組件更方便恋捆。
2. Assets->右擊->Create->Animator Controller 創(chuàng)建動(dòng)畫(huà)控制器
可根據(jù)當(dāng)前游戲?qū)ο蟮臓顟B(tài)控制播放/切換對(duì)應(yīng)的動(dòng)畫(huà)(也稱為動(dòng)畫(huà)狀態(tài)機(jī))。
3. Window->Animation->Animation 打開(kāi)動(dòng)畫(huà)窗口
注意:后續(xù)操作需要在Hierarcy中選中游戲?qū)ο蠛笾乇粒僭趧?dòng)畫(huà)窗口中編輯沸停。
Preview也是點(diǎn)動(dòng)畫(huà)窗口中的時(shí)間點(diǎn),Scene里的對(duì)象發(fā)生改變
4. 選中帶有Animator組件并配置好Animator Controller的游戲?qū)ο笳炎浚趧?dòng)畫(huà)窗口左上角下拉框中創(chuàng)建/切換動(dòng)畫(huà).anim
文件(也稱AnimationClip文件)
即一個(gè)Controller對(duì)應(yīng)多個(gè)AnimationClip
5. 操作時(shí)間軸
可以通過(guò)鼠標(biāo)框選選中時(shí)間軸中多個(gè)關(guān)鍵幀愤钾,然后拖動(dòng)以等比拉伸時(shí)間
- 點(diǎn)擊
Add Peoperty
,可以選擇該物體已有組件的某個(gè)屬性候醒,并在時(shí)間軸上設(shè)置關(guān)鍵幀 - 點(diǎn)擊錄制按鈕能颁,然后直接在對(duì)應(yīng)幀進(jìn)行游戲?qū)ο蟮男薷牟僮鳎⒆詣?dòng)記錄
- 將資源中的精靈拖拽進(jìn)時(shí)間軸(本質(zhì)是改變了
Sprite Renderer
組件Sprite
屬性)
6. Window->Animation->Animator 打開(kāi)動(dòng)畫(huà)控制器窗口
可以將.anim
動(dòng)畫(huà)文件拖拽以添加進(jìn)動(dòng)畫(huà)控制器窗口
從Entry出發(fā)的為必播動(dòng)畫(huà)(default)倒淫,可通過(guò)右鍵設(shè)置伙菊。
- Layers:動(dòng)畫(huà)層級(jí),用于處理多個(gè)動(dòng)畫(huà)同時(shí)生效(如邊跑邊射擊)時(shí)的優(yōu)先級(jí)
- Parameters:用于控制多個(gè)動(dòng)畫(huà)狀態(tài)之間切換的變量
在不同節(jié)點(diǎn)之間通過(guò)連線(Make Transition)敌土,表示可切換關(guān)系镜硕。
可以通過(guò)代碼修改狀態(tài)機(jī)變量,當(dāng)連線的檢查器中Conditions
設(shè)置的變量條件滿足時(shí)纯赎,就會(huì)切換到相應(yīng)的動(dòng)畫(huà):
private Animator animator;
animator = GetComponent<Animator>();
animator.SetInteger("變量名", -1);
////Trigger觸發(fā)器和布爾值不同谦疾,動(dòng)畫(huà)執(zhí)行完成后會(huì)自動(dòng)重置為false。也可以通過(guò)ResetTrigger手動(dòng)重置
animator.SetTrigger("變量名");
animator.ResetTrigger("變量名");
- Has Exit Time:動(dòng)畫(huà)狀態(tài)滿足切換條件時(shí)犬金,是否保留之前動(dòng)畫(huà)一段時(shí)間
勾選時(shí)念恍,Exit Time
設(shè)置生效 - Transition Duration:動(dòng)畫(huà)切換時(shí)的過(guò)渡時(shí)間。設(shè)置為0則直接切換晚顷。
混合樹(shù)(Blender Tree)
動(dòng)畫(huà)控制器中一種特殊的節(jié)點(diǎn)峰伙,可以按不同程度組合動(dòng)畫(huà)。
如:一個(gè)站立混合樹(shù)可以當(dāng)speed>0時(shí)進(jìn)入走路混合樹(shù)该默,再根據(jù)direction在走路狀態(tài)樹(shù)中切換為不同朝向的走路動(dòng)畫(huà)瞳氓。
在動(dòng)畫(huà)控制器窗口中,右擊->Create State->From New Blend Tree栓袖,雙擊新創(chuàng)建的混合樹(shù)節(jié)點(diǎn)進(jìn)行配置
- Blend Type:決定有幾個(gè)參數(shù)控制動(dòng)畫(huà)切換
組合出一個(gè)坐標(biāo)系匣摘,并添加Motion(動(dòng)畫(huà))店诗,將觸發(fā)離紅點(diǎn)坐標(biāo)最近的動(dòng)畫(huà)
設(shè)置循環(huán)動(dòng)畫(huà)
- 方法1:選中
.anim
文件(即AnimationClip文件),在其Inspector中勾選Loop Time
音榜。則之后進(jìn)入該狀態(tài)后庞瘸,只要狀態(tài)不離開(kāi),就會(huì)反復(fù)播放 -
方法2:在動(dòng)畫(huà)控制器窗口中赠叼,復(fù)制一個(gè)動(dòng)畫(huà)擦囊,使其互相指向
粒子系統(tǒng)
Hierarchy > Effects > Particle System
用于制作煙霧、火焰嘴办、爆炸瞬场、雨雪等特效
注意各模塊中帶下三角的屬性,都可以切換成固定值或區(qū)間隨機(jī)值等
用貼圖制作煙霧特效
設(shè)置煙霧貼圖
Particle System 組件 > Texture Sheet Animation 模塊
Mode:Sprites
選擇煙霧的精靈涧郊。如有多個(gè)精靈隨機(jī)出現(xiàn)贯被,則點(diǎn)擊加號(hào)添加精靈,并切換 Frame Over Time 和 Start Frame 為 Random Between Two Constants 妆艘,數(shù)值為 0~n(即上述添加精靈數(shù)組的index)刃榨。設(shè)置煙霧形狀
Particle System 組件 > Shape
Angle 設(shè)置發(fā)射角度設(shè)置粒子行為
Particle System 組件 > Particle System 主模塊
Looping:重復(fù)播放
Start Lifetime:粒子存活時(shí)間
Start Speed:粒子速度
Start Size:粒子大小
Simulation Space:Local 則跟隨當(dāng)前物體。World 則已發(fā)出的粒子獨(dú)立運(yùn)動(dòng)双仍,不隨 Particle System 物體移動(dòng)枢希。-
設(shè)置粒子漸變消失
Particle System 組件 > Color Over Lifetime 模塊
選中右上角的標(biāo)記,設(shè)置 Alpha 為 0
設(shè)置粒子漸變變小
Particle System 組件 > Size Over Lifetime 模塊設(shè)置粒子發(fā)射頻率
Particle System 組件 > Emission 模塊
開(kāi)始/結(jié)束粒子發(fā)射
private ParticleSystem smokeEffect;
smokeEffect = GameObject.Find("Particle System").GetComponent<ParticleSystem>();
smokeEffect.Stop();//不再生成新的粒子
smokeEffect.Play();//繼續(xù)發(fā)射粒子
// Destroy(smokeEffect);//直接銷毀所有粒子