资源管理

设置资源包名称

using UnityEditor;
using System.IO;

namespace Editor
{
  public static class AssetBundleName
  {
   #region 字段 
    /// <summary>
    /// true:所有的shader打成一个ab
    /// </summary>
   private static bool oneShader = true;
   #endregion
   
   #region 方法
    [MenuItem("Assets/资源/设置资源包名称")]
    private static void SetName()
    {
      Object[] objs = GetFiltered();
      if (objs == null || objs.Length == 0) return;
      string[] depends = GetDepends(objs);
      int len = depends.Length;
      for(int i=0;i<len;i++)
      {
          string path = depends[i];
          Set(path);
      }   
       EditorUtility.UnloadUnusedAssetsImmediate();
       AssetDatabase.RemoveUnusedAssetBundleNames();
       AssetDatabase.Refresh();
    }
    
    /// <summary>
    /// 设置资源包名称
    /// </summary>
    /// <param name="path"></param>
    private static void Set(string path)
    {
          string sfx = Path.GetExtension(path);
          if (!IsValidSfx(sfx)) return;
           string name = Path.GetFileName(path);
           if (name == Suffix.LightingDataName) return;
           AssetImporter ai = AssetImporter.GetAtPath(path);
           if (ai == null) return;
           name = name.ToLower();
           if(sfx==Suffix.Bytes)
           {
               var aName = Path.GetFileNameWithoutExtension(name);
               var aSfx = Path.GetExtension(aName);
               if(aSfx==Suffix.Lua)
               {
                   SetNoABSfx(ai, Suffix.luaName);
               }
               else if(name==Suffix.fileName)
               {
                   SetNoABSfx(ai, Suffix.fileName);
               }
               else
               {
                   SetUnique(ai, name);
               }
           }
           else if(sfx==Suffix.Shader)
           {
               if(oneShader)
               {
                   Set(ai, Suffix.shaderName);
               }
               else
               {
                   SetUnique(ai, name);
               }
           }
           else
           {
               SetUnique(ai, name);
           }
   }
  
   /// <summary>
   /// 设置指定名称
   /// </summary>
   /// <param name="ai"></param>
   /// <param name="name"></param>
   private static void Set(AssetImporter ai,string name)
   {
       if (ai == null) return;
       if(ai.assetBundleName!=name)
       {
           ai.assetBundleName = name;
       }
       if(ai.assetBundleVariant!=Suffix.variant)
       {
           ai.assetBundleVariant = Suffix.variant;
       }
   }
   
   /// <summary>
   /// 获取资源
   /// </summary>
   /// <returns></returns>
   private static Object[] GetFiltered()
   {
       Object[] objs = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
       if(objs==null ||objs.Length==0)
       {
           string tip = "请选择文件夹或者文件";
           EditorUtility.DisplayDialog("", tip, "确定");
       }
       return objs;
   }
   
   /// <summary>
   /// 获取所有依赖的资源
   /// </summary>
   /// <param name="objs"></param>
   /// <returns></returns>
    private static string[] GetDepends(Object[] objs)  
    {
        if (objs == null || objs.Length == 0) return null;
        List<string> paths = new List<string>();  
        int length = objs.Length;
        for(int i=0;i<length;i++)
        {
            Object obj = objs[i];
            if (obj == null) continue;
            string path = AssetDatabase.GetAssetPath(obj);
            if (string.IsNullOrEmpty(path)) continue;
            if (paths.Contains(path)) continue;
            paths.Add(path);
        }
        string[] pathArr = paths.ToArray();
        string[] depends = AssetDatabase.GetDependencies(pathArr);
        return depends;
    }
    
    /// <summary>
    /// 设置指定名称/无AB后缀
    /// </summary>
    /// <param name="ai"></param>
    /// <param name="name"></param>
     private static void SetNoABSfx(AssetImporter ai,string name)
     {
         if (ai == null) return;
         if(ai.assetBundleName!=name)
         {
             ai.assetBundleName = name;
         }
         ai.assetBundleVariant = null;
     }
     
     /// <summary>
    /// 设置唯一名称/和文件名一致(包含后缀名)
    /// </summary>
    /// <param name="ai"></param>
    /// <param name="name"></param>
    private static void SetUnique(AssetImporter ai,string name)
    {
        if(ai.assetBundleName!=name)
         {
             if (CheckUnique(name))
             {
                 ai.assetBundleName = name;
             }
             else
             {
                 string tip = string.Format("导入的文件:{0},和其他文件重名", ai.assetPath);
             }
         }
         if(ai.assetBundleVariant!=Suffix.variant)
         {
             ai.assetBundleVariant = Suffix.variant;
         }
    }

/// <summary>
/// 检查是否唯一名称
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
 private static bool CheckUnique(string name)
 {
    string[] paths = AssetDatabase.GetAssetPathsFromAssetBundle(name);
    if (paths == null || paths.Length < 1) return true;
    return false;
 }

private static bool IsValidSfx(string sfx)
        {
            if (string.IsNullOrEmpty(sfx)) return false;
            if (sfx == Suffix.CS) return false;
            if (sfx == Suffix.Js) return false;
            if (sfx == Suffix.Lua) return false;
            if (sfx == Suffix.Zip) return false;
            if (sfx == Suffix.AB) return false;
            if (sfx == Suffix.Meta) return false;
            if (sfx == Suffix.Manifest) return false;
            if (sfx == Suffix.Psd) return false;
            if (sfx == ".tbl") return false;
            if (sfx == ".dll") return false;
            return true;
        }
#endregion
   }
 }


