编写自动设置tag工具以及ab包工具。
注意点:
开启read/write Enable的图片不会打图集
Resource资源目录下图片不会打图集。
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using System.IO;
using UnityEngine;
public class AutoSetTextureUISprite : AssetPostprocessor //自动设置图片的pack tag
{
void OnPreprocessTexture()
{
//自动设置类型;
TextureImporter textureImporter = (TextureImporter)assetImporter;
textureImporter.textureType = TextureImporterType.Sprite;
//自动设置打包tag;
string dirName = Path.GetDirectoryName(assetPath);
string folderStr = Path.GetFileName(dirName);
textureImporter.spritePackingTag = folderStr;
//没有关闭read/write Enable的图片不会打图集,所以关闭掉
textureImporter.isReadable = false;
}
}
public class BundleTool
{
[MenuItem("AssetsBundle/Build AssetBundles")]
static void BuildAllAssetBundles()//进行打包
{
string dir = "AssetBundles";
//判断该目录是否存在
if (Directory.Exists(dir) == false)
{
Directory.CreateDirectory(dir);
}
var bundles = new List<AssetBundleBuild>();
var target = BuildTarget.StandaloneWindows64;
//将所有prefab文件夹下打包
var prefabPaths = Directory.GetFiles("Assets/Resources/Prefab/", "*.prefab", SearchOption.AllDirectories);
var build = new AssetBundleBuild();
build.assetBundleName = "prefabs";
build.assetNames = prefabPaths; //所有的prefab打进一个包
bundles.Add(build);
EditorSettings.spritePackerMode = SpritePackerMode.BuildTimeOnly; //开启后打ab包时,会将prefab引用的图片对应的tag打成图集打进ab包中
BuildPipeline.BuildAssetBundles(dir, bundles.ToArray(), BuildAssetBundleOptions.None, target);
EditorSettings.spritePackerMode = SpritePackerMode.Disabled;
}
}
emoji所有图片tag都设置为了Emoji
prefab引用了biti和han两张图片
将prefab打为ab时,因为他引用了tag为emoji的图片,所以所有tag为emoji的图片(若图片开启了read/write Enable将不会打入图集)将被打为一个图集并加入到AB包中