**写在前面,下面是自己做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. SpringBoot项目集成Redis

    一.在pom文件中添加依赖 <!-- 集成redis --> <dependency> <groupId>org.springframework.boot</ ...

  2. LeetCode 面试题56 - I. 数组中数字出现的次数 | Python

    面试题56 - I. 数组中数字出现的次数 题目 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). ...

  3. VideoView--简单的设置全屏幕播放

    我说的最主要的是要在布局哪里设置一下,如: <com.example.mypalyer.fullScreen          android:id="@+id/videoView1& ...

  4. MySQL的远程链接

    安装好我们的mMySQL,是不是也有种无从下手的感觉,不用怕,接下来我们可以使用远程连接来可视化我们的数据库的数据: 1. 打开我们的数据库,帐号是root,密码查看文件就行了 2.使用命令: mys ...

  5. mac使用brew安装mysql5.7

    安装mysql5.7 brew install mysql@5.7 设置环境变量(可能安装完自动生成过了,可以cat ~/.zshrc看一下,有了就不用添加了 ) echo 'export PATH= ...

  6. Zabbix数据库表分区

    zabbix的监控主机数量将近300,且运行了一年时间了,最近zabbix server服务监控历史数据等服务不断自身告警.查询性能也变得很低 关于历史数据的两个参数,在zabbix server的配 ...

  7. 创建线程的方式三:实现Callable接口-----JDK5.0 新增

    package com.yhqtv.java2; /* * 创建线程的方式三:实现Callable接口-----JDK5.0 新增 * * 如何理解实现Callable接口的方式创建多线程比实现Run ...

  8. 【Linux网络基础】网络拓扑、OSI层次模型、TCP/IP协议簇

    一.前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工作来说这些并不是重点,因此,我不可能从最基础的网络知识开始讲起.本节内容更多是从一个梳理和 ...

  9. FluxInterval实例及解析

    为什么80%的码农都做不了架构师?>>>   序 本文主要研究下FluxInterval的机制 FluxInterval reactor-core-3.1.3.RELEASE-sou ...

  10. 如何使用badboy录制一个脚本并成功的导入jmeter中?

    前言: 虽然,很多人已经不适用这种方式进行录制脚本了,因为不好维护.但是,还是有一些朋友在刚开始学习的过程中使用badboy. 可能有人会好奇了,人家五一都出去玩了,你在家学习吗?正巧前一阵有粉丝留言 ...