开篇:
前段时间,网上流出了一套手游源码,本想着把服务器端搭一下,给自己认识小伙伴们调试着把这套源码学习一下。于是就买一个阿里云服务器,可是花了几天时间,就是run不起来了啊。还好网上已经有人搭出来了,暂且连上他们的服务器调试吧。哎,还是不说这些糗事了。
那阿里云服务器买都买了,总不能空着把。那就开个网站吧。于是心血来潮的,注册域名,备案,balabala。就是现在这个了。www.shihuanjue.com,个人觉得还是很好记的。以后会把之前写在有道云的笔记梳理一下搬过来吧。我不是大神,有不足的地方还请多多指出。

正文:
UGUI 有自己的 Sprite Packer 机制,就是在开发的时候让开发者没有图集这个概念,用的都是散图,然后在打包的时候引擎根据各个小图的 Packing Tag合并成一个图集,从而来降低drawcall。
设置成统一参数的图集将被合并到一张图集里面。

个人觉得,这东西不可控,合并成啥样也不知道,是否会出现一张大图里面还空着很多地方没用。
我也看了雨松MOMO的关于这些的文章。个人感觉不好用啊。(强调:个人观点)
所以我就在想能不能不用这套机制。
于是尝试用TexturePacker试试。
首先把Edit->Project Setting->Editor : Sprite Packer设置成Disabled。默认是开启的。

准备:
1.下载 texturepacker for unity 的插件,然后把插件导入到unity里面。这个插件什么用, 我会在后面说。
地址:http://www.codeandweb.com/texturepacker/unity
2.网上下载个破解版的texturepacker
准备就绪之后呢。打开texturepacker,把美术给我们的散图导入进去。
然后设置 Data file和Texture file 都是我们unity工程的目录下面的res文件

然后其它参数,大家可以酌情修改,最后导出

转到unity工程可以看到test图片不是一张单独的大图了,它有一张张小图在下面了。
这就是之前导入的插件帮我们做好的事情。

UI不需要 Minmap,所以我把勾打掉了。大小也变小了。多好。

再来看导入unity的另外一个文件。test.tpsheet
这里面保存着每一张小图的在这张图集中的位置。
读取的时候就是要根据这些数据把相对应的小图显示出来。
我把test.tpsheet改成了.txt后缀,然后把开头的没用的信息删除了。

那么接下来就是写代码了

 
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI; /// <summary>
///贴图类
/// </summary>
public class ImageInfo
{
public string name;
public Rect rect; //配置文件中要替换的精灵的位置区域Rect
public Vector2 vec2; //要替换的精灵的pivot public ImageInfo(string[] str)
{
if (str != null)
{
this.name = str[];
float x, y, w, h;
x = float.Parse(str[]);
y = float.Parse(str[]);
w = float.Parse(str[]);
h = float.Parse(str[]);
this.rect = new Rect(x, y, w, h);
float pivotX, pivotY;
pivotX = float.Parse(str[]);
pivotY = float.Parse(str[]);
this.vec2 = new Vector2(pivotX, pivotY);
}
}
} /// <summary>
/// 图集管理类
/// </summary>
public class AtlasMgr
{
public static Dictionary<string, List<ImageInfo>> imgDic = new Dictionary<string, List<ImageInfo>>();
} public class Test : MonoBehaviour
{
string url = "test";
public Texture2D mTex;//图集
public GameObject UIRoot;
List<Image> images = new List<Image>(); void Start()
{
this.LoadData(url); for (int i = ; i < AtlasMgr.imgDic[url].Count; i++)
{
ImageInfo _temp = AtlasMgr.imgDic[url][i];
Debug.Log(_temp.name + "|" + _temp.rect + "|" + _temp.vec2);
} int count = this.UIRoot.transform.childCount;
for (int j = ; j < count; j++)
{
this.images.Add(this.UIRoot.transform.Find("Image" + j).GetComponent<Image>());
}
} /// <summary>
/// 加载图集的配置信息
/// </summary>
/// <param name="loadUrl">Load URL.</param>
private void LoadData(string loadUrl)
{
if (!AtlasMgr.imgDic.ContainsKey(loadUrl))
{
AtlasMgr.imgDic.Add(loadUrl, new List<ImageInfo>());
} TextAsset binAsset = Resources.Load(loadUrl, typeof(TextAsset)) as TextAsset;
string[] lineArray = binAsset.text.Split(new char[] { '\n' }); for (int i = ; i < lineArray.Length; i++)
{
lineArray[i] = lineArray[i].Replace("\r", "");
string[] strArray = lineArray[i].Split(new char[] { ';' });
ImageInfo imgInfo = new ImageInfo(strArray);
AtlasMgr.imgDic[loadUrl].Add(imgInfo);
}
} void OnGUI()
{
if (GUILayout.Button("换图"))
{
for (int i = ; i < this.images.Count; i++)
{
//根据rect,pivot,把mTex图集里面在这个位置的小图显示出来
this.images[i].sprite = Sprite.Create(this.mTex, AtlasMgr.imgDic["test"][i].rect, AtlasMgr.imgDic["test"][i].vec2);
}
}
}
}

然后新建7个Image进行测试

点击“换图”按钮,是可以根据这些数据显示出一张小图吧。
最后把例子工程也分析出来了,例子总归是例子,只是提供一个思路,项目中要用的话,还是要好好的封装,模块化吧。
例子工程:
链接:http://pan.baidu.com/s/1pJklvz9 密码:arxk
大家如果有其它更好的方式一定要告诉我哦。
第一篇先写个简单的,以后再慢慢好好写吧。就这样吧,拜拜~!

