批量修改指定路径下的资源的AssetBundleName与Variant。

脚本代码如下:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
/// <summary>
/// AlterAssetBundle类为修改批量修改AssetBundle的Name与Variant的编辑器窗口
/// </summary>
public class AlterAssetBundle : EditorWindow
{ [MenuItem("AssetsManager/批量修改AssetBundle")]
static void AddWindow()
{
//创建窗口
AlterAssetBundle window = (AlterAssetBundle)EditorWindow.GetWindow(typeof(AlterAssetBundle), false, "批量修改AssetBundle");
window.Show(); } //输入文字的内容
private string Path = "Assets/Resources/", AssetBundleName="", Variant="";
private bool IsThisName = true; void OnGUI()
{
GUIStyle text_style = new GUIStyle();
text_style.fontSize = ;
text_style.alignment = TextAnchor.MiddleCenter; EditorGUILayout.BeginHorizontal();
GUILayout.Label("默认使用源文件名", GUILayout.MinWidth());
IsThisName = EditorGUILayout.Toggle(IsThisName);
EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal();
GUILayout.Label("AssetBundleName:", GUILayout.MinWidth());
if(IsThisName)
GUILayout.Label("源文件名.unity3d", GUILayout.MinWidth());
else
AssetBundleName = EditorGUILayout.TextField(AssetBundleName.ToLower());
EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal();
GUILayout.Label("Variant:", GUILayout.MinWidth());
Variant = EditorGUILayout.TextField(Variant.ToLower());
EditorGUILayout.EndHorizontal(); GUILayout.Label("\n"); EditorGUILayout.BeginHorizontal();
GUILayout.Label("文件夹路径", GUILayout.MinWidth());
if (GUILayout.Button("浏览", GUILayout.MinWidth())) { OpenFolder(); }
Path = EditorGUILayout.TextField(Path);
EditorGUILayout.EndHorizontal();
if (GUILayout.Button("修改该文件夹下的AssetName及Variant")) { SetSettings(); }
if (GUILayout.Button("清除所有未被引用的AssetName及Variant")) {
AssetDatabase.RemoveUnusedAssetBundleNames();
}
if (GUILayout.Button("清空所有AssetName及Variant"))
{
ClearAssetBundlesName();
}
}
/// <summary>
/// 此函数用来打开文件夹修改路径
/// </summary>
void OpenFolder()
{
string m_path = EditorUtility.OpenFolderPanel("选择文件夹", "", "");
if (!m_path.Contains(Application.dataPath))
{
Debug.LogError("路径应在当前工程目录下");
return;
}
if (m_path.Length != )
{
int firstindex = m_path.IndexOf("Assets");
Path = m_path.Substring(firstindex) + "/";
EditorUtility.FocusProjectWindow();
}
}
/// <summary>
/// 此函数用来修改AssetBundleName与Variant
/// </summary>
void SetSettings()
{
if (Directory.Exists(Path))
{
DirectoryInfo direction = new DirectoryInfo(Path);
FileInfo[] files = direction.GetFiles("*", SearchOption.AllDirectories); for (int i = ; i < files.Length; i++)
{
if (files[i].Name.EndsWith(".meta"))
{
continue;
}
AssetImporter ai = AssetImporter.GetAtPath(files[i].FullName.Substring(files[i].FullName.IndexOf("Assets")));
if(IsThisName)
ai.SetAssetBundleNameAndVariant(files[i].Name.Replace(".","_")+".unity3d", Variant);
else
ai.SetAssetBundleNameAndVariant(AssetBundleName, Variant);
}
AssetDatabase.Refresh();
}
} /// <summary>
/// 清除之前设置过的AssetBundleName,避免产生不必要的资源也打包
/// 工程中只要设置了AssetBundleName的,都会进行打包
/// </summary>
static void ClearAssetBundlesName()
{
int length = AssetDatabase.GetAllAssetBundleNames().Length;
string[] oldAssetBundleNames = new string[length];
for (int i = ; i < length; i++)
{
oldAssetBundleNames[i] = AssetDatabase.GetAllAssetBundleNames()[i];
} for (int j = ; j < oldAssetBundleNames.Length; j++)
{
AssetDatabase.RemoveAssetBundleName(oldAssetBundleNames[j], true);
}
}
void OnInspectorUpdate()
{
this.Repaint();//窗口的重绘
}
}

AlterAssetBundle

