天天看點

Unity_2D系統_023

2D遊戲簡介

2D遊戲是指二維互動式動畫,也就是我們通常所說的‘2D動畫’。

隻不過在遊戲方面,這種動畫可以根據使用者的需求而進行互動

2D遊戲基本特征

二維互動式動畫的基本特征如下(主要是針對3d遊戲):

⒈貼圖

傳統的2d遊戲中的美術資源(人物行走、人物狀态、地圖等等)都是以png或jpg的圖形檔案渲染而成,而3d遊戲中的美術資源多數是以模型為主.

⒉視角

2d遊戲是沒辦法完成視角轉換的.因為2d遊戲的美術資源是平面圖.即某種美術資源的前、後、左、右不能夠同時出現在遊戲裡.但3d遊戲卻可以完成視角轉換.

⒊渲染

2d遊戲的所有美術資源可以不經過引擎的渲染就能使用,但3d遊戲的任何美術資源都必須經過引擎的渲染才能使用.

早期Unity制作2D遊戲的方法

以前版本的Unity做2D遊戲,雖然能做,但是很麻煩。

比如你可以将一張紋理賦予一個”面片”網格,然後用腳本控制它的動畫調整它的位移.如果你要使用實體引擎,那麼還要将這個Obeject處理3D的,是以你還要確定你的Object要有足夠的深度以確定他們在其它軸向上不起沖突.或者你選用一個第三方插件,如2D Toolkit或者Orthello 2D Framework,他們有着強大的功能,但同樣需要你去做一些限制工作。

Unity4.3原生的2D開發環境

Unity4.3增加了原生的2D開發環境。

Unity_2D系統_023

如果你想更改這個設定,可以選擇”Edit\Project Settings\Editor”打開編輯器設定,在”Default Behavior Mode”中改模式為2D,如下圖:

Unity_2D系統_023

“Default Behavior Mode”(預設行為模式)定義你項目在導入Assets時的預設導入設定,當設定為3D模式時,Unity假設你将導入的檔案建立為紋理類型(如:PNG檔案);當設定為2D時,Unity假定你想要的導入的資源為Sprite類型

建立序列幀動畫

篇幅較長請檢視以下的連結

建立序列幀動畫

場景視圖的2D模式

場景視圖裡有個控制二維切換的按鈕,點選2D按鈕可以激活2D模式,像下面這樣:

Unity_2D系統_023

這個按鈕會将場景相機在透視視圖和正交投影視圖之間進行切換。

當觀察透視視圖時,遠離相機的物體看起來更小,就像在現實世界中眼睛看物體一樣,然而當正交投影視圖的時候,物體的大小并不受與相機的距離影響。是以,在二維模式時,一個對象不管位置離相機遠近,隻要尺寸不變,它看起來将沒有變化的。

下面的圖可以清晰的看到2D和3D模式視窗的差別

Unity_2D系統_023

你隻能做視圖的平移操作,Y軸指向上,X軸指向右。

這個設定是不會影響到遊戲播放時效果的,因為它隻是幫助你組織場景裡的對象,甚至後期你會在建立2D遊戲的同時創造3D遊戲,你可能需要在這兩種模式間根據需要切換

制造精靈

切片精靈表

Sprite圖層

什麼是drawcall

Unity每次在準備資料并通知GPU渲染的過程稱為一次Draw Call。

一般情況下,渲染一次擁有一個網格并攜帶一種材質的物體便會使用一次Draw Call。

對于渲染場景中的這些物體,在每一次Draw Call中除了在通知GPU的渲染上比較耗時之外,切換材質與shader也是非常耗時的操作。

Draw Call的次數是決定性能比較重要的名額。

drawcall和setpass call

不少開發者誤以draw call為unity效率的直接衡量名額;

unity官方注意到了這點,draw call這個說法比較有誤導性;實際上draw call本身的call過程消耗比較低,消耗高的是draw call對象集合的改變過程和集合中各個對象的處理過程,比如dynamic batch和static batch相同draw call下性能差别很大。

是以unity的統計界面有了setpass call,其意思大緻是場景需要切換處理的pass數,因為渲染的對象是通過材質介以材質所含的shader中的各個pass最終得以顯示的,這個名額對衡量性能來說比“draw call”相對準确一點。

2D實體

  • 2D剛體
    Unity_2D系統_023

    mass:0代表着無限大,也就是“靜态剛體”。範圍:0.001到10000。

    Linear Drag:線性阻尼,也就是物體在運動過程中收到的阻力。

    Angular Drag:角度阻尼系數,剛體在旋轉過程中受到的阻力。

    GravityScale:重力縮放,控制着重力的大小,其數值範圍為-100000到100000.

    Fixed angle:固定角度,指剛體在運動過程中保持固定的角度,這就相當于關閉了剛體的旋轉功能。

    IsKinematic:控制剛體是否變為運動學物體,就是我們的剛體不在受實體引擎的控制,而受transform或者是動畫等等的控制。

    SleepingMode:睡眠,Unity會臨時把處于靜止狀态的實體模拟去除,這樣主要是節省計算資源。

1、Never Sleep:永遠不睡眠。

2、Start Awake:Awake時就進入睡眠。

3、Start Asleep:立即進入睡眠。

Collision Detection:碰撞發現。

1、Discrete Detection:正常狀态下的檢測。

2、Continuous:連續性性檢測。

- 2D碰撞器

Unity_2D系統_023

unity2D的碰撞體和3D的差不多。在unity2D中,有Box Collider2D(盒子碰撞器),Circle Collider2D(圓形碰撞器),Edge Collider2D(邊緣碰撞器)和Polygon Collider2D(多邊形碰撞器)。Edge Collider2D和Polygon Collider2D是3D項目裡面沒有的。

Polygon Collider2D:。對于多邊形碰撞器有一個比較特殊的功能,也就是可以編輯多變形碰撞器的外形。我們可以在多邊形上拖動可以出現一個頂點,拖動次頂點,可以改變碰撞器的外形。按住Ctrl鍵的同時,單擊頂點,可以把頂點删除。

Unity_2D系統_023

剛體屬性的介紹:

Material:定義剛體表面的一些實體特性,例如摩擦力,柔軟程度等,由此決定了它對其他物體的反彈能力等。

Is Trigger:屬于3D碰撞的都應該知道這個屬性的作用。勾了就會産生的是剛體碰撞。不勾就是觸發碰撞,此時碰撞的兩個物體之間可以不使用剛體去進行驅動。

void OnCollisionEnter2D(Collision2D coll) 
{
    Debug.Log(coll.gameObject.name);
}

void OnTriggerEnter2D(Collider2D other)
{
    Debug.Log(other.name);
}
           
  • 2D實體材質

SpritePacker

圖集的優點