using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Reflection; public class TestAssembly : MonoBehaviour,System.IDisposable { [System.Serializable] public class BundleClass { public string name; public AssetBundle bundle; public BundleClass(){ } public BundleClass(string _name, AssetBundle _bundle){ this.name = _name; this.bundle = _bundle; } } // Use this for initialization private string AllDllBundlePath = "F:\_Project\Test\test\AllDllBundle.unity3d"; private string debugPath = "F:\_Project\Test\test\debuger.unity3d"; private string testFilesPath = "F:\_Project\Test\test\TestFiles.unity3d"; private string testdllPath = "F:\_Project\Test\test\debuger.unity3d"; // public TextAsset textAsset; public List<BundleClass> bundleList; void Start () { if (null == bundleList) { bundleList = new List<BundleClass>(); } // Assembly assembly = Assembly.Load (textAsset.bytes); // print (assembly.GetName()); StartCoroutine (GetDebuger()); StartCoroutine (GetTestFiles()); StartCoroutine(GetAllDllBundlePath()); } IEnumerator GetAllDllBundlePath(){ WWW www = new WWW (string.Format("file://{0}",AllDllBundlePath)); yield return www; if (null != www.error) { print (www.error); } else { bundleList.Add (new BundleClass("AllDllBundle",www.assetBundle)); System.Type testFilesScript = GetTypeFromBundle (www.assetBundle,"TestFiles"); System.Type debugerScript = GetTypeFromBundle (www.assetBundle,"Debuger"); if (null != testFilesScript) { print (testFilesScript.ToString()); this.gameObject.AddComponent (testFilesScript); } if(null != debugerScript){ print(debugerScript.ToString()); } } } System.Type GetTypeFromBundle(AssetBundle bundle,string typeName){ TextAsset textAsset = bundle.LoadAsset(typeName,typeof(TextAsset)) as TextAsset; Assembly assembly = Assembly.Load (textAsset.bytes); print (textAsset.bytes.Length); System.Type script = assembly.GetType (typeName); return script; } IEnumerator GetDebuger(){ WWW www = new WWW (string.Format("file://{0}",debugPath)); yield return www; if (null != www.error) { print (www.error); } else { bundleList.Add (new BundleClass("Debuger",www.assetBundle)); System.Type script = GetTypeFromBundle (www.assetBundle,"Debuger"); if (null != script) { print (script.ToString ()); } } } IEnumerator GetTestFiles(){ WWW www = new WWW (string.Format("file://{0}",testFilesPath)); yield return www; if (null != www.error) { print (www.error); } else { bundleList.Add (new BundleClass("TestFiles",www.assetBundle)); System.Type script = GetTypeFromBundle (www.assetBundle,"TestFiles"); if (null != script) { print (script.ToString()); this.gameObject.AddComponent (script); } } } void Update(){ if(Input.GetKeyDown(KeyCode.A)){ UnBundleAll (true); } if(Input.GetKeyDown(KeyCode.B)){ UnBundleAll (false); } } [ContextMenu("UnBundleAll")] void UnBundleAll(bool bTrue){ foreach (BundleClass bc in bundleList) { print (bc.name); bc.bundle.Unload (bTrue); // bundleList.Remove (bc); } } public void Dispose(){ print ("_______________Dispose"); } }