2D游戲?qū)氲膱D片,Texture Type會默認變?yōu)?Sprite(2D and UI),此時可以直接將其拖拽進場景成為GameObject;也可創(chuàng)建一個空物體,手動添加Sprite Renderer組件。
Sprite 屬性
- Sprite Mode:Single(默認)。Multiple(包含多個精靈,可分割或動畫)。
注意,2D紋理本身不是精靈,其下附屬的展開內(nèi)容才是精靈。 - Pixels Per Unit:Unity場景里每個格子對應(yīng)圖片中多少像素。
Tilemap(瓦片地圖)
該功能依賴包管理器中安裝2D Tilemap Editor包。
將場景平面劃分為網(wǎng)格狀,并在網(wǎng)格上繪制內(nèi)容。
瓦片地圖
- 創(chuàng)建瓦片地圖 Hierarchy - Create - 2D Object - Tilemap - Rectangular
- 創(chuàng)建調(diào)色板 Window - 2D -Tile Palette(打開調(diào)色板窗口) - Create New Palette
將精靈/瓦片拖拽入調(diào)色板(一個調(diào)色板里可以容納多個),資源管理器會自動創(chuàng)建瓦片文件。 - 蘸取調(diào)色板中的格子,即可在場景中刷涂。刷涂部分的內(nèi)容會自動加入第一步創(chuàng)建的瓦片地圖。
拆分瓦片集
拆分后可以讓 2D Texture 下出現(xiàn)多個 Sprite(制作動畫也需要該操作)
- 選中一個Sprite - Sprite Mode - Multiple
- Sprite Editor - slice
其中 Automatic 會根據(jù)透明像素自動分割,也可以手動在畫面中拖拽出綠框進行分割
為 Tilemap 設(shè)置碰撞
- 方法1:在需要存在碰撞的位置創(chuàng)建空物體,并為其添加Collider組件
- 方法2:為Tilemap 添加 Tilemap Collider 2D(瓦片碰撞)組件和 Composite Colloder 2D (復(fù)合碰撞體)組件
前者會讓該Tilemap中所有Collider Type為Sprite(默認值)的瓦片都具有碰撞效果(對于不想碰撞的瓦片,可以選中其瓦片源文件,將Collider Type改為None)
后者會合并前者中的多處碰撞以減少優(yōu)化性能(因此會自動額外添加剛體組件)。且添加后還需要勾選前者的Used by Composite選項才能生效。
精靈平鋪
2D物體-》Sprite Renderer組件-》Draw Mode
- Simple:默認值,強行拉伸
- Sliced:根據(jù)九宮格切片,中間部分拉升,四角不變
- Tiled:根據(jù)九宮格切片,中間部分重復(fù)平鋪,四角不變
當(dāng)啟用 Sliced / Tiled 時
會多出Width、Height屬性,此時應(yīng)使用 Rect Tool(快捷鍵T)而非 Scale Tool 進行大小拖拽。
九宮格切片可在Sprite Editor中拖動綠線調(diào)整(默認在四邊)。
Tile Mode:
- Continuous:默認,精靈會均勻重復(fù)
- Adaptive:重復(fù)部分僅在精靈的尺寸達到 Stretch Value 時才進行重復(fù)
2D物體的渲染層級
Sprite Renderer 組件 - Additional Settings - Order in Layer
數(shù)字越大渲染越晚(表現(xiàn)為覆蓋在最高層)Edit - Project Settings - Graphic - Camera Settings - Tranparency Sort Mode
可用于控制相同 layer 時渲染的先后順序
若選為 Custom Axis 則按照 Tranparency Sort Axis 渲染??蓪崿F(xiàn)隨著物體移動,根據(jù)坐標位置不同產(chǎn)生不同的優(yōu)先級
可通過Sprite Renderer 組件 - Sprite Sort Point切換中心點或軸心點來進行坐標位置比較
其中軸心點(Pivot)的位置默認在中心點(Center),可以在精靈的設(shè)置(Sprite Editor)中修改,拖拽藍色圓圈或直接設(shè)置均可。
動畫
Unity動畫有自己的狀態(tài)機,而非直接通過腳本控制。
1. 為游戲?qū)ο筇砑?Animator 動畫組件
可將動畫分配給場景中的游戲?qū)ο?,比老版本?code>Animation組件更方便。
2. Assets->右擊->Create->Animator Controller 創(chuàng)建動畫控制器
可根據(jù)當(dāng)前游戲?qū)ο蟮臓顟B(tài)控制播放/切換對應(yīng)的動畫(也稱為動畫狀態(tài)機)。
3. Window->Animation->Animation 打開動畫窗口
注意:后續(xù)操作需要在Hierarcy中選中游戲?qū)ο蠛?,再在動畫窗口中編輯?br> Preview也是點動畫窗口中的時間點,Scene里的對象發(fā)生改變
4. 選中帶有Animator組件并配置好Animator Controller的游戲?qū)ο?,在動畫窗口左上角下拉框中?chuàng)建/切換動畫.anim文件(也稱AnimationClip文件)
即一個Controller對應(yīng)多個AnimationClip
5. 操作時間軸
可以通過鼠標框選選中時間軸中多個關(guān)鍵幀,然后拖動以等比拉伸時間
- 點擊
Add Peoperty,可以選擇該物體已有組件的某個屬性,并在時間軸上設(shè)置關(guān)鍵幀 - 點擊錄制按鈕,然后直接在對應(yīng)幀進行游戲?qū)ο蟮男薷牟僮?,并自動記?/li>
- 將資源中的精靈拖拽進時間軸(本質(zhì)是改變了
Sprite Renderer組件Sprite屬性)
6. Window->Animation->Animator 打開動畫控制器窗口
可以將.anim動畫文件拖拽以添加進動畫控制器窗口
從Entry出發(fā)的為必播動畫(default),可通過右鍵設(shè)置。
- Layers:動畫層級,用于處理多個動畫同時生效(如邊跑邊射擊)時的優(yōu)先級
- Parameters:用于控制多個動畫狀態(tài)之間切換的變量
在不同節(jié)點之間通過連線(Make Transition),表示可切換關(guān)系。
可以通過代碼修改狀態(tài)機變量,當(dāng)連線的檢查器中Conditions設(shè)置的變量條件滿足時,就會切換到相應(yīng)的動畫:
private Animator animator;
animator = GetComponent<Animator>();
animator.SetInteger("變量名", -1);
////Trigger觸發(fā)器和布爾值不同,動畫執(zhí)行完成后會自動重置為false。也可以通過ResetTrigger手動重置
animator.SetTrigger("變量名");
animator.ResetTrigger("變量名");
- Has Exit Time:動畫狀態(tài)滿足切換條件時,是否保留之前動畫一段時間
勾選時,Exit Time設(shè)置生效 - Transition Duration:動畫切換時的過渡時間。設(shè)置為0則直接切換。
混合樹(Blender Tree)
動畫控制器中一種特殊的節(jié)點,可以按不同程度組合動畫。
如:一個站立混合樹可以當(dāng)speed>0時進入走路混合樹,再根據(jù)direction在走路狀態(tài)樹中切換為不同朝向的走路動畫。
在動畫控制器窗口中,右擊->Create State->From New Blend Tree,雙擊新創(chuàng)建的混合樹節(jié)點進行配置
- Blend Type:決定有幾個參數(shù)控制動畫切換
組合出一個坐標系,并添加Motion(動畫),將觸發(fā)離紅點坐標最近的動畫

