**写在前面,下面是自己做Demo的时候一些记录吧,参考了很多网上分享的资源

一、打图集

1.准备好素材(建议最好是根据图集名称按文件夹分开)

2、创建一个SpriteAtlas

3、将素材添加到图集中

4、生成图集

到此,我们的图集就准备好了

二、加载图集

1、在工程里面使用(正常包内使用建议打成AB,更新比较方便,加载方式和下面一样,工程为了方便,我将上面打好的图集放在Resources下面)

2、这是最喜欢的c+v环节,加载图集

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D; public class UIResourceLoadManager : UnitySingleton<UIResourceLoadManager>
{ private Dictionary<string, SpriteAtlas> mUISpriteAtlasDic = new Dictionary<string, SpriteAtlas>(); private T LoadResouceOfType<T>(string _resPath) where T:Object
{
T tempResource = null;
tempResource = Resources.Load<T>(_resPath);
return tempResource;
} public SpriteAtlas GetSpriteAtlas(string _atlasName)
{
if (mUISpriteAtlasDic.ContainsKey(_atlasName))
{
if (mUISpriteAtlasDic[_atlasName] == null) mUISpriteAtlasDic[_atlasName] = LoadResouceOfType<SpriteAtlas>("Chart/"+_atlasName);
}
else
{
mUISpriteAtlasDic.Add(_atlasName, LoadResouceOfType<SpriteAtlas>("Chart/" + _atlasName));
}
return mUISpriteAtlasDic[_atlasName];
} public Sprite LoadSprite(string _atlasName,string _spriteName)
{
Sprite tempSprite = null;
SpriteAtlas tempAtlas = GetSpriteAtlas(_atlasName);
if(tempAtlas != null ) tempSprite = tempAtlas.GetSprite(_spriteName);
return tempSprite;
} public Sprite[] LoadSprites(string _atlasName, Sprite[] _spriteArray)
{
SpriteAtlas tempAtlas = GetSpriteAtlas(_atlasName);
if (tempAtlas != null)
{
if (_spriteArray == null || _spriteArray.Length < tempAtlas.spriteCount) _spriteArray = new Sprite[tempAtlas.spriteCount];
if (tempAtlas != null) tempAtlas.GetSprites(_spriteArray);
}
return _spriteArray;
}
} public class UnitySingleton<T> : MonoBehaviour where T : Component
{
private static T _instance;
public static T Instance
{
get
{
if (_instance == null)
{
_instance = FindObjectOfType(typeof(T)) as T;
if (_instance == null)
{
GameObject tempObject = new GameObject();
tempObject.hideFlags = HideFlags.HideAndDontSave;
_instance = (T)tempObject.AddComponent(typeof(T));
Object.DontDestroyOnLoad(tempObject);
}
}
return _instance;
}
}
}

3、使用举例

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class UIAtlasLoadImag : MonoBehaviour
{
public Image image;
// Start is called before the first frame update
void Start()
{
if (image) image.sprite = UIResourceLoadManager.Instance.LoadSprite("icon","小地图底");
} // Update is called once per frame
void Update()
{ }
}

三、意外情况

我在打图集的时候发现,有一张素材中间有很大一块透明区域,导致打图集时把几个尺寸比较小的素材打到这个素材中间了,使用的时候出现下面这种情况

刚开始我以为是图集问题,不能将小尺寸打到中间有透明区域的大尺寸素材里面

后面我随手乱点,发现好了 = =||

如果你也有类似情况,选他选他选他。。。

---------------------------------------------------------------------------------------------------------------------------------------------------

写在后面,上面素材马赛克是为了避免产生一些不必要的麻烦。

我的工作是使用NGUI项目,用的是5.X版本Unity,最近想用用新版本Unity,一下从5.x到2019,有种从石器时代到工业时代的赶脚,新奇,哈哈

很久不记录这个东西了,这次因为想试试看把自己用NGUI实现的内容完全转换成UGUI,记录一下过程,和一些差异实现,开发日记之类的

