[MenuItem("Assets/Get Content List of Assetbundle")]
static void ListABContent()
{
string strPath = EditorUtility.OpenFilePanel(
"Open AssetBundle...",
Application.dataPath,
"unity3d");
if (System.IO.File.Exists(strPath) == true)
{
WWW fileLoader = new WWW("file://" + strPath);
object[] content = fileLoader.assetBundle.LoadAll();
Debug.Log("total objects =" + content.Length);
for (int i = 0; i < content.Length; ++i)
{
System.Type objType = content[i].GetType();
System.Reflection.PropertyInfo objProperty =
objType.GetProperty("name");
string objName = "<error>";
try
{
objName = (string)objProperty.GetValue(content[i], null);
}
catch
{
}
Debug.Log(
"obj[" + i + "] : type="+objType.Name+", name=" + objName
);
}
fileLoader.assetBundle.Unload(true);
fileLoader.Dispose();
}
else
Debug.LogError("file not found");
}
把程式碼儲存在 C# Script,並置於 Editor 目錄之下,沒問題的話,功能表的 Assets 之下會多出一項 "Get Content List of Assetbundle",點擊之後選擇 Assetbundle 檔案,console 視窗將列出此 assetbundle 之下所有物件的型態 (Type) 及其名稱 (name)。
底下另外註記呼叫成員函數 (invoke method) 的方法:( 假設取得的 object 為 Texture2D,則呼叫其 GetPixels Method 的方法)
System.Reflection.MethodInfo GetPixels_Default =
objType.GetMethod("GetPixels", new System.Type[0]);
System.Reflection.MethodInfo GetPixels_Mipmap =
objType.GetMethod("GetPixels", new System.Type[1] {typeof(int)});
Color[] retPixels;
retPixels =(Color[])GetPixels_Default.Invoke(content[i], null);
retPixels = (Color[])GetPixels_Mipmap.Invoke(content[i], new object[1] { 0 });
0 意見 :
張貼留言