從今天開始要做一個2d遊戲,由于之前都是做cocos2dx的,然後接觸了一段時間的unity3d,都是做3D方面的東西,得知要做2d遊戲還是有點開心的,或許因為不想丢失之前的2d遊戲的一些思想,然後接觸到unity3d的一個2d插件——2dtoolkit,我感覺還是蠻強大的,雖然是一個插件,完全感覺跟cocos2dx引擎有的一比,他們的思想也很類似,我個人感覺有點差別的無非就是unity有豐富的可視化界面,而cocos2dx都是自己代碼來布局界面,當然也可以用cocosstudio,可能是我沒怎麼用過它,是以覺得cocos2dx和unity2dtoolkit還是差不了多少的,在最新的unity4.3加入了uni2d,也是也就是将之前的這個2dtoolkit給加進了unity中,當然cocos2d也會出來cocos3d,這兩個遊戲引擎都在往對方“領域”互相滲透,當然對我們開發者而已沒有多大的影響,這兩者的競争,無非是将自己的引擎做的更完善,做的更好,這都是給我們開發者帶來了福音,廢話就不多說了,開始今天的學習内容,unity 2dtoolkit的初步使用!
2D Toolkit分為兩個系統:運作時元件(runtime components)和腳本編輯器。
腳本編輯器在Assets目錄下産生資源,運作時腳本在場景中産生objects。
兩者關系如下圖:

1.精靈:對于熟悉遊戲開發的人而言,無論是cocos2dx或者是unity的,精靈是再熟悉不過了,在2d遊戲開發中是一個很重要的詞彙,說的通俗一點,Sprite也就相當于是一個元件,其中有一個屬性就是對應着一個圖檔,然後我們可以通過控制這個Sprite來控制我們圖檔的操作,比如縮放移動或者旋轉之類的。
建立方法:Hierarchy面闆中->Create->tk2d->Sprite,這個是最基本的精靈建立方法,我們可以建立了之後往裡面添加元件,豐富其屬性。
2.精靈集:精靈集是2DToolkit的核心,可以将其了解成一個容器,存放Sprite的容器,Sprite Collection界面設定精靈以及其相關聯的屬性,包括碰撞區域。精靈集産生一個或多個貼圖圖集,替代你的原圖檔進而提高性能。
建立方法: 一開始我還沒找到這個SpriteCollection建立方法,在Hierarchy面闆中怎麼着都沒找到,以為是版本問題,然後試試其他的版本還是一樣,結果後來發現是在Project面闆中,右擊就能找到了。
建立好一個精靈集後取一個合适的名字,我就叫做TutorialSpriteCollection,建立好之後點選OpenEditor...打開編輯器
将精靈加入精靈集裡面,拖拽資源圖檔到“Drop sprites here”虛線框中,當然可以拖放一個圖檔也可以拖放多個圖檔。
然後選擇我們工程中的圖檔檔案夾中的圖檔,将其拖放到上述虛線框中,然後可以設定精靈的碰撞屬性ColliderType為Polygon使用者自定義(這個适用于不規則圖檔),如果是規則的,假設是方形的話就直接用BoxTrimmed即可。下圖即為我建立的自定義碰撞的圖集精靈。
設定好之後,我們必須要做的操作就是點選右上角的Commit按鈕,即unity開始計算圖集的一些屬性,然後生成配置檔案,點選之後會發現Project中自動多出了兩個檔案夾,其實這是unity經過計算得到的精靈的一些配置資訊,例如坐标,大小,材質等等。
Create->tk2d->Sprite
如果我們需要快速的建立一個精靈,可以就直接選擇建立一個貼圖精靈,直接Create->tk2d->Sprite From Texture
using UnityEngine;
using System.Collections;
publicclass NewBehaviourScript : MonoBehaviour {
//建立精靈
//tk2dSprite sprite;
// Use this for initialization
void Start () {
//可以這樣擷取精靈
//sprite = GameObject.Find("Dragon").gameObject.GetComponent<tk2dSprite>();
//輸出精靈的坐标
//print("x:" + gameObject.transform.localPosition.x + "|y:" + transform.localPosition.y);
//一開始列印的坐标是x:-1|y:0
//以下代碼可以動态的縮放精靈
//sprite.scale = new Vector3(xScale, yScale, zScale);
//以下代碼可改變要顯示的精靈
//sprite.spriteId = newSpriteId;
//以下代碼可以得到id
//sprite.spriteId = sprite.GetSpriteIdByName("Rock");
}
void Update()
{
//通過鍵盤控制改變物體顔色的屬性
//if (Input.GetKeyDown(KeyCode.A))
//{
// sprite.color = Color.red;
//}
//if (Input.GetKeyDown(KeyCode.S))
// sprite.color = Color.white;
OnMouseDown();
//下面也可以做一系列的坐标判斷來定位精靈移動區域
//滑鼠左擊控制主角精靈移動
IEnumerator OnMouseDown()
print("MouseDown");
Vector3 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
Vector3 mScreenPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(mScreenPosition);
//滑鼠左擊
while (Input.GetMouseButton(0))
{
mScreenPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
Vector3 pos = offset + Camera.main.ScreenToWorldPoint(mScreenPosition);
pos.z = 0;
transform.position = pos;
yield returnnew WaitForFixedUpdate();
}
}
點選螢幕中的小龍精靈,按下滑鼠左鍵然後拖動,會發現它可以移動哦,哇咔咔,感覺真有意思,又回到了之前熟悉的2D,個人感覺unity2d比cocos2d要友善不少,畢竟可視化界面更豐富一點,但目前而言,個人還是cocos稍微熟悉一點,不過沒關系,unity是個不錯的強大的引擎,慢慢了解,呵呵,不早了,感覺充實的一天!晚上和某人鬧沖突了,小吐槽了一下,為啥QQ沒有自動彈出某人資訊的功能或者是将某人的聊天框固定在界面上,這樣就不會因為回複晚了而鬧沖突了,如果可以,我覺得要向騰訊反應一下,呵呵,希望某人開心起來!
本文轉蓬萊仙羽 51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1367243,如需轉載請自行聯系原作者