开篇&TexturePacker打出图集给UGUI使用的更多相关文章

  1. 用TexturePacker打图集用于UGUI中

    UGUI的原理则是,让开发者彻底模糊图集的概念,让开发者不要去关心自己的图集.做界面的时候只用小图,而在最终打包的时候unity才会把你的小图和并在一张大的图集里面.Editor->Projec ...

  2. Unity3D - 使用TexturePacker打包图集以及NGUI对旋转sprites的支持

    作者:EnigmaJJ 博客地址:http://www.cnblogs.com/twjcnblog/ 在Unity中使用NGUI时,为了减少draw call,我们会将美术用到的小图打成一张图集,如图 ...

  3. UGUI 打图集

    using UnityEngine; using System.Collections; using UnityEditor; using System.Collections.Generic; us ...

  4. 使用 Unity 3D 开发游戏的架构设计难点

    Unity 3D 引擎对于开发者来说,入手非常快,因为它采用的是 C# 作为开发语言,这也大大降低了开发者的门槛.但凡只要懂一门编程语言的人都能使用 Unity 3D 引擎开发,另外 Unity 3D ...

  5. CanvasWebgl项目介绍

    CanvasWebgl 介绍 CanvasWebgl 是一个基于webgl 开发的2d绘图框架,使用TypeScript开发   CanvasWebgl的功能,是在屏幕空间 或者 3D空间产生一个画布 ...

  6. Cocos Creator 性能优化:DrawCall

    前言 在游戏开发中,DrawCall 作为一个非常重要的性能指标,直接影响游戏的整体性能表现. 无论是 Cocos Creator.Unity.Unreal 还是其他游戏引擎,只要说到游戏性能优化,D ...

  7. UGUI的图集处理方式-SpriteAtlas的前世今生

    最糟糕的是人们在生活中经常受到错误志向的阻碍而不自知,真到摆脱了那些阻碍时才能明白过来. —— 歌德 说到UGUI的图集初学者可能觉得没什么难度,包括我刚开始接触的时候也是,甚至你在开发的时候只需要把 ...

  8. (转) Unity3D 使用Texturepacker打包工具制作NGUI(Atlas)图集

    转自:http://www.unitymanual.com/thread-37485-1-1.html 由于NGUI AtlasMaker对打包的优化不好,容易打出很大的图集,很多部分都是浪费的,所有 ...

  9. Unity4.6 UGUI 图片打包设置(小图打包成图集 SpritePacker)

    版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.liveslives.com/ 在学习UGUI的过程中,一直使用小图也就是散图,一个按钮一个图 ...

随机推荐

  1. Delphi之DLL知识学习5---在Delphi应用程序中使用DLL

    首先说明一下:同一个动态库(DLL)被多个的程序加载的话,那么将会在每次加载的时候都会重新分配新的独立的内存空间,绝对不是共用一个,所以当一个DLL被多次加载的时候,其会在内存中“复制”多份,不会互相 ...

  2. Delphi的Win32的API调用简单介绍

    1.     介绍Win32 API和Win32系统.还要讨论Win32系统的功能以及它与16位系统在功能上的几个主要区别.只是让对Win32系统有一个基本的了解.当已经基本了解Win32操作后,就可 ...

  3. Server.MapPath查询路径那几件事

    主要总结Server.MapPath 这个方法的使用以及使用的场景,不是什么时候都适合使用: 1.实现功能: Server.MapPath能够获取指定URL相对服务器的物理路径,在IIS服务端,能够根 ...

  4. poj 3321:Apple Tree(树状数组,提高题)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18623   Accepted: 5629 Descr ...

  5. PHP面向对象编程之深入理解方法重载与方法覆盖(多态)

    这篇文章主要介绍了PHP面向对象编程之深入理解方法重载与方法覆盖(多态)的相关资料,需要的朋友可以参考下: 什么是多态? 多态(Polymorphism)按字面的意思就是"多种状态" ...

  6. GMap.Net开发之地址解析与路径查找

    上一篇介绍了如何在GMap地图上添加多边形,这篇介绍下如何使用在线的地图服务进行“地址解析”和“路径查找”. 先看地址解析,GMap中的地址解析主要用到GeocodingProvider中的如下方法: ...

  7. 解决因为I_JOB_NEXT问题导致job执行不正常,不停生成trace文件问题

    今天同事说有个项目生产环境的目录老是满.查看了一下bdump目录,发现确实是平均1分钟生成一个8M左右的trace文件.查询了一下alert日志,发现是个job的报错引起的.具体查看了一下trace文 ...

  8. 1.ok6410移植bootloader,移植u-boot,学习u-boot命令

    ok6410移植u-boot 既然是移植u-boot当然首先需要u-boot源码,这里的u-boot代码是由国嵌提供的. 一.配置编译u-boot A. 解压 u-boot 压缩文件 B. 进入解压生 ...

  9. ListView遍历每个Item出现NullPointerException的异常(转)

    在使用ListView过程中我们有时候需要遍历取得每个Item项中的一些数据(比如每个Item里面有TextView,需要获取它的文本等等),但是我们在遍历过程中经常会遇到NullPointerExc ...

  10. C#联通新版验证码识别的实现

    以前写了篇 联通充值卡自动充值的实现,最近发现联通官网改版了,随便看了下发现新版的验证码和以前的不同,发了点时间研究了下他的识别码,它现在的验证码如下 现在将识别步骤说下 1,转换灰度图片 2,清除2 ...