從今天開始要作一個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)和腳本編輯器。ide
腳本編輯器在Assets目錄下產生資源,運行時腳本在場景中產生objects。佈局
二者關係以下圖:性能
1.精靈:對於熟悉遊戲開發的人而言,不管是cocos2dx或者是unity的,精靈是再熟悉不過了,在2d遊戲開發中是一個很重要的詞彙,說的通俗一點,Sprite也就至關因而一個組件,其中有一個屬性就是對應着一個圖片,而後咱們能夠經過控制這個Sprite來控制咱們圖片的操做,好比縮放移動或者旋轉之類的。學習
建立方法:Hierarchy面板中->Create->tk2d->Sprite,這個是最基本的精靈建立方法,咱們能夠建立了以後往裏面添加組件,豐富其屬性。this
2.精靈集:精靈集是2DToolkit的核心,能夠將其理解成一個容器,存放Sprite的容器,Sprite Collection界面設置精靈以及其相關聯的屬性,包括碰撞區域。精靈集產生一個或多個貼圖圖集,替代你的原圖片從而提升性能。spa
建立方法: 一開始我還沒找到這個SpriteCollection建立方法,在Hierarchy面板中怎麼着都沒找到,覺得是版本問題,而後試試其餘的版本仍是同樣,結果後來發現是在Project面板中,右擊就能找到了。.net
建立好一個精靈集後取一個合適的名字,我就叫作TutorialSpriteCollection,建立好以後點擊OpenEditor...打開編輯器插件
將精靈加入精靈集裏面,拖拽資源圖片到「Drop sprites here」虛線框中,固然能夠拖放一個圖片也能夠拖放多個圖片。3d
而後選擇咱們工程中的圖片文件夾中的圖片,將其拖放到上述虛線框中,而後能夠設置精靈的碰撞屬性ColliderType爲Polygon用戶自定義(這個適用於不規則圖片),若是是規則的,假設是方形的話就直接用BoxTrimmed便可。下圖即爲我建立的自定義碰撞的圖集精靈。
設置好以後,咱們必需要作的操做就是點擊右上角的Commit按鈕,即unity開始計算圖集的一些屬性,而後生成配置文件,點擊以後會發現Project中自動多出了兩個文件夾,其實這是unity通過計算獲得的精靈的一些配置信息,例如座標,大小,材質等等。
Create->tk2d->Sprite
若是咱們須要快速的建立一個精靈,能夠就直接選擇建立一個貼圖精靈,直接Create->tk2d->Sprite From Texture
[csharp] view plaincopyprint?
using UnityEngine;
using System.Collections;
public class 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 return new WaitForFixedUpdate();
}
}
}
點擊屏幕中的小龍精靈,按下鼠標左鍵而後拖動,會發現它能夠移動哦,哇咔咔,感受真有意思,又回到了以前熟悉的2D,我的感受unity2d比cocos2d要方便很多,畢竟可視化界面更豐富一點,但目前而言,我的仍是cocos稍微熟悉一點,不過不要緊,unity是個不錯的強大的引擎,慢慢了解,呵呵,不早了,感受充實的一天!晚上和某人鬧矛盾了,小吐槽了一下,爲啥QQ沒有自動彈出某人信息的功能或者是將某人的聊天框固定在界面上,這樣就不會由於回覆晚了而鬧矛盾了,若是能夠,我以爲要向騰訊反應一下,呵呵,但願某人開心起來!
轉載請註明出處:http://blog.csdn.net/dingxiaowei2013/article/details/20389535
==================== 迂者 丁小未 CSDN博客專欄=================
MyBlog:http://blog.csdn.net/dingxiaowei2013 MyQQ:1213250243
Unity QQ羣:858550 cocos2dx QQ羣:280818155
====================== 相互學習,共同進步 ===================