Skip to main content
 首页 » 资源教程 » Unity3D教程

Unity 2D角色纹理的动态加载和自动分割

2017年01月19日 19:36:3415570蛮牛网

背景

本篇研究的内容是“2D角色纹理的动态加载和自动分割”,估计很多人会有疑问Unity 已经提供了很强大的功能为什么还要研究这部分的内容,首先我们回顾下Unity2d 已经提供的工具和功能

A、Sprite Editor 工具,可以将合并的Texture2d图集进行sprite分割,功能很强大自己可以动态分割,也可以使用Grid自定义分割,还能设置Pivot中心点。

B、Sprite Packer 工具,可以将多个独立的sprite的Texture2d纹理进行打包,提高渲染效率,功能也很强大。

既然Unity已经提供了很么强大的工具,为什么还要研究呢,这里有句话叫“优点及缺点”,这两个工具有一个共同的特点就是可视化的,需要借助Unity编辑器可视化进行操作,也就是说其实他们是手动的而不是自动的,而现实中的程序是需要动态进行配置和自动化分割的。

说了这么多说下我的需求吧,以下两点:

1、由于本人目前研究2d的相关技术,所以经常需要做帧动画,结果每写一个例子都需要绑定下精灵数组,有点重复劳动的感觉(代码的坏味道),就是像下图这样

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第1张

2、实际游戏中各种精灵对象,主角,NPC,怪物等等,每个都手动绑定?是不是有点“so young so simple”(具体如何很好的实现是后话了)。

实现

精灵图片打包

首先由于我自己的角色资源是散装的,首先需要进行Sprite Packer  ,当然这也不是必须的比如传统网页游戏和单机游戏就是散装的原理是一样的。这里第一步我需要将散装的图片打包成一张纹理图片。这里我推荐一个小工具CssSprite,文后提供附件下载,当然你也可以用PS这样的重器。具体三张图,聪明的你一看就能明白了。

使用PS打开散装图片

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第2张

 

使用CssSprite工具打开的散装图片

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第3张

 

最终生成的合成图片

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第4张

 

动态加载图片

这里由于是初探,所以就用Resources资源这个比较简单,这里其实没有别的教程写的那么故弄玄虚了,中的Resources中保存的是什么?一句话就是静态资源,也就是一起打包到发布程序的资源。如何使用很多文章讲过。核心函数是

Resources.Load()

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第5张

 

主要这个函数有泛型重载使用很方便

固定大小自动分割纹理

如何做纹理的自动分割,这里我找到方法是使用Sprite的静态方法Create,当然我这里做的定宽定长的Grid分割,Create方法有很多重载其实就是对应着Sprite Editor 工具,根据需求可以自行选择

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第6张

 

具体代码实现

这里我对资源获取和自动分割做了封装

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第7张

 

分割函数参数封装

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第8张

 

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第9张

 

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第10张

 

具体使用

这里我用的定长二维数组装的纹理集合,由于例子比较简单做了一次转成一维纹理数组(实际不可能这么简单的)

Unity 2D角色纹理的动态加载和自动分割 Unity3D教程 第11张

 

总结

本文所提到的技术虽然简单,但却是程序从Hello world到复杂程序的一块基石,当然如果大家有更方便的方法,请多多指点!

评论列表暂无评论
发表评论