Assembly测试

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");
	}
}

  

posted on 2016-12-06 10:40  魔天天  阅读(279)  评论(0编辑  收藏  举报