http://blog.csdn.net/onerain88/article/details/18563687

2d Tool Kit 是一款出色的基于unity3d 开发2d游戏的工具,提供了丰富的编辑器工具和教程,是基于unity3d开发2d游戏的不二之选。

(PS:建议在unity3d 4.3版本(Native2D)没有稳定之前或者对新技术还不是很熟悉的情况下,可以考虑继续使用2d Tool Kit)。

1. 需求

2d游戏中最重要的概念就是Sprite了,而制作一般2d游戏都离不开Sprite的序列帧,比如一般的RPG游戏的角色有 待机,行走,攻击,被击,各种技能...动作,tk2d提供的文档里介绍的是一种很酷的点击,拖拽方式就可以完成,大概流程如下:

(1)将某个角色所有动作序列帧合成tk2dSpriteCollection(根据不同需求同一个tk2dSpriteCollection可能包括多个角色,根据需求变通)

(2)创建tk2dSpriteAnimation对象,根据动作需求创建tk2dSpriteAnimationClip对象,添加至之前创建的tk2dSpriteAnimation对象中

(PS:具体操作请参考tk2d文档)

看似非常简单的操作,但是当角色和动作数量比较多的时候,这个工作就变得非常枯燥了(尤其是对于程序员...),我们仔细观察这个枯燥的工作,发现其中的工作是有规律并且重复的工作,对于程序来说,最擅长解决的问题就是有规律并且重复的工作了!

(PS:对于程序员来说,没有规律创造规律也要上!)

最后的需求定义为:通过程序解决项目中角色及其动作的生成工作!

2. 约定

当确定好需求之后,我们要和美术做一些约定,约定如下:

(1)按不同角色将角色分组目录,比如 Hero,Monster,NPC...

(2)在角色目录下,按动作再分组目录,比如 Idle,Attack,Move...

(3)在不同的动作目录下,依次存放这个动作的所有序列帧,比如 Idle0001, Idle0002...Idle0010

3. 实现

我们所需要编程解决的问题,就是完成需求中提出的手动步骤!

(这个Demo使用的资源是tk2d中的creating a sprite animation资源)

(1)将角色所有动作序列帧合成tk2dSpriteCollection

为了简单,我从tk2d中引用了两个方法,分别为创建tk2dSpriteCollection和tk2dSpriteAnimation的Prefab

(PS:由于两个方法为普通方法,并非工具方法,于是我无耻的拷贝到了我的代码之中,为了美观,我就不贴了,最后会贴出Demo下载地址)

  1. string heroName = "Hero";
  2. // 1. New Sprite Collection
  3. tk2dSpriteCollection sc = CreateSpriteCollection(heroName);
  4. // 2. Collect Sprites' Texture Params
  5. List<tk2dSpriteCollectionDefinition> scDefList = new List<tk2dSpriteCollectionDefinition>();
  6. DirectoryInfo heroDI = new DirectoryInfo(Application.dataPath + "/Hero/");
  7. DirectoryInfo[] animDIArr = heroDI.GetDirectories();
  8. foreach (DirectoryInfo animDI in animDIArr)
  9. {
  10. FileInfo[] frameFIArr = animDI.GetFiles("*.png");
  11. foreach (FileInfo frameFI in frameFIArr)
  12. {
  13. tk2dSpriteCollectionDefinition frameSCDef = new tk2dSpriteCollectionDefinition();
  14. string framePath = "Assets/" + heroName + "/" + animDI.Name +
  15. "/" + frameFI.Name;
  16. Texture2D frameTex = AssetDatabase.LoadAssetAtPath(framePath, typeof(Texture2D)) as Texture2D;
  17. if (frameTex == null)
  18. EditorUtility.DisplayDialog("Error", "Texture2D Is NULL: " + frameFI.Name, "OK");
  19. frameSCDef.name = frameTex.name;
  20. if (!CheckSpriteNameInSC(scDefList, frameTex.name))
  21. EditorUtility.DisplayDialog("Error", "Duplicated Frame Name: " + frameTex.name, "OK");
  22. // 这里是对每个序列帧属性的设置,根据需求可以自定义默认生成属性
  23. frameSCDef.colliderType = tk2dSpriteCollectionDefinition.ColliderType.ForceNone;
  24. frameSCDef.texture = frameTex;
  25. frameSCDef.anchor = tk2dSpriteCollectionDefinition.Anchor.LowerCenter;
  26. scDefList.Add(frameSCDef);
  27. }
  28. }
  29. sc.textureParams = scDefList.ToArray();
  30. // 3. Try Rebuild
  31. tk2dSpriteCollectionBuilder.ResetCurrentBuild();
  32. if (!tk2dSpriteCollectionBuilder.Rebuild(sc))
  33. EditorUtility.DisplayDialog("Error", "Sprite Collection Build Failed", "OK");

(2)创建tk2dSpriteAnimation对象,创建tk2dSpriteAnimationClip对象添加至tk2dSpriteAnimation对象

  1. // 4. Create SpriteAnimation
  2. sc = GetSpriteCollection(heroName);
  3. tk2dSpriteAnimation heroSa = CreateSpriteAnimation(heroName);
  4. // 5. Create Animation Clip Array
  5. int clipIndex = 0;
  6. heroSa.clips = new tk2dSpriteAnimationClip[animDIArr.Length];
  7. foreach (DirectoryInfo animDI in animDIArr)
  8. {
  9. string animName = animDI.Name;
  10. heroSa.clips[clipIndex++] = CreateSpriteAnimationClip(animName,
  11. animDI.GetFiles("*.png"), sc);
  12. }

