Unity3D - 2D

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)容。

瓦片地圖
  1. 創(chuàng)建瓦片地圖 Hierarchy - Create - 2D Object - Tilemap - Rectangular
  2. 創(chuàng)建調(diào)色板 Window - 2D -Tile Palette(打開調(diào)色板窗口) - Create New Palette
    將精靈/瓦片拖拽入調(diào)色板(一個調(diào)色板里可以容納多個),資源管理器會自動創(chuàng)建瓦片文件。
  3. 蘸取調(diào)色板中的格子,即可在場景中刷涂。刷涂部分的內(nèi)容會自動加入第一步創(chuàng)建的瓦片地圖。
拆分瓦片集

拆分后可以讓 2D Texture 下出現(xiàn)多個 Sprite(制作動畫也需要該操作)

  1. 選中一個Sprite - Sprite Mode - Multiple
  2. Sprite Editor - slice
    其中 Automatic 會根據(jù)透明像素自動分割,也可以手動在畫面中拖拽出綠框進行分割
為 Tilemap 設(shè)置碰撞
  • 方法1:在需要存在碰撞的位置創(chuàng)建空物體,并為其添加Collider組件
  • 方法2:為Tilemap 添加 Tilemap Collider 2D(瓦片碰撞)組件和 Composite Colloder 2D (復(fù)合碰撞體)組件
    前者會讓該Tilemap中所有Collider TypeSprite(默認值)的瓦片都具有碰撞效果(對于不想碰撞的瓦片,可以選中其瓦片源文件,將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ū)間隨機值等

用貼圖制作煙霧特效
  1. 設(shè)置煙霧貼圖
    Particle System 組件 > Texture Sheet Animation 模塊
    Mode:Sprites
    選擇煙霧的精靈。如有多個精靈隨機出現(xiàn),則點擊加號添加精靈,并切換 Frame Over Time 和 Start Frame 為 Random Between Two Constants ,數(shù)值為 0~n(即上述添加精靈數(shù)組的index)。

  2. 設(shè)置煙霧形狀
    Particle System 組件 > Shape
    Angle 設(shè)置發(fā)射角度

  3. 設(shè)置粒子行為
    Particle System 組件 > Particle System 主模塊
    Looping:重復(fù)播放
    Start Lifetime:粒子存活時間
    Start Speed:粒子速度
    Start Size:粒子大小
    Simulation Space:Local 則跟隨當(dāng)前物體。World 則已發(fā)出的粒子獨立運動,不隨 Particle System 物體移動。

  4. 設(shè)置粒子漸變消失
    Particle System 組件 > Color Over Lifetime 模塊
    選中右上角的標記,設(shè)置 Alpha 為 0


  5. 設(shè)置粒子漸變變小
    Particle System 組件 > Size Over Lifetime 模塊

  6. 設(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);//直接銷毀所有粒子
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容