[Unity UGUI图集系统]浅谈UGUI图集使用
**写在前面,下面是自己做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图集使用的更多相关文章
- 【Unity游戏开发】浅谈 NGUI 中的 UIRoot、UIPanel、UICamera 组件
简介 马三最近换到了一家新的公司撸码,新的公司 UI 部分采用的是 NGUI 插件,而之前的公司用的一直是 Unity 自带的 UGUI,因此马三利用业余时间学习了一下 NGUI 插件的使用,并把知识 ...
- 【Unity游戏开发】浅谈Lua和C#中的闭包
一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...
- 【Unity3d游戏开发】浅谈UGUI中的Canvas以及三种画布渲染模式
一.Canvas简介 Canvas画布是承载所有UI元素的区域.Canvas实际上是一个游戏对象上绑定了Canvas组件.所有的UI元素都必须是Canvas的自对象.如果场景中没有画布,那么我们创建任 ...
- 【Unity游戏开发】浅谈Unity游戏开发中的单元测试
一.单元测试的定义与作用 单元测试定义:单元测试在传统软件开发中是非常重要的工具,它是指对软件中的最小可测试单元进行检查和验证,一般情况下就是对代码中的一个函数去进行验证,检查它的正确性.一个单元测试 ...
- 浅谈Unity的渲染优化(1): 性能分析和瓶颈判断(上篇)
http://www.taidous.com/article-667-1.html 前言 首先,这个系列文章做个大致的介绍,题目"浅谈Unity",因为公司和国内大部分3D手游开发 ...
- 浅谈大型web系统架构
动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...
- 转:浅谈大型web系统架构
浅谈大型web系统架构 动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应 ...
- 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service ...
- Linux系统/dev/mapper目录浅谈
Linux系统的一般的文件系统名称类似于/dev/sda1或/dev/hda1,但是今天在进行系统维护的时候,利用df -h 命令敲出了/dev/mapper/VolGroup-lv_root和/de ...
随机推荐
- PHP(ThinkPHP5.0) + PHPMailer 进行邮箱发送验证码
GitHub下载最新版第三方类库PHPMailer: 第一步: 打开网址https://github.com/PHPMailer/PHPMailer/ 下载PHPMailer,PHPMailer 需要 ...
- opencv-7-鼠标绘制自定义图形
opencv-7-鼠标绘制自定义图形 opencvc++qt 开始之前 昨天写了具体的基本的图形绘制, 然后我们使用相应的函数接口进行调用, 便能够在图像上绘制出来相应的图形, 我们以图像绘制为例, ...
- Linux系统管理第六次作业 进程和计划任务管理
1.通过ps命令的两种选项形式查看进程信息 [root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STA ...
- c语言解一元二次方程
C语言解一元二次方程,输入系数a,b,c; #include <stdio.h> #include <math.h> int main(int argc, char *argv ...
- Tomcat中的类是怎么被一步步加载的?
了解Tomcat的类加载机制,原来一切是这么的简单. 一.类加载 在JVM中并不是一次性把所有的文件都加载到,而是一步一步的,按照需要来加载. 比如JVM启动时,会通过不同的类加载器加载不同的类.当用 ...
- 可运行的Java RMI示例和踩坑总结
简述 资料参考: https://docs.oracle.com/javase/tutorial/rmi/overview.html https://blog.csdn.net/bigtree_372 ...
- 关于 cmd 命令运行时发现错误(已加 classpath): 找不到或无法加载主类 xxx.class 原因: Java .lang.ClassNotFoundException: xxx.class
我的是这个代码,出现了,无法加载主类的问题,查看了一些回答,有的是说要删除包名(我的没有带包,所以不是这个问题),还有的是说classpath的配置有问题,但是我的java ,javac测试jdk的时 ...
- 算法竞赛进阶指南--lowbit运算,找到二进制下所有是1的位
// lowbit运算,找到二进制下所有是1的位 int H[37]; // 预处理 for (int i = 0; i < 36; i++) H[(1ll << i) % 37] ...
- USACO Training Section 1.1黑色星期五Friday the Thirteenth
题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+N- ...
- HDOJ 4699 Editor 对顶栈模拟
Editor Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Subm ...