Sprite Atlas
发现unity新版有图集,其实挺好用的
参考
https://mp.weixin.qq.com/s/yo3XiKpi6lJNH16MsJ-KUw
https://www.jianshu.com/p/bdd223184738
创建图集
![](https://img.haomeiwen.com/i15146729/29918ff446ee9f78.png)
这里面可以直接放文件夹,老图集,图
先看Variant 模式
![](https://img.haomeiwen.com/i15146729/38ab5355ae7a532e.png)
然后拖一个新图集,相当于把传入的老图集粘贴一遍,调整Scale可以降低分辨率,为高低分辨率做不同的适配,mode改为Point模式
![](https://img.haomeiwen.com/i15146729/950a404803b44147.png)
如果缩放以后不是2次幂就会有提示,不管就会性能倒贴
![](https://img.haomeiwen.com/i15146729/095f58627069eb24.png)
压缩了好多倍
![](https://img.haomeiwen.com/i15146729/e9a85f81f68f8446.png)
![](https://img.haomeiwen.com/i15146729/c570e94df337071a.png)
这个是Editor调用代码 选一个文件或者一堆图生成
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.U2D;
using UnityEngine;
using UnityEngine.U2D;
public class AtlasTools
{
const string atlasPath = "Assets/atlas.spriteatlas";
[MenuItem("Tools/ChangeAtlasSetting", false, 1)]
static void ChangeAtlasSetting()
{
//这个是Always Enabled 设置完SpriteAtlas才有Pack Preview 去看图集
// -> Enable For Builds:在打包时将规划好的小图打成图集
//-> AlwaysEnabled:一直激活状态,总是将规划好的小图打成图集
EditorSettings.spritePackerMode = SpritePackerMode.AlwaysOn;
}
[MenuItem("Tools/SetSpriteAtlas", true, 0)]
static bool CreateAtlasJudgement()
{
if (Selection.objects.Length <= 0)
return false;
else
return true;
}
[MenuItem("Tools/SetSpriteAtlas", false, 0)]
static void CreateAtlas()
{
SpriteAtlas spriteAtlas = new SpriteAtlas();
//选中以在构建中包含Atlas Asset。请注意,取消选中此选项会导致在播放模式期间不呈现任何打包的资产。
//会导致打包冗余 取消后需要在代码中监听SpriteAtlasManager.atlasRequested事件来在程序中加载贴图集。
//不然会导致AB包首个加载图片为空白 ResourceLoad没问题
spriteAtlas.SetIncludeInBuild(false);
SpriteAtlasPackingSettings packSetting = new SpriteAtlasPackingSettings()
{
//包偏移
blockOffset = 1,
//打包时是否支持包旋转
enableRotation = false,
//是否紧密打包
enableTightPacking = false,
//边界填充值
padding = 2
};
spriteAtlas.SetPackingSettings(packSetting);
SpriteAtlasTextureSettings textureSettings = new SpriteAtlasTextureSettings()
{
//是否开启读写
readable = false,
//Point分离过滤模式 点过滤 - 纹理像素变得块状近距离。
//Bilinear双线性过滤 - 纹理样本的平均值。
//Trilinear三线性过滤 - 对纹理样本进行平均,并在mipmap级别之间进行混合。
filterMode = FilterMode.Bilinear,
//是否启用mipmap
generateMipMaps = false,
//纹理存储在伽马空间中。
sRGB = true
};
spriteAtlas.SetTextureSettings(textureSettings);
TextureImporterPlatformSettings textureImporterPlatformSettings = new TextureImporterPlatformSettings()
{
//设置类型名字
name = "Android",
//是否重写
overridden = true,
//在不支持ETC2的手机上回退
androidETC2FallbackOverride = AndroidETC2FallbackOverride.Quality16Bit,
maxTextureSize = 1024,
//压缩格式 用之前人家测试最好的手游压缩格式
format = TextureImporterFormat.ASTC_RGBA_4x4,
//纹理不会被压缩。未压缩的= 0,
//摘要纹理将根据平台// (DXT, ASTC,…)使用标准格式进行压缩。Compressed= 1,
//摘要纹理将根据平台和可用性(BC7, ASTC4x4,…)使用高质量的格式进行压缩。CompressedHQ = 2,
//摘要根据平台和可用性(2bpp PVRTC, ASTC8x8,…),纹理将使用低质量但高性能、高压缩/格式进行压缩。CompressedLQ = 3
textureCompression = TextureImporterCompression.CompressedHQ,
//可使用时压缩
crunchedCompression = true,
//压缩纹理质量[0-100]
compressionQuality = 50,
};
spriteAtlas.SetPlatformSettings(textureImporterPlatformSettings);
spriteAtlas.Add(Selection.objects);
AssetDatabase.CreateAsset(spriteAtlas, atlasPath);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
AB包加载和这个差不多
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D;
using UnityEngine.UI;
public class Test : MonoBehaviour
{
public Image image;
private void OnEnable()
{
SpriteAtlasManager.atlasRequested += Request;
}
private void OnDestroy()
{
SpriteAtlasManager.atlasRequested -= Request;
}
private void Request(string tag, Action<SpriteAtlas> action)
{
SpriteAtlas sa = Resources.Load<SpriteAtlas>("atlas");
image.sprite = sa.GetSprite("Mybackgr");
action(sa);
}
}
Sprite[] sprites = new Sprite[10];
uiSpriteAtlas.GetSprites(sprites, "head");
这样还能取多个名字一样的
https://www.cnblogs.com/TheChenLin/p/9763710.html
这个问题留着以后出了看
![](https://img.haomeiwen.com/i15146729/bb8ea21648ba4c94.png)
还有这个也是
Sprite Mask
这个就是图片遮罩
只能用在用不了在Image上
Inside是显示在图片里 Outside是显示在图片外
![](https://img.haomeiwen.com/i15146729/58b1ab78f487325d.png)
然后创建一个spriteMask父节点 出了范围就会被隐藏掉
Alpha Cutoff会影响Mash形状
![](https://img.haomeiwen.com/i15146729/507bc84a62ebdab7.png)
粒子特效也可以设置
![](https://img.haomeiwen.com/i15146729/93e9f181d05f7fc7.png)
这里可以设置遮罩可以作用的范围
![](https://img.haomeiwen.com/i15146729/57c78bf185e90de5.png)
把一个order in layer改为5 就是不在范围内
![](https://img.haomeiwen.com/i15146729/148a8b1d8c92dc43.png)
然后另外一个就不显示了
![](https://img.haomeiwen.com/i15146729/e3749ce7844b7523.png)
把这个设置为灰度梯度后
![](https://img.haomeiwen.com/i15146729/5b2814981b16e43c.png)
![](https://img.haomeiwen.com/i15146729/b830bdd4cb099c7f.png)
拖动这个会有奇妙的效果
![](https://img.haomeiwen.com/i15146729/e67d5c543285e044.png)
网友评论