Commit df15d9b5 authored by SherryChaos's avatar SherryChaos

Tools upload

parent 5cf8664c

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

...@@ -47,7 +47,9 @@ CardGenerated/ ...@@ -47,7 +47,9 @@ CardGenerated/
[Pp]uzzle/ [Pp]uzzle/
[Rr]eplay/ [Rr]eplay/
StandaloneWindows64/ StandaloneWindows64/
Tools/ Tools/YGO Classes/build/android/obj/
Tools/YGO Classes/build/android/libs/
Tools/YGO Classes/windows/build/
TempFolder/ TempFolder/
Assets/Spine/ Assets/Spine/
......
This diff is collapsed.
fileFormatVersion: 2
guid: d1b14872bd9d7d8458e80a973973d367
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using AssetsTools.NET;
using AssetsTools.NET.Extra;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
using YgomSystem.Extension;
public class CDRobber : MonoBehaviour
{
string path = "StreamingAssets/CrossDuel/";
public Text text;
public struct AssetbundleInfo
{
public string path;
public string cab;
public List<string> dependencies;
}
public static List<AssetbundleInfo> files = new List<AssetbundleInfo>();
private void Start()
{
Application.targetFrameRate = 0;
LoadList();
Copy();
}
void Copy()
{
Directory.CreateDirectory(path + "Copy");
foreach(var file in files)
{
if(file.dependencies.Count == 0)
{
File.Copy(path + "CrossDuelAddressables/" + file.path, path + "Copy/" + file.path);
}
}
}
void LoadList()
{
var content = File.ReadAllText(path + "FileList.txt");
var lines = content.Replace("\r", "").Split('\n');
var file = new AssetbundleInfo();
file.path = "";
file.cab = "";
file.dependencies = new List<string>();
foreach (var line in lines)
{
if (!line.StartsWith("-") && !line.StartsWith("*"))
{
if (file.path.Length > 0)
{
files.Add(file);
file = new AssetbundleInfo();
file.path = line;
file.cab = "";
file.dependencies = new List<string>();
}
else
file.path = line;
}
else if (line.StartsWith("-"))
file.cab = line.Replace("-", "");
else if (line.StartsWith("*"))
file.dependencies.Add(line.Replace("*", ""));
}
}
IEnumerator RefreshList()
{
string[] fileInfos = Directory.GetFiles(path);
List<string> fileNames = new List<string>();
foreach (string fileInfo in fileInfos)
fileNames.Add(Path.GetFileName(fileInfo));
var manager = new AssetsManager();
for (int i = 0; i < fileNames.Count; i++)
{
BundleFileInstance bundleInst = manager.LoadBundleFile(fileInfos[i], false);
AssetBundleFile bundle = bundleInst.file;
MemoryStream bundleStream = new MemoryStream();
bundle.Unpack(new AssetsFileWriter(bundleStream));
var info = new AssetbundleInfo();
info.path = fileNames[i];
info.cab = bundle.GetAllFileNames()[0].Replace(".resource", string.Empty).Replace(".resS", "").Replace(".sharedAssets", "");
info.dependencies = GetDependencise(info.path, bundleStream.GetBuffer());
files.Add(info);
text.text = i + "/" + fileNames.Count;
yield return null;
}
var all = "";
foreach (var file in files)
{
all += file.path + "\r\n";
all += "-" + file.cab + "\r\n";
foreach (var depend in file.dependencies)
all += "--" + depend + "\r\n";
}
File.WriteAllText(path + "../FileList.txt", all);
}
List<string> GetDependencise(string name, byte[] bytes)
{
var returnValue = new List<string>();
byte[] nameData = new byte[20]
{
0x2E, 0x62, 0x75, 0x6E, 0x64, 0x6C, 0x65, 0x00, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x63, 0x61, 0x62, 0x2D
};
List<int> point = new List<int>();
for (int i = 0; i < bytes.Length; i++)
{
bool yes = true;
if(i + nameData.Length < bytes.Length)
{
for (int j = 0; j < nameData.Length; j++)
{
if (bytes[i + j] != nameData[j])
{
if(j != 12 && j != 16)
{
yes = false;
break;
}
}
}
if (yes)
{
point.Add(i + 16);
Debug.Log(name + "-" + i);
}
}
}
if(point.Count == 0)
Debug.Log("ûҵ: " + name);
else if(point.Count > 1)
Debug.Log("ҵ: " + name);
else
{
bool still = true;
while (still)
{
var bs = new List<byte>();
for (int i = point[0]; i < point[0] + 36; i++)
bs.Add(bytes[i]);
var ab = bs.ToArray();
returnValue.Add(Encoding.UTF8.GetString(ab));
if (bytes[point[0] + 36] == 0x24 && bytes[point[0] + 37] == 0x0 && bytes[point[0] + 38] == 0x0 && bytes[point[0] + 39] == 0x0)
point[0] += 40;
else
still = false;
}
}
return returnValue;
}
}
fileFormatVersion: 2
guid: 2730c00c8c583e74cba6418fa7c354f5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
#region "License"
/*
A C-program for MT19937, with initialization improved 2002/1/26.
Coded by Takuji Nishimura and Makoto Matsumoto.
Before using, initialize the state by using init_genrand(seed)
or init_by_array(init_key, key_length).
Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
All rights reserved.
Copyright (C) 2005, Mutsuo Saito,
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The names of its contributors may not be used to endorse or promote
products derived from this software without specific prior written
permission.
*/
/*
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Any feedback is very welcome.
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
*/
/*
A C#-program for MT19937, with initialization improved 2006/01/06.
Coded by Mitil.
Copyright (C) 2006, Mitil, All rights reserved.
Any feedback is very welcome.
URL: http://meisui.psk.jp/
email: m-i-t-i-l [at@at] p-s-k . j-p
(remove dash[-], and replace [at@at] --> @)
*/
#endregion
using System;
using System.Security.Cryptography;
namespace Meisui.Random
{
public class MersenneTwister
{
#region "Destructor"
~MersenneTwister()
{
mt = null;
mag01 = null;
}
#endregion
#region "Get Unsigned Int 32bit number"
/* generates a random number on [0,0xffffffff]-Interval */
public uint genrand_Int32()
{
uint y;
if (mti >= N)
{
/* generate N words at one time */
short kk;
if (mti == N + 1) /* if init_genrand() has not been called, */
init_genrand(5489); /* a default initial seed is used */
for (kk = 0; kk < N - M; kk++)
{
y = ((mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK)) >> 1;
mt[kk] = mt[kk + M] ^ mag01[mt[kk + 1] & 1] ^ y;
}
for (; kk < N - 1; kk++)
{
y = ((mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK)) >> 1;
mt[kk] = mt[kk + (M - N)] ^ mag01[mt[kk + 1] & 1] ^ y;
}
y = ((mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK)) >> 1;
mt[N - 1] = mt[M - 1] ^ mag01[mt[0] & 1] ^ y;
mti = 0;
}
y = mt[mti++];
/* Tempering */
y ^= y >> 11;
y ^= (y << 7) & 0x9d2c5680;
y ^= (y << 15) & 0xefc60000;
y ^= y >> 18;
return y;
}
#endregion
#region "Get Int31 number"
/* generates a random number on [0,0x7fffffff]-Interval */
public uint genrand_Int31()
{
return genrand_Int32() >> 1;
}
#endregion
#region "Private Parameter"
/* Period parameters */
private const short N = 624;
private const short M = 397;
private const uint MATRIX_A = 0x9908b0df; /* constant vector a */
private const uint UPPER_MASK = 0x80000000; /* most significant w-r bits */
private const uint LOWER_MASK = 0x7fffffff; /* least significant r bits */
private uint[] mt; /* the array for the state vector */
private ushort mti; /* mti==N+1 means mt[N] is not initialized */
private uint[] mag01;
#endregion
#region "Constructor"
public MersenneTwister(uint s)
{
MT();
init_genrand(s);
}
// coded by Mitil. 2006/01/04
public MersenneTwister()
{
MT();
// auto generate seed for .NET
var seed_key = new uint[6];
var rnseed = new byte[8];
seed_key[0] = (uint) DateTime.Now.Millisecond;
seed_key[1] = (uint) DateTime.Now.Second;
seed_key[2] = (uint) DateTime.Now.DayOfYear;
seed_key[3] = (uint) DateTime.Now.Year;
;
RandomNumberGenerator rn
= new RNGCryptoServiceProvider();
rn.GetNonZeroBytes(rnseed);
seed_key[4] = ((uint) rnseed[0] << 24) | ((uint) rnseed[1] << 16)
| ((uint) rnseed[2] << 8) | rnseed[3];
seed_key[5] = ((uint) rnseed[4] << 24) | ((uint) rnseed[5] << 16)
| ((uint) rnseed[6] << 8) | rnseed[7];
init_by_array(seed_key);
rn = null;
seed_key = null;
rnseed = null;
}
public MersenneTwister(uint[] init_key)
{
MT();
init_by_array(init_key);
}
private void MT()
{
mt = new uint[N];
mag01 = new uint[] {0, MATRIX_A};
/* mag01[x] = x * MATRIX_A for x=0,1 */
mti = N + 1;
}
#endregion
#region "seed init"
/* initializes mt[N] with a seed */
private void init_genrand(uint s)
{
mt[0] = s;
for (mti = 1; mti < N; mti++)
mt[mti] =
1812433253 * (mt[mti - 1] ^ (mt[mti - 1] >> 30)) + mti;
/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
/* In the previous versions, MSBs of the seed affect */
/* only MSBs of the array mt[]. */
/* 2002/01/09 modified by Makoto Matsumoto */
}
/* initialize by an array with array-length */
/* init_key is the array for initializing keys */
/* key_length is its length */
/* slight change for C++, 2004/2/26 */
private void init_by_array(uint[] init_key)
{
uint i, j;
int k;
var key_length = init_key.Length;
init_genrand(19650218);
i = 1;
j = 0;
k = N > key_length ? N : key_length;
for (; k > 0; k--)
{
mt[i] = (mt[i] ^ ((mt[i - 1] ^ (mt[i - 1] >> 30)) * 1664525))
+ init_key[j] + j; /* non linear */
i++;
j++;
if (i >= N)
{
mt[0] = mt[N - 1];
i = 1;
}
if (j >= key_length) j = 0;
}
for (k = N - 1; k > 0; k--)
{
mt[i] = (mt[i] ^ ((mt[i - 1] ^ (mt[i - 1] >> 30)) * 1566083941))
- i; /* non linear */
i++;
if (i >= N)
{
mt[0] = mt[N - 1];
i = 1;
}
}
mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */
}
#endregion
#region "Get type'double' number"
/* generates a random number on [0,1]-real-Interval */
public double genrand_real1()
{
return genrand_Int32() * (1.0 / 4294967295.0);
/* divided by 2^32-1 */
}
/* generates a random number on [0,1)-real-Interval */
public double genrand_real2()
{
return genrand_Int32() * (1.0 / 4294967296.0);
/* divided by 2^32 */
}
/* generates a random number on (0,1)-real-Interval */
public double genrand_real3()
{
return (genrand_Int32() + 0.5) * (1.0 / 4294967296.0);
/* divided by 2^32 */
}
/* generates a random number on [0,1) with 53-bit resolution*/
public double genrand_res53()
{
uint a = genrand_Int32() >> 5, b = genrand_Int32() >> 6;
return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
}
/* These real versions are due to Isaku Wada, 2002/01/09 added */
#endregion
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: fbda979492d36ca4fa56e5885b090e50
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 3c9d16f0ed368d2499724fad2ae5d367
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
artifacts/**
build/**
Documentation/ApiDocs/**
.DS_Store
.npmrc
artifacts/**
build/**
Documentation/ApiDocs/**
.npmrc
.npmignore
.gitignore
QAReport.md
QAReport.md.meta
\ No newline at end of file
fileFormatVersion: 2
guid: 946ae3b25c7026b49b4fc66e969e5475
folderAsset: yes
timeCreated: 1507818222
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
[assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Unity.AssetBundleBrowser.Editor.Tests")]
namespace AssetBundleBrowser
{
public class AssetBundleBrowserMain : EditorWindow, IHasCustomMenu, ISerializationCallbackReceiver
{
private static AssetBundleBrowserMain s_instance = null;
internal static AssetBundleBrowserMain instance
{
get
{
if (s_instance == null)
s_instance = GetWindow<AssetBundleBrowserMain>();
return s_instance;
}
}
internal const float kButtonWidth = 150;
enum Mode
{
Browser,
Builder,
Inspect,
}
[SerializeField]
Mode m_Mode;
[SerializeField]
int m_DataSourceIndex;
[SerializeField]
internal AssetBundleManageTab m_ManageTab;
[SerializeField]
internal AssetBundleBuildTab m_BuildTab;
[SerializeField]
internal AssetBundleInspectTab m_InspectTab;
private Texture2D m_RefreshTexture;
const float k_ToolbarPadding = 15;
const float k_MenubarPadding = 32;
[MenuItem("Window/AssetBundle Browser", priority = 2050)]
static void ShowWindow()
{
s_instance = null;
instance.titleContent = new GUIContent("AssetBundles");
instance.Show();
}
[SerializeField]
internal bool multiDataSource = false;
List<AssetBundleDataSource.ABDataSource> m_DataSourceList = null;
public virtual void AddItemsToMenu(GenericMenu menu)
{
if(menu != null)
menu.AddItem(new GUIContent("Custom Sources"), multiDataSource, FlipDataSource);
}
internal void FlipDataSource()
{
multiDataSource = !multiDataSource;
}
private void OnEnable()
{
Rect subPos = GetSubWindowArea();
if(m_ManageTab == null)
m_ManageTab = new AssetBundleManageTab();
m_ManageTab.OnEnable(subPos, this);
if(m_BuildTab == null)
m_BuildTab = new AssetBundleBuildTab();
m_BuildTab.OnEnable(this);
if (m_InspectTab == null)
m_InspectTab = new AssetBundleInspectTab();
m_InspectTab.OnEnable(subPos);
m_RefreshTexture = EditorGUIUtility.FindTexture("Refresh");
InitDataSources();
}
private void InitDataSources()
{
//determine if we are "multi source" or not...
multiDataSource = false;
m_DataSourceList = new List<AssetBundleDataSource.ABDataSource>();
foreach (var info in AssetBundleDataSource.ABDataSourceProviderUtility.CustomABDataSourceTypes)
{
m_DataSourceList.AddRange(info.GetMethod("CreateDataSources").Invoke(null, null) as List<AssetBundleDataSource.ABDataSource>);
}
if (m_DataSourceList.Count > 1)
{
multiDataSource = true;
if (m_DataSourceIndex >= m_DataSourceList.Count)
m_DataSourceIndex = 0;
AssetBundleModel.Model.DataSource = m_DataSourceList[m_DataSourceIndex];
}
}
private void OnDisable()
{
if (m_BuildTab != null)
m_BuildTab.OnDisable();
if (m_InspectTab != null)
m_InspectTab.OnDisable();
}
public void OnBeforeSerialize()
{
}
public void OnAfterDeserialize()
{
}
private Rect GetSubWindowArea()
{
float padding = k_MenubarPadding;
if (multiDataSource)
padding += k_MenubarPadding * 0.5f;
Rect subPos = new Rect(0, padding, position.width, position.height - padding);
return subPos;
}
private void Update()
{
switch (m_Mode)
{
case Mode.Builder:
break;
case Mode.Inspect:
break;
case Mode.Browser:
default:
m_ManageTab.Update();
break;
}
}
private void OnGUI()
{
ModeToggle();
switch(m_Mode)
{
case Mode.Builder:
m_BuildTab.OnGUI();
break;
case Mode.Inspect:
m_InspectTab.OnGUI(GetSubWindowArea());
break;
case Mode.Browser:
default:
m_ManageTab.OnGUI(GetSubWindowArea());
break;
}
}
void ModeToggle()
{
GUILayout.BeginHorizontal();
GUILayout.Space(k_ToolbarPadding);
bool clicked = false;
switch(m_Mode)
{
case Mode.Browser:
clicked = GUILayout.Button(m_RefreshTexture);
if (clicked)
m_ManageTab.ForceReloadData();
break;
case Mode.Builder:
GUILayout.Space(m_RefreshTexture.width + k_ToolbarPadding);
break;
case Mode.Inspect:
clicked = GUILayout.Button(m_RefreshTexture);
if (clicked)
m_InspectTab.RefreshBundles();
break;
}
float toolbarWidth = position.width - k_ToolbarPadding * 4 - m_RefreshTexture.width;
//string[] labels = new string[2] { "Configure", "Build"};
string[] labels = new string[3] { "Configure", "Build", "Inspect" };
m_Mode = (Mode)GUILayout.Toolbar((int)m_Mode, labels, "LargeButton", GUILayout.Width(toolbarWidth) );
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
if(multiDataSource)
{
//GUILayout.BeginArea(r);
GUILayout.BeginHorizontal();
using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar))
{
GUILayout.Label("Bundle Data Source:");
GUILayout.FlexibleSpace();
var c = new GUIContent(string.Format("{0} ({1})", AssetBundleModel.Model.DataSource.Name, AssetBundleModel.Model.DataSource.ProviderName), "Select Asset Bundle Set");
if (GUILayout.Button(c , EditorStyles.toolbarPopup) )
{
GenericMenu menu = new GenericMenu();
for (int index = 0; index < m_DataSourceList.Count; index++)
{
var ds = m_DataSourceList[index];
if (ds == null)
continue;
if (index > 0)
menu.AddSeparator("");
var counter = index;
menu.AddItem(new GUIContent(string.Format("{0} ({1})", ds.Name, ds.ProviderName)), false,
() =>
{
m_DataSourceIndex = counter;
var thisDataSource = ds;
AssetBundleModel.Model.DataSource = thisDataSource;
m_ManageTab.ForceReloadData();
}
);
}
menu.ShowAsContext();
}
GUILayout.FlexibleSpace();
if (AssetBundleModel.Model.DataSource.IsReadOnly())
{
GUIStyle tbLabel = new GUIStyle(EditorStyles.toolbar);
tbLabel.alignment = TextAnchor.MiddleRight;
GUILayout.Label("Read Only", tbLabel);
}
}
GUILayout.EndHorizontal();
//GUILayout.EndArea();
}
}
}
}
fileFormatVersion: 2
guid: 15478322cbd3d2f4a862552f839978da
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 10d204eff91c2e844b26a7dee989f978
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 37cf1ee934b7c254e92e69eb6f19f186
folderAsset: yes
timeCreated: 1497630438
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
using UnityEditor;
using System;
namespace AssetBundleBrowser.AssetBundleDataSource
{
/// <summary>
/// Build Info struct used by ABDataSource to pass needed build data around.
/// </summary>
public partial class ABBuildInfo
{
/// <summary>
/// Directory to place build result
/// </summary>
public string outputDirectory
{
get { return m_outputDirectory; }
set { m_outputDirectory = value; }
}
private string m_outputDirectory;
/// <summary>
/// Standard asset bundle build options.
/// </summary>
public BuildAssetBundleOptions options
{
get { return m_options; }
set { m_options = value; }
}
private BuildAssetBundleOptions m_options;
/// <summary>
/// Target platform for build.
/// </summary>
public BuildTarget buildTarget
{
get { return m_buildTarget; }
set { m_buildTarget = value; }
}
private BuildTarget m_buildTarget;
/// <summary>
/// Callback for build event.
/// </summary>
public Action<string> onBuild
{
get { return m_onBuild; }
set { m_onBuild = value; }
}
private Action<string> m_onBuild;
}
/// <summary>
/// Interface class used by browser. It is expected to contain all information needed to display predicted bundle layout.
/// Any class deriving from this interface AND imlementing CreateDataSources() will be picked up by the browser automatically
/// and displayed in an in-tool dropdown. By default, that dropdown is hidden if the browser detects no external data sources.
/// To turn it on, right click on tab header "AssetBUndles" and enable "Custom Sources"
///
/// Must implement CreateDataSources() to be picked up by the browser.
/// public static List<ABDataSource> CreateDataSources();
///
/// </summary>
public partial interface ABDataSource
{
//// all derived classes must implement the following interface in order to be picked up by the browser.
//public static List<ABDataSource> CreateDataSources();
/// <summary>
/// Name of DataSource. Displayed in menu as "Name (ProvidorName)"
/// </summary>
string Name { get; }
/// <summary>
/// Name of provider for DataSource. Displayed in menu as "Name (ProvidorName)"
/// </summary>
string ProviderName { get; }
/// <summary>
/// Array of paths in bundle.
/// </summary>
string[] GetAssetPathsFromAssetBundle (string assetBundleName);
/// <summary>
/// Name of bundle explicitly associated with asset at path.
/// </summary>
string GetAssetBundleName(string assetPath);
/// <summary>
/// Name of bundle associated with asset at path.
/// The difference between this and GetAssetBundleName() is for assets unassigned to a bundle, but
/// residing inside a folder that is assigned to a bundle. Those assets will implicilty associate
/// with the bundle associated with the parent folder.
/// </summary>
string GetImplicitAssetBundleName(string assetPath);
/// <summary>
/// Array of asset bundle names in project
/// </summary>
string[] GetAllAssetBundleNames();
/// <summary>
/// If this data source is read only.
/// If this returns true, much of the Browsers's interface will be diabled (drag&drop, etc.)
/// </summary>
bool IsReadOnly();
/// <summary>
/// Sets the asset bundle name (and variant) on a given asset
/// </summary>
void SetAssetBundleNameAndVariant (string assetPath, string bundleName, string variantName);
/// <summary>
/// Clears out any asset bundle names that do not have assets associated with them.
/// </summary>
void RemoveUnusedAssetBundleNames();
/// <summary>
/// Signals if this data source can have build target set by tool
/// </summary>
bool CanSpecifyBuildTarget { get; }
/// <summary>
/// Signals if this data source can have output directory set by tool
/// </summary>
bool CanSpecifyBuildOutputDirectory { get; }
/// <summary>
/// Signals if this data source can have build options set by tool
/// </summary>
bool CanSpecifyBuildOptions { get; }
/// <summary>
/// Executes data source's implementation of asset bundle building.
/// Called by "build" button in build tab of tool.
/// </summary>
bool BuildAssetBundles (ABBuildInfo info);
}
}
fileFormatVersion: 2
guid: 919244bce66418940b1be40b992ffb7c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace AssetBundleBrowser.AssetBundleDataSource
{
internal class ABDataSourceProviderUtility {
private static List<Type> s_customNodes;
internal static List<Type> CustomABDataSourceTypes {
get {
if(s_customNodes == null) {
s_customNodes = BuildCustomABDataSourceList();
}
return s_customNodes;
}
}
private static List<Type> BuildCustomABDataSourceList()
{
var properList = new List<Type>();
properList.Add(null); //empty spot for "default"
var x = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assembly in x)
{
try
{
var list = new List<Type>(
assembly
.GetTypes()
.Where(t => t != typeof(ABDataSource))
.Where(t => typeof(ABDataSource).IsAssignableFrom(t)));
for (int count = 0; count < list.Count; count++)
{
if (list[count].Name == "AssetDatabaseABDataSource")
properList[0] = list[count];
else if (list[count] != null)
properList.Add(list[count]);
}
}
catch (System.Exception)
{
//assembly which raises exception on the GetTypes() call - ignore it
}
}
return properList;
}
}
}
fileFormatVersion: 2
guid: d8b537f111d73db4dac7f6a47a53b8d8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using System;
using UnityEngine;
using UnityEditor;
using UnityEngine.Assertions;
using System.Collections.Generic;
using System.Linq;
using UnityEditor.IMGUI.Controls;
namespace AssetBundleBrowser.AssetBundleDataSource
{
internal class AssetDatabaseABDataSource : ABDataSource
{
public static List<ABDataSource> CreateDataSources()
{
var op = new AssetDatabaseABDataSource();
var retList = new List<ABDataSource>();
retList.Add(op);
return retList;
}
public string Name {
get {
return "Default";
}
}
public string ProviderName {
get {
return "Built-in";
}
}
public string[] GetAssetPathsFromAssetBundle (string assetBundleName) {
return AssetDatabase.GetAssetPathsFromAssetBundle(assetBundleName);
}
public string GetAssetBundleName(string assetPath) {
var importer = AssetImporter.GetAtPath(assetPath);
if (importer == null) {
return string.Empty;
}
var bundleName = importer.assetBundleName;
if (importer.assetBundleVariant.Length > 0) {
bundleName = bundleName + "." + importer.assetBundleVariant;
}
return bundleName;
}
public string GetImplicitAssetBundleName(string assetPath) {
return AssetDatabase.GetImplicitAssetBundleName (assetPath);
}
public string[] GetAllAssetBundleNames() {
return AssetDatabase.GetAllAssetBundleNames ();
}
public bool IsReadOnly() {
return false;
}
public void SetAssetBundleNameAndVariant (string assetPath, string bundleName, string variantName) {
AssetImporter.GetAtPath(assetPath).SetAssetBundleNameAndVariant(bundleName, variantName);
}
public void RemoveUnusedAssetBundleNames() {
AssetDatabase.RemoveUnusedAssetBundleNames ();
}
public bool CanSpecifyBuildTarget {
get { return true; }
}
public bool CanSpecifyBuildOutputDirectory {
get { return true; }
}
public bool CanSpecifyBuildOptions {
get { return true; }
}
public bool BuildAssetBundles (ABBuildInfo info) {
if(info == null)
{
Debug.Log("Error in build");
return false;
}
var buildManifest = BuildPipeline.BuildAssetBundles(info.outputDirectory, info.options, info.buildTarget);
if (buildManifest == null)
{
Debug.Log("Error in build");
return false;
}
foreach(var assetBundleName in buildManifest.GetAllAssetBundles())
{
if (info.onBuild != null)
{
info.onBuild(assetBundleName);
}
}
return true;
}
}
}
fileFormatVersion: 2
guid: 22084e56372f59e47a3fcd9c3b291923
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 4f53b921dc74d344a98b8624b7b95a8b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: b59abcdb3531bd64ab43572babec263e
folderAsset: yes
timeCreated: 1488835755
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 8f45129f30a7a9b4caf06fa3cbb90882
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.Linq;
using UnityEditor.IMGUI.Controls;
namespace AssetBundleBrowser.AssetBundleModel
{
internal sealed class AssetTreeItem : TreeViewItem
{
private AssetInfo m_asset;
internal AssetInfo asset
{
get { return m_asset; }
}
internal AssetTreeItem() : base(-1, -1) { }
internal AssetTreeItem(AssetInfo a) : base(a != null ? a.fullAssetName.GetHashCode() : Random.Range(int.MinValue, int.MaxValue), 0, a != null ? a.displayName : "failed")
{
m_asset = a;
if (a != null)
icon = AssetDatabase.GetCachedIcon(a.fullAssetName) as Texture2D;
}
private Color m_color = new Color(0, 0, 0, 0);
internal Color itemColor
{
get
{
if (m_color.a == 0.0f && m_asset != null)
{
m_color = m_asset.GetColor();
}
return m_color;
}
set { m_color = value; }
}
internal Texture2D MessageIcon()
{
return MessageSystem.GetIcon(HighestMessageLevel());
}
internal MessageType HighestMessageLevel()
{
return m_asset != null ?
m_asset.HighestMessageLevel() : MessageType.Error;
}
internal bool ContainsChild(AssetInfo asset)
{
bool contains = false;
if (children == null)
return contains;
if (asset == null)
return false;
foreach (var child in children)
{
var c = child as AssetTreeItem;
if (c != null && c.asset != null && c.asset.fullAssetName == asset.fullAssetName)
{
contains = true;
break;
}
}
return contains;
}
}
internal class AssetInfo
{
internal bool isScene { get; set; }
internal bool isFolder { get; set; }
internal long fileSize;
private HashSet<string> m_Parents;
private string m_AssetName;
private string m_DisplayName;
private string m_BundleName;
private MessageSystem.MessageState m_AssetMessages = new MessageSystem.MessageState();
internal AssetInfo(string inName, string bundleName="")
{
fullAssetName = inName;
m_BundleName = bundleName;
m_Parents = new HashSet<string>();
isScene = false;
isFolder = false;
}
internal string fullAssetName
{
get { return m_AssetName; }
set
{
m_AssetName = value;
m_DisplayName = System.IO.Path.GetFileNameWithoutExtension(m_AssetName);
//TODO - maybe there's a way to ask the AssetDatabase for this size info.
System.IO.FileInfo fileInfo = new System.IO.FileInfo(m_AssetName);
if (fileInfo.Exists)
fileSize = fileInfo.Length;
else
fileSize = 0;
}
}
internal string displayName
{
get { return m_DisplayName; }
}
internal string bundleName
{ get { return System.String.IsNullOrEmpty(m_BundleName) ? "auto" : m_BundleName; } }
internal Color GetColor()
{
if (System.String.IsNullOrEmpty(m_BundleName))
return Model.k_LightGrey;
else
return Color.white;
}
internal bool IsMessageSet(MessageSystem.MessageFlag flag)
{
return m_AssetMessages.IsSet(flag);
}
internal void SetMessageFlag(MessageSystem.MessageFlag flag, bool on)
{
m_AssetMessages.SetFlag(flag, on);
}
internal MessageType HighestMessageLevel()
{
return m_AssetMessages.HighestMessageLevel();
}
internal IEnumerable<MessageSystem.Message> GetMessages()
{
List<MessageSystem.Message> messages = new List<MessageSystem.Message>();
if(IsMessageSet(MessageSystem.MessageFlag.SceneBundleConflict))
{
var message = displayName + "\n";
if (isScene)
message += "Is a scene that is in a bundle with non-scene assets. Scene bundles must have only one or more scene assets.";
else
message += "Is included in a bundle with a scene. Scene bundles must have only one or more scene assets.";
messages.Add(new MessageSystem.Message(message, MessageType.Error));
}
if(IsMessageSet(MessageSystem.MessageFlag.DependencySceneConflict))
{
var message = displayName + "\n";
message += MessageSystem.GetMessage(MessageSystem.MessageFlag.DependencySceneConflict).message;
messages.Add(new MessageSystem.Message(message, MessageType.Error));
}
if (IsMessageSet(MessageSystem.MessageFlag.AssetsDuplicatedInMultBundles))
{
var bundleNames = AssetBundleModel.Model.CheckDependencyTracker(this);
string message = displayName + "\n" + "Is auto-included in multiple bundles:\n";
foreach(var bundleName in bundleNames)
{
message += bundleName + ", ";
}
message = message.Substring(0, message.Length - 2);//remove trailing comma.
messages.Add(new MessageSystem.Message(message, MessageType.Warning));
}
if (System.String.IsNullOrEmpty(m_BundleName) && m_Parents.Count > 0)
{
//TODO - refine the parent list to only include those in the current asset list
var message = displayName + "\n" + "Is auto included in bundle(s) due to parent(s): \n";
foreach (var parent in m_Parents)
{
message += parent + ", ";
}
message = message.Substring(0, message.Length - 2);//remove trailing comma.
messages.Add(new MessageSystem.Message(message, MessageType.Info));
}
if (m_dependencies != null && m_dependencies.Count > 0)
{
var message = string.Empty;
var sortedDependencies = m_dependencies.OrderBy(d => d.bundleName);
foreach (var dependent in sortedDependencies)
{
if (dependent.bundleName != bundleName)
{
message += dependent.bundleName + " : " + dependent.displayName + "\n";
}
}
if (string.IsNullOrEmpty(message) == false)
{
message = message.Insert(0, displayName + "\n" + "Is dependent on other bundle's asset(s) or auto included asset(s): \n");
message = message.Substring(0, message.Length - 1);//remove trailing line break.
messages.Add(new MessageSystem.Message(message, MessageType.Info));
}
}
messages.Add(new MessageSystem.Message(displayName + "\n" + "Path: " + fullAssetName, MessageType.Info));
return messages;
}
internal void AddParent(string name)
{
m_Parents.Add(name);
}
internal void RemoveParent(string name)
{
m_Parents.Remove(name);
}
internal string GetSizeString()
{
if (fileSize == 0)
return "--";
return EditorUtility.FormatBytes(fileSize);
}
List<AssetInfo> m_dependencies = null;
internal List<AssetInfo> GetDependencies()
{
//TODO - not sure this refreshes enough. need to build tests around that.
if (m_dependencies == null)
{
m_dependencies = new List<AssetInfo>();
if (AssetDatabase.IsValidFolder(m_AssetName))
{
//if we have a folder, its dependencies were already pulled in through alternate means. no need to GatherFoldersAndFiles
//GatherFoldersAndFiles();
}
else
{
foreach (var dep in AssetDatabase.GetDependencies(m_AssetName, true))
{
if (dep != m_AssetName)
{
var asset = Model.CreateAsset(dep, this);
if (asset != null)
m_dependencies.Add(asset);
}
}
}
}
return m_dependencies;
}
}
}
fileFormatVersion: 2
guid: 9f5923f93f7306f4182aecb2dd06ef8d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 0909f7af70db1114abcc90714f37acb2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 54744ac396176e74aaed3c5053b12150
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: a3caba452c4f3a543b831e94871aebc6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 37b2e435499908144b0d282ed2719039
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment