从今天开始要作一个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
====================== 相互学习,共同进步 ===================