基于2d Tool Kit 精灵合图,动作生成工具
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下载地址)
- string heroName = "Hero";
- // 1. New Sprite Collection
- tk2dSpriteCollection sc = CreateSpriteCollection(heroName);
- // 2. Collect Sprites' Texture Params
- List<tk2dSpriteCollectionDefinition> scDefList = new List<tk2dSpriteCollectionDefinition>();
- DirectoryInfo heroDI = new DirectoryInfo(Application.dataPath + "/Hero/");
- DirectoryInfo[] animDIArr = heroDI.GetDirectories();
- foreach (DirectoryInfo animDI in animDIArr)
- {
- FileInfo[] frameFIArr = animDI.GetFiles("*.png");
- foreach (FileInfo frameFI in frameFIArr)
- {
- tk2dSpriteCollectionDefinition frameSCDef = new tk2dSpriteCollectionDefinition();
- string framePath = "Assets/" + heroName + "/" + animDI.Name +
- "/" + frameFI.Name;
- Texture2D frameTex = AssetDatabase.LoadAssetAtPath(framePath, typeof(Texture2D)) as Texture2D;
- if (frameTex == null)
- EditorUtility.DisplayDialog("Error", "Texture2D Is NULL: " + frameFI.Name, "OK");
- frameSCDef.name = frameTex.name;
- if (!CheckSpriteNameInSC(scDefList, frameTex.name))
- EditorUtility.DisplayDialog("Error", "Duplicated Frame Name: " + frameTex.name, "OK");
- // 这里是对每个序列帧属性的设置,根据需求可以自定义默认生成属性
- frameSCDef.colliderType = tk2dSpriteCollectionDefinition.ColliderType.ForceNone;
- frameSCDef.texture = frameTex;
- frameSCDef.anchor = tk2dSpriteCollectionDefinition.Anchor.LowerCenter;
- scDefList.Add(frameSCDef);
- }
- }
- sc.textureParams = scDefList.ToArray();
- // 3. Try Rebuild
- tk2dSpriteCollectionBuilder.ResetCurrentBuild();
- if (!tk2dSpriteCollectionBuilder.Rebuild(sc))
- EditorUtility.DisplayDialog("Error", "Sprite Collection Build Failed", "OK");
(2)创建tk2dSpriteAnimation对象,创建tk2dSpriteAnimationClip对象添加至tk2dSpriteAnimation对象
- // 4. Create SpriteAnimation
- sc = GetSpriteCollection(heroName);
- tk2dSpriteAnimation heroSa = CreateSpriteAnimation(heroName);
- // 5. Create Animation Clip Array
- int clipIndex = 0;
- heroSa.clips = new tk2dSpriteAnimationClip[animDIArr.Length];
- foreach (DirectoryInfo animDI in animDIArr)
- {
- string animName = animDI.Name;
- heroSa.clips[clipIndex++] = CreateSpriteAnimationClip(animName,
- animDI.GetFiles("*.png"), sc);
- }
4. 效果
生成的tk2dSpriteCollection如下
生成的tk2dSpriteAnimation如下
5. PS
这个只是一个Demo程序,功能还不是很完善,比如对于帧序列,可能需要某些序列帧播放多帧,这时我们就需要单写一种格式去描述这个Clip了!
由于2dToolKit是收费插件,附件就只上传我的代码文件了!
基于2d Tool Kit 精灵合图,动作生成工具的更多相关文章
- excel制作折线图太麻烦?试试这些折线图在线生成工具
折线图是以折线的上升或下降来表示统计数量的增减变化的统计图,叫作折线统计图.用折线的起伏表示数据的增减变化情况,不仅可以表示数量的多少,而且可以反映数据的增减变化情况.并且折线图也是目前最方便的一种统 ...
- 【转载】利用Unity自带的合图切割功能将合图切割成子图
虽然目前网上具有切割合图功能的工具不少,但大部分都是自动切割或者根据plist之类的合图文件切割的, 这种切割往往不可自己微调或者很难维调,导致效果不理想. 今天逛贴吧发现了一位网友写的切割合图插件很 ...
- compass模块----Utilities----Sprites精灵图合图
css雪碧图又叫css精灵或css sprite,是一种背景图片的拼合技术.使用css雪碧图,能够减少页面的请求数.降低图片占用的字节,以此来达到提升页面访问速度的目的.但是它也有令人诟病的地方,就是 ...
- DX11 Without DirectX SDK--04 使用DirectX Tool Kit帮助开发
回到 DirectX11--使用Windows SDK来进行开发 DirectX Tool Kit下载 DirectX Tool Kit是一个包含许多类的集合,用于为公共Windows平台编写Dire ...
- DirectX11 With Windows SDK--04 使用DirectX Tool Kit帮助开发
前言(2018/11/4) DXTK库现在已经不随Github项目提供,因为只用到了其中的键鼠类,已经过提取加入到后续的项目中 但是如果你需要配置DirectXTK到自己的项目当中,可以参考这篇博客进 ...
- Cocos2d-JS项目之三:使用合图
studio里使用合图感觉和spriteBatchNode差不多,但有不同,合图只起到在加载资源时减少IO的作用,起不到批渲染的作用.其实想想,studio本来就是用来拼UI界面的,一个上点规模的UI ...
- 基于iCamera App Kit 测试oV5640 500w分辨率 摄像头 总结
基于iCamera App Kit 测试oV5640 摄像头 总结 iCamera App Kit 下载地址 http://pan.baidu.com/s/1kUMIwB1 可以参考下载链接的说明手册 ...
- 2D Tookit (一) 精灵切割
Sprite Dicing 精灵切割 图一:原图 Diced 设置 Diced[切割]对比图 文档 http://www.2dtoolkit.com/docs/latest/advanced/sp ...
- Falcon Genome Assembly Tool Kit Manual
Falcon Falcon: a set of tools for fast aligning long reads for consensus and assembly The Falcon too ...
随机推荐
- 有四中方法可以实现PHP的伪静态,你造吗?
说起伪静态的实现方案,你是不是很爽快的回答"简单,配置下apache的重写规则就行了嘛" 但是你有没有发现这种情况,你最近弄了很多新功能,每天上几个新功能,每天都有好多伪静态配置, ...
- XP明年就被停止技术支持,这会带来什么?谈谈如何做决策
XP是MS的一款老牌操作系统,相信大家都不陌生,甚至还有继续使用的人,当然了,在虚拟机里用它也是很好用的,不过,再漂亮的姑娘,也有嫁人的时候,作为XP的父母,MS微软明年四月将停止支持有十多年历史的 ...
- AngularJS开发指南6:AngularJS表单详解
表单控件(input, select, textarea )是用来获取用户输入的.表单则是一组有联系的表单控件的集合. 用户能通过表单和表单控件提供验证的服务,知道自己的输入是否合法.这样能让用户交互 ...
- web服务器
1.打破信息孤岛,实现信息的集成 2.配置文件 web.xml 定义自己的服务器应该要哪些功能! 3.tomcat 是一个servlet容器,一个web服务器. 部署:将web应用 ...
- MyEclipse内存不足问题
1.修改eclipse.ini 在Myeclipse安装目录下G:\MyEclipse8.5\Genuitec\MyEclipse 8.5有一个myeclipse.ini配置文件,设置如下: -vma ...
- java的RMI(Remote Method Invocation)
RMI 相关知识RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络 ...
- 扩展KMP
刘雅琼论文 http://wenku.baidu.com/view/8e9ebefb0242a8956bece4b3.html 论文讲的非常详细. 给定母串S,子串T,n=strlen(S),m=st ...
- Cellphone Typing 字典树
Cellphone Typing Time Limit: 5000ms Memory Limit: 131072KB This problem will be judged on UVA. Ori ...
- JEECMS页面中常用标签
(1)在段落前给每一行加序号 从0开始:${a_index}从1开始:${a_index+1} (2)标记说明 [文章导航]:[@cms.Position /] [文章标题]:${arti.title ...
- 手动搭建SpringMVC报错
猜测这个是由于自己在搭建时缺少包造成的,后来将按照自己之前的项目将包补齐,tomcat就不报错了,看来还是要学习maven 这样就不会缺少包了