設(shè)置循環(huán)動畫
- 方法1:選中
.anim文件(即AnimationClip文件),在其Inspector中勾選Loop Time。則之后進入該狀態(tài)后,只要狀態(tài)不離開,就會反復(fù)播放 -
方法2:在動畫控制器窗口中,復(fù)制一個動畫,使其互相指向
粒子系統(tǒng)
Hierarchy > Effects > Particle System
用于制作煙霧、火焰、爆炸、雨雪等特效
注意各模塊中帶下三角的屬性,都可以切換成固定值或區(qū)間隨機值等
用貼圖制作煙霧特效
設(shè)置煙霧貼圖
Particle System 組件 > Texture Sheet Animation 模塊
Mode:Sprites
選擇煙霧的精靈。如有多個精靈隨機出現(xiàn),則點擊加號添加精靈,并切換 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:粒子存活時間
Start Speed:粒子速度
Start Size:粒子大小
Simulation Space:Local 則跟隨當(dāng)前物體。World 則已發(fā)出的粒子獨立運動,不隨 Particle System 物體移動。-
設(shè)置粒子漸變消失
Particle System 組件 > Color Over Lifetime 模塊
選中右上角的標記,設(shè)置 Alpha 為 0
設(shè)置粒子漸變變小
Particle System 組件 > Size Over Lifetime 模塊設(shè)置粒子發(fā)射頻率
Particle System 組件 > Emission 模塊
開始/結(jié)束粒子發(fā)射
private ParticleSystem smokeEffect;
smokeEffect = GameObject.Find("Particle System").GetComponent<ParticleSystem>();
smokeEffect.Stop();//不再生成新的粒子
smokeEffect.Play();//繼續(xù)發(fā)射粒子
// Destroy(smokeEffect);//直接銷毀所有粒子