[Unity UGUI图集系统]浅谈UGUI图集使用的更多相关文章

  1. 【Unity游戏开发】浅谈 NGUI 中的 UIRoot、UIPanel、UICamera 组件

    简介 马三最近换到了一家新的公司撸码,新的公司 UI 部分采用的是 NGUI 插件,而之前的公司用的一直是 Unity 自带的 UGUI,因此马三利用业余时间学习了一下 NGUI 插件的使用,并把知识 ...

  2. 【Unity游戏开发】浅谈Lua和C#中的闭包

    一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...

  3. 【Unity3d游戏开发】浅谈UGUI中的Canvas以及三种画布渲染模式

    一.Canvas简介 Canvas画布是承载所有UI元素的区域.Canvas实际上是一个游戏对象上绑定了Canvas组件.所有的UI元素都必须是Canvas的自对象.如果场景中没有画布,那么我们创建任 ...

  4. 【Unity游戏开发】浅谈Unity游戏开发中的单元测试

    一.单元测试的定义与作用 单元测试定义:单元测试在传统软件开发中是非常重要的工具,它是指对软件中的最小可测试单元进行检查和验证,一般情况下就是对代码中的一个函数去进行验证,检查它的正确性.一个单元测试 ...

  5. 浅谈Unity的渲染优化(1): 性能分析和瓶颈判断(上篇)

    http://www.taidous.com/article-667-1.html 前言 首先,这个系列文章做个大致的介绍,题目"浅谈Unity",因为公司和国内大部分3D手游开发 ...

  6. 浅谈大型web系统架构

    动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...

  7. 转:浅谈大型web系统架构

    浅谈大型web系统架构 动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应 ...

  8. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service ...

  9. Linux系统/dev/mapper目录浅谈

    Linux系统的一般的文件系统名称类似于/dev/sda1或/dev/hda1,但是今天在进行系统维护的时候,利用df -h 命令敲出了/dev/mapper/VolGroup-lv_root和/de ...

随机推荐

  1. c++四舍五入函数round()

    其实c++自身是没有四舍五入函数round()的,若果你要用到的话,可以自己写一个round(),不过要用到floor()和ceil这两个函数如下: #include<iostream> ...

  2. PHP 新特性:如何善用接口与Trait

    首先! 接口也可以继承,通过使用 extends 操作符. 案例: <?php interface a { public function foo(); } interface b extend ...

  3. nCOV 数据简要分析 (0326)

    nCOV 数据简要分析 (0326) matlabdatacov 简介 碰巧看到了数据上传, 正在跑数据的我想着要不拟合一下看看, 然后, 就做了两个小时, 这里做一个简单的记录过程, 后续可能做在线 ...

  4. python实现逻辑回归

    首先得明确逻辑回归与线性回归不同,它是一种分类模型.而且是一种二分类模型. 首先我们需要知道sigmoid函数,其公式表达如下: 其函数曲线如下: sigmoid函数有什么性质呢? 1.关于(0,0. ...

  5. WMware中Ubuntu系统安装VMware tools

    在VMware的虚拟机中安装完ubuntu之后,继续安装VMware tools. 一般情况下,这时都有光驱的图标,点开就能找到"VMwareTools-10.0.10-4301679.ta ...

  6. 一句话总结JS构造函数、原型和实例的关系

    "每个构造函数都有一个原型对象, 原型对象都包含一个指向构造函数的指针, 实例都包含一个指向原型对象的内部指针." --此段话摘自<JavaScript高级程序设计>. ...

  7. 图论-网络流-最大流--POJ1273Drainage Ditches(Dinic)

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 91585   Accepted: 3549 ...

  8. 2019-2020 ICPC, Asia Jakarta Regional Contest A. Copying Homework (思维)

    Danang and Darto are classmates. They are given homework to create a permutation of N integers from  ...

  9. Spring官网阅读(七)容器的扩展点(二)FactoryBean

    在上篇文章中我们已经对容器的第一个扩展点(BeanFactoryPostProcessor)做了一系列的介绍.其中主要介绍了Spring容器中BeanFactoryPostProcessor的执行流程 ...

  10. MySQL(二)MySQL中的存储引擎

    前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 ...