Sprite Atlas
发现unity新版有图集,其实挺好用的
参考
https://mp.weixin.qq.com/s/yo3XiKpi6lJNH16MsJ-KUw
https://www.jianshu.com/p/bdd223184738
创建图集
这里面可以直接放文件夹,老图集,图
先看Variant 模式
image.png
然后拖一个新图集,相当于把传入的老图集粘贴一遍,调整Scale可以降低分辨率,为高低分辨率做不同的适配,mode改为Point模式
image.png
如果缩放以后不是2次幂就会有提示,不管就会性能倒贴
image.png
压缩了好多倍
image.png
image.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
这个问题留着以后出了看
还有这个也是
Sprite Mask
这个就是图片遮罩
只能用在用不了在Image上
Inside是显示在图片里 Outside是显示在图片外
image.png
然后创建一个spriteMask父节点 出了范围就会被隐藏掉
Alpha Cutoff会影响Mash形状
image.png
粒子特效也可以设置
image.png
这里可以设置遮罩可以作用的范围
image.png
把一个order in layer改为5 就是不在范围内
image.png
然后另外一个就不显示了
image.png
把这个设置为灰度梯度后
image.png
image.png
拖动这个会有奇妙的效果
image.png
网友评论