unity批量修改AssetBundleName与Variant的更多相关文章

  1. [Unity工具]批量修改字体

    效果图: using System.IO; using System.Text; using UnityEditor; using UnityEngine; using UnityEngine.UI; ...

  2. Unity3D Editor模式下批量修改prefab

    最经遇到一个需要批量修改已经做好的prefab的问题,查了一些资料最终实现了但是还是不够完美,通过学习也发现unity的编辑器功能还是非常强大的.废话不多说直接上代码: [ExecuteInEditM ...

  3. Excel VBA批量修改文件夹下的文件名

    今天,有同事提出想批量修改文件名,规则比较简单,在第五位后加“-”即可, 上网没找到相关工具,就自己做了个excel,用宏代码修改. 代码如下: Private Sub CommandButton1_ ...

  4. mac linux rename命令行批量修改文件名

    我的mac使用命令行批量修改名字时发现居然没有rename的指令: zsh: command not found: rename 所以使用HomeBrew先安装一下: ➜ ~ brew install ...

  5. MYSQL批量修改表前缀与表名sql语句

    修改表名 ALTER TABLE 原表名 RENAME TO 新表名; 一句SQL语句只能修改一张表 show tables; 1. SELECT CONCAT( 'ALTER TABLE ', ta ...

  6. 使用powershell批量修改文本为utf8

    根据上一篇powershell生成pro的方法,增加一个批量修改文本文件为utf8格式的方法 $incPath = dir -filter "*.c" -Recurse $temp ...

  7. nodejs 批量修改、删除

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAQhCAIAAABDaAVHAAAgAElEQVR4nOydeXxU5aH359733vd9b/ ...

  8. iOS --- DIY文件名批量修改

    批量修改文件名: // 1.创建文件管理 NSFileManager *filemanager =[NSFileManager defaultManager]; // 2. 获得所有文件夹路径 NSS ...

  9. ansible非root用户批量修改root密码

    前言: 由于线上服务器密码长久没有更新,现领导要求批量更换密码.线上的之前部署过salt,但由于各种因素没有正常使用. 使用自动化工具批量修改的计划搁浅了,后来领导给了个python多线程修改密码脚本 ...

随机推荐

  1. 在SQL Server中查看对象依赖关系

    原文 在SQL Server中查看对象依赖关系 Viewing object dependencies in SQL Server   Deleting or changing objects may ...

  2. ini配置文件在LINUX下面程序打不开?

    ini配置文件在LINUX下面程序打不开? 在WINDOWS里面编辑的INI配置文件保存时默认是ANSI字符编码,LINUX可能不识别,导致LINUX程序不能打开INI配置文件,成功读取里面的参数. ...

  3. IdHTTPServer(indy10)开发REST中间件

    IdHTTPServer(indy10)开发REST中间件 浏览器通过“get”方式查询数据URL样例:http://127.0.0.1:7777/query?sql=select * from t1 ...

  4. ASIHTTPRequest框架使用总结系列之阿堂教程2(同步请求)

    从本篇开始,阿堂结合一些具体代码来说明.在ASIHTTPRequest框架中,与http请求相关的类有ASIHTTPRequest  和 ASIFormDataRequest,其中最常用的是 ASIH ...

  5. 为什么我不使用Kubernetes的Ingress

    为什么我不使用Kubernetes的Ingress 很不幸,据我所知Kubernetes的文档不是很完美,这就是为什么有很多同学在使用它的时候会遇到很多的坑,Ingress这个组件就是这些坑中的一个. ...

  6. 设计模式之工厂模式之简单工厂(php实现)

    github源码地址: git@github.com:ZQCard/design_pattern.git 1.简单工厂模式 特点:将调用者与创建者分离,调用者直接向工厂请求,减少代码的耦合.提高系统的 ...

  7. INTZ DX format

    http://aras-p.info/texts/D3D9GPUHacks.html 格式 用法 资源 描述 NVIDIA GeForce AMD Radeon 英特尔 阴影映射 D3DFMT_D16 ...

  8. MySQL MID()函数用法

    SQL MID() 函数用于得到一个字符串的一部分.这个函数被MySQL支持,但不被MS SQL Server和Oracle支持.在SQL Server, Oracle 数据库中,我们可以使用 SQL ...

  9. 【重点突破】—— 百度地图在React单页面应用中的使用

    前言:百度地图是网页中使用地图的常用第三方工具,这里结合React项目中学到的应用场景总结一些使用要点. 一.在网页中嵌入百度地图 搜百度地图开放平台,注册百度开发者账号 控制台:查看应用.创建应用( ...

  10. (总结)Linux下的暴力密码在线破解工具Hydra详解

    (总结)Linux下的暴力密码在线破解工具Hydra详解 学习了:https://blog.csdn.net/yafeichang/article/details/53502869