4. 效果

生成的tk2dSpriteCollection如下

生成的tk2dSpriteAnimation如下

5. PS

这个只是一个Demo程序,功能还不是很完善,比如对于帧序列,可能需要某些序列帧播放多帧,这时我们就需要单写一种格式去描述这个Clip了!

由于2dToolKit是收费插件,附件就只上传我的代码文件了!

附件下载

基于2d Tool Kit 精灵合图,动作生成工具的更多相关文章

  1. excel制作折线图太麻烦?试试这些折线图在线生成工具

    折线图是以折线的上升或下降来表示统计数量的增减变化的统计图,叫作折线统计图.用折线的起伏表示数据的增减变化情况,不仅可以表示数量的多少,而且可以反映数据的增减变化情况.并且折线图也是目前最方便的一种统 ...

  2. 【转载】利用Unity自带的合图切割功能将合图切割成子图

    虽然目前网上具有切割合图功能的工具不少,但大部分都是自动切割或者根据plist之类的合图文件切割的, 这种切割往往不可自己微调或者很难维调,导致效果不理想. 今天逛贴吧发现了一位网友写的切割合图插件很 ...

  3. compass模块----Utilities----Sprites精灵图合图

    css雪碧图又叫css精灵或css sprite,是一种背景图片的拼合技术.使用css雪碧图,能够减少页面的请求数.降低图片占用的字节,以此来达到提升页面访问速度的目的.但是它也有令人诟病的地方,就是 ...

  4. DX11 Without DirectX SDK--04 使用DirectX Tool Kit帮助开发

    回到 DirectX11--使用Windows SDK来进行开发 DirectX Tool Kit下载 DirectX Tool Kit是一个包含许多类的集合,用于为公共Windows平台编写Dire ...

  5. DirectX11 With Windows SDK--04 使用DirectX Tool Kit帮助开发

    前言(2018/11/4) DXTK库现在已经不随Github项目提供,因为只用到了其中的键鼠类,已经过提取加入到后续的项目中 但是如果你需要配置DirectXTK到自己的项目当中,可以参考这篇博客进 ...

  6. Cocos2d-JS项目之三:使用合图

    studio里使用合图感觉和spriteBatchNode差不多,但有不同,合图只起到在加载资源时减少IO的作用,起不到批渲染的作用.其实想想,studio本来就是用来拼UI界面的,一个上点规模的UI ...

  7. 基于iCamera App Kit 测试oV5640 500w分辨率 摄像头 总结

    基于iCamera App Kit 测试oV5640 摄像头 总结 iCamera App Kit 下载地址 http://pan.baidu.com/s/1kUMIwB1 可以参考下载链接的说明手册 ...

  8. 2D Tookit (一) 精灵切割

    Sprite Dicing 精灵切割 图一:原图 Diced 设置   Diced[切割]对比图 文档 http://www.2dtoolkit.com/docs/latest/advanced/sp ...

  9. Falcon Genome Assembly Tool Kit Manual

    Falcon Falcon: a set of tools for fast aligning long reads for consensus and assembly The Falcon too ...

随机推荐

  1. [C/C++基础] C语言常用函数strlen的使用方法

    函数声明:extern unsigned int strlen(char *s); 所属函数库:<string.h> 功能:返回s所指的字符串的长度,其中字符串必须以’\0’结尾 参数:s ...

  2. 一句话概括下spring框架及spring cloud框架主要组件

    作为java的屌丝,基本上跟上spring屌丝的步伐,也就跟上了主流技术.spring 顶级项目:Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你 ...

  3. [USACO2005][POJ3045]Cow Acrobats(贪心)

    题目:http://poj.org/problem?id=3045 题意:每个牛都有一个wi和si,试将他们排序,每头牛的风险值等于前面所有牛的wj(j<i)之和-si,求风险值最大的牛的最小风 ...

  4. 02.C#可空類型、默認參數、LINQ(一章1.3-1.4)

    利用上班時間發個隨筆,不知領導會不會看到,可能會有同事看到也說不定啊:) 關于可空類型,在C#1中沒有這個概念,在C#3中引入的.那比如我們要實現一個表示人的類,人有名字和年齡兩個屬性,如何表示一個沒 ...

  5. Journey Of Code组组员贡献率

    628是该组的组长,前期的主要任务是数据库的设计,中后期加入实现功能模块的工作,实现了文件的上传和解析excel表格的功能,负责协调组员之间的工作和沟通,并且也是最后上台进行演示的人员:所以贡献率有3 ...

  6. java多线程-CyclicBarrier

    介绍 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBa ...

  7. 如何在Dreamweaver中使用emmet

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3666 一.emmet ...

  8. 压缩算法实现之LZ78

    LZ78编码 LZ78算法,建立词典的算法. LZ78的编码思想: 不断地从字符流中提取新的缀-符串(String),通俗地理解为新"词条",然后用"代号"也就 ...

  9. knockout——官网demo

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. zoj1665 dij变形

    既然输入的是损坏率,那1-x就是剩余的.最后只要剩余的最大. #include<stdio.h> #include<string.h> #define Max 99999999 ...