说明
temp = temp.Substring(temp.IndexOf("Assets"));
这段代码主要是获取的文件路径为完整路径,而AssetImporter.GetAtPath(fl);
所需要的路径不需要完整路径,只需要Asset下的路径即可,所以这里需要截取路径
完整代码
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
public class SetGoAssertBundleName : EditorWindow {
//文件夹名字
string DictorName = "";
//ab包名字
string abName = "sound";
//后缀名
string VariantName = "unity3d";
List<string> files = new List<string>();
//打开窗口
[MenuItem("Tools/SetAssertBundleName")]
public static void GetWidow()
{
EditorWindow.GetWindow<SetGoAssertBundleName>(false, "批量设置AB包名字", true);
}
private void OnGUI()
{
EditorGUILayout.LabelField("批量修改AB包名");
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("选择文件夹");
//得到文件夹下的名字
if(GUILayout.Button("选择文件夹"))
{
string temp = EditorUtility.OpenFolderPanel("选择文件夹", Application.dataPath,"");
if (!string.IsNullOrEmpty(temp))
{
temp = temp.Substring(temp.IndexOf("Assets"));
DictorName = temp;
}
}
//输入包名
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("输入包名");
abName = EditorGUILayout.TextField(abName);
EditorGUILayout.EndHorizontal();
//输入后缀名
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("输入后缀名");
VariantName = EditorGUILayout.TextField(VariantName);
EditorGUILayout.EndHorizontal();
if (GUILayout.Button("设置ab包名"))
{
if (string.IsNullOrEmpty(DictorName)) return;
GetAllFiles(files, DictorName);
foreach (string fl in files)
{
Debug.Log(fl);
var import = AssetImporter.GetAtPath(fl);
if (import != null)
{
import.assetBundleName = abName;
import.assetBundleVariant= VariantName;
}
else
Debug.Log("import=null");
}
}
}
//获取文件夹下所有的文件 .meta文件除外
static void GetAllFiles(List<string> files, string dir)
{
string[] fls = Directory.GetFiles(dir);
foreach (string fl in fls)
{
string extension = Path.GetExtension(fl);
if (extension != ".meta")
{
files.Add(fl);
}
}
string[] subDirs = Directory.GetDirectories(dir);
foreach (string subDir in subDirs)
{
GetAllFiles(files, subDir);
}
}
}