```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Suffix 
{
  #region 字段
  /// <summary>
  /// 无
  /// </summary>
  public const string None = "none";
  /// <summary>
  /// 场景资源后缀名
  /// </summary>
  public const string Scene = ".unity";
  /// <summary>
  /// Shader后缀名
  /// </summary>
  public const string Shader = ".shader";
  /// <summary>
  /// 图片png格式
  /// </summary>
  public const string Png = ".png";
  /// <summary>
  /// 图片jpg格式
  /// </summary>
  public const string Jpg = ".jpg";
  /// <summary>
  /// 图片tga格式
  /// </summary>
  public const string Tga = ".tga";
  /// <summary>
  /// 图片psd格式
  /// </summary>
  public const string Psd = ".psd";
  /// <summary>
  /// 材质后缀名
  /// </summary>
  public const string Mat = ".mat";
  /// <summary>
  /// 物理材质
  /// </summary>
  public const string PhysicMat = ".physicmaterial";
  /// <summary>
  /// 动画片段后缀名
  /// </summary>
  public const string Animation = ".anim";
  /// <summary>
  /// 动画控制器后缀名
  /// </summary>
  public const string Animator = ".controller";
  /// <summary>
  /// 动画肌肉遮罩
  /// </summary>
  public const string AvatarMask = ".mask";
  /// <summary>
  /// 字体设置后缀
  /// </summary>
  public const string Font = ".fontsetting";
  /// <summary>
  /// OTF字体
  /// </summary>
  public const string OTF = ".otf";
  /// <summary>
  /// TTF字体
  /// </summary>
  public const string TTF = ".ttf";
  /// <summary>
  /// GUI皮肤后缀
  /// </summary>
  public const string GUISkin = ".skin";
  /// <summary>
  /// 3DMax到处的模型后缀名
  /// </summary>
  public const string Fbx = ".fbx";
  /// <summary>
  /// 玛雅到处的模型后缀名
  /// </summary>
  public const string Mb = ".mb";
  /// <summary>
  /// 预制件后缀名
  /// </summary>
  public const string Prefab = ".prefab";
  /// <summary>
  /// 音乐WAV格式后缀名
  /// </summary>
  public const string Wav = ".wav";
  /// <summary>
  /// MP3格式后缀名
  /// </summary>
  public const string Mp3 = ".mp3";
  /// <summary>
  /// Ogg格式后缀名
  /// </summary>
  public const string Ogg = ".ogg"; 
  /// <summary>
  /// 光照贴图后缀名
  /// </summary>
  public const string Exr = ".exr";
  /// <summary>
  /// 通用资源后缀名
  /// </summary>
  public const string Asset = ".asset";
  /// <summary>
  /// AB后缀名
  /// </summary>
  public const string AB = ".ab";
  /// <summary>
  /// CSharp文件后缀名
  /// </summary>
  public const string CS = ".cs";
  /// <summary>
  /// Lua脚本文件后缀名
  /// </summary>
  public const string Lua = ".lua";
  /// <summary>
  /// JavaScript文件后缀名
  /// </summary>
  public const string Js = ".js";
  /// <summary>
  /// 压缩文件后缀名
  /// </summary>
  public const string Zip = ".zip";
  /// <summary>
  /// 元数据文件后缀名
  /// </summary>
  public const string Meta = ".meta";
  /// <summary>
  /// 清单文件后缀名
  /// </summary>
  public const string Manifest = ".manifest";
  /// <summary>
  /// 纯文本文件后缀名
  /// </summary>
  public const string Txt = ".txt";
  /// <summary>
  /// Json文件后缀名
  /// </summary>
  public const string Json = ".json";
  /// <summary>
  /// Xml文件后缀名
  /// </summary>
  public const string Xml = ".xml";
  /// <summary>
  /// 二进制资源
  /// </summary>
  public const string Bytes = ".bytes";
  /// <summary>
  ///  默认的编辑器光照数据资源名称
  /// </summary>
  public const string LightingDataName = "LightingData.asset";
  /// <summary>
  /// shader AB名称
  /// </summary>
  public const string shaderName = "shader";
  /// <summary>
  /// lua AB名称
  /// </summary>
  public const string luaName = "lua.bytes";
  public const string libName = "CSHotfix";
  public const string fileName = "png.bytes";
  /// <summary>
  /// AB 变体后缀名
  /// </summary>
  public static readonly string variant = AB.Replace(".", string.Empty);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值