zoukankan      html  css  js  c++  java
  • [unity3d插件]2dtoolkit系列一 创建精灵

    从今天开始要做一个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
     

    五、代码获取精灵并操作精灵

    [csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     
    1. using UnityEngine;  
    2. using System.Collections;  
    3.   
    4. public class NewBehaviourScript : MonoBehaviour {  
    5.     //创建精灵  
    6.     //tk2dSprite sprite;  
    7.   
    8.     // Use this for initialization  
    9.     void Start () {  
    10.         //可以这样获取精灵  
    11.         //sprite = GameObject.Find("Dragon").gameObject.GetComponent<tk2dSprite>();  
    12.   
    13.         //输出精灵的坐标  
    14.         //print("x:" + gameObject.transform.localPosition.x + "|y:" + transform.localPosition.y);  
    15.         //一开始打印的坐标是x:-1|y:0  
    16.   
    17.         //以下代码可以动态的缩放精灵  
    18.         //sprite.scale = new Vector3(xScale, yScale, zScale);  
    19.        //以下代码可改变要显示的精灵  
    20.         //sprite.spriteId = newSpriteId;  
    21.        //以下代码可以得到id  
    22.         //sprite.spriteId = sprite.GetSpriteIdByName("Rock");  
    23.   
    24.     }  
    25.       
    26.   
    27.     void Update()  
    28.     {  
    29.         //通过键盘控制改变物体颜色的属性  
    30.         //if (Input.GetKeyDown(KeyCode.A))  
    31.         //{  
    32.         //    sprite.color = Color.red;  
    33.         //}  
    34.         //if (Input.GetKeyDown(KeyCode.S))  
    35.         //{  
    36.         //    sprite.color = Color.white;  
    37.         //}  
    38.   
    39.         OnMouseDown();  
    40.   
    41.        //下面也可以做一系列的坐标判断来定位精灵移动区域  
    42.   
    43.     }  
    44.     //鼠标左击控制主角精灵移动  
    45.     IEnumerator OnMouseDown()  
    46.     {  
    47.         print("MouseDown");  
    48.         Vector3 screenPosition = Camera.main.WorldToScreenPoint(transform.position);  
    49.         Vector3 mScreenPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);  
    50.         Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(mScreenPosition);  
    51.         //鼠标左击  
    52.         while (Input.GetMouseButton(0))  
    53.         {  
    54.             mScreenPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);  
    55.             Vector3 pos = offset + Camera.main.ScreenToWorldPoint(mScreenPosition);  
    56.             pos.z = 0;  
    57.             transform.position = pos;  
    58.             yield return new WaitForFixedUpdate();  
    59.         }  
    60.     }  
    61. }  

    点击屏幕中的小龙精灵,按下鼠标左键然后拖动,会发现它可以移动哦,哇咔咔,感觉真有意思,又回到了之前熟悉的2D,个人感觉unity2d比cocos2d要方便不少,毕竟可视化界面更丰富一点,但目前而言,个人还是cocos稍微熟悉一点,不过没关系,unity是个不错的强大的引擎,慢慢了解,呵呵,不早了,感觉充实的一天!晚上和某人闹矛盾了,小吐槽了一下,为啥QQ没有自动弹出某人信息的功能或者是将某人的聊天框固定在界面上,这样就不会因为回复晚了而闹矛盾了,如果可以,我觉得要向腾讯反应一下,呵呵,希望某人开心起来!
     

    ==================== 迂者 丁小未 CSDN博客专栏=================

    MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243

    Unity QQ群:858550         cocos2dx QQ群:280818155

    ====================== 相互学习,共同进步 ===================

  • 相关阅读:
    给数据库带来的挑战
    微服务vs传统开发
    服务拆分原则
    架构演化的步骤
    如何进行微服务架构演进
    为什么选择使用Spring Cloud而放弃了Dubbo
    Spring Cloud体系介绍
    Spring Cloud都做了哪些事
    什么是Spring Boot
    微服务架构优势
  • 原文地址:https://www.cnblogs.com/dingxiaowei/p/2dtoolkit.html
Copyright © 2011-2022 走看看