public override bool Pair(string resname, Object res, System.Type type) { if (res == null) { Debuger.LogError("ABLoadScene.Pair " + resname + " " + type.ToString()); return(false); } res.name = resname; if (type == typeof(GameObjectNav)) { nav = (GameObject)res; nav.name = res.name; } else if (type == typeof(GameObject)) { scene = (GameObject)res; scene.name = res.name; } else if (type == typeof(StringPrefab)) { asset = (StringPrefab)res; } else if (type == typeof(LightMapAsset)) { lightmap = (LightMapAsset)res; } return(true); }
public override void Destory() { if (mLoadScene != null) { mLoadScene = null; } if (_ABLoadGoMono != null) { _ABLoadGoMono.Clear(); GameObject.Destroy(_ABLoadGoMono); _ABLoadGoMono = null; } if (_scene != null) { _scene.SetActive(false); GameObject.Destroy(_scene); _scene = null; } _scene = null; if (_nav != null) { _nav.SetActive(false); GameObject.Destroy(_nav); _nav = null; } _nav = null; _asset = null; _lightmap = null; base.Destory(); }
public override void Unload() { base.Unload(); nav = null; lightmap = null; asset = null; scene = null; requestGo = null; requestNav = null; requestAsset = null; requestTexture = null; { foreach (Material e in mMaterialObject.Values) { Material m = (Material)e; m = null; } mMaterialObject.Clear(); } { foreach (AssetBundleRequest e in mAssetBundleRequestObject.Values) { AssetBundleRequest requestTmp = (AssetBundleRequest)e; requestTmp = null; } mAssetBundleRequestObject.Clear(); } { foreach (ABLoad e in mAbLoadObject) { ABLoad abloadTmp = (ABLoad)e; switch (mABDataType) { case ABDataType.Mpq: //((ABLoadMpq)abloadTmp).Unload(); break; case ABDataType.Normal: ((ABLoadFile)abloadTmp).Unload(); break; } } } if (loadAdapter != null) { loadAdapter.Unload(); } }
static void CreateFromPrefab_Win_Revert() { GameObject pref = null; StringPrefab SP = null; foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets)) { string path = AssetDatabase.GetAssetPath(obj); // 加载纹理的配置文件. StringPrefab sp = (StringPrefab)AssetDatabase.LoadAssetAtPath(path, typeof(StringPrefab)); if (sp != null) { SP = sp; continue; } // 对象 if ((obj is GameObject)) { pref = (GameObject)obj; continue; } //foreach (StringPrefabMaterial e in sp.material) //{ // Debug.Log(e.assetbundlePath + " " + e.meshrendererGameObject); //} } GameObject characterClone = (GameObject)Object.Instantiate(pref); characterClone.name = "map_haiwan_001"; foreach (StringPrefabMaterial e in SP.material) { Material m = (Material)AssetDatabase.LoadAssetAtPath(e.assetbundlePath, typeof(Material)); GameObject go = GameObject.Find(e.meshrendererGameObject); MeshRenderer mr = go.GetComponent <MeshRenderer>(); Material[] mat = new Material[1]; mat[0] = m; mr.sharedMaterials = mat; } }
/// <summary> /// 针对传入的硬盘对象,创建一个纹理配置文件asset /// </summary> /// <param name="obj"></param> /// <returns></returns> void DecomposeMaterialAsset(Object obj) { // 输出目录 string folder = AssetDatabase.GetAssetPath(obj); folder = Path.GetDirectoryName(folder); // ArrayList listMatNames = new ArrayList(); Dictionary <string, int> dicListMatNames = new Dictionary <string, int>(); GameObject characterClone = (GameObject)Object.Instantiate(obj); characterClone.name = obj.name; // 搜寻所有的MeshRender. foreach (MeshRenderer ren in characterClone.GetComponentsInChildren <MeshRenderer>()) { { // sharedMaterials if (ren.sharedMaterials != null) { int count = ren.sharedMaterials.Length; for (int i = count - 1; i >= 0; i--) { Material m = (Material)ren.sharedMaterials[i]; if (m == null) { Debug.LogError("Missing " + ren.gameObject.name + " -> Material in " + characterClone.name); } else { //Debug.Log(characterClone.name + "/" + ren.gameObject.name + "/" + m.name); StringPrefabMaterial prefabmat = new StringPrefabMaterial(); // 挂载的对象. prefabmat.meshrendererGameObject = ABTools.GetParentPath(ren.gameObject) + "_" + ren.gameObject.GetInstanceID(); // ren.gameObject.name += "_" + ren.gameObject.GetInstanceID(); // 资源名称. prefabmat.assetname = m.name; // 资源对象. prefabmat.assetbundlePath = GetDepencyPath(m.name, ren.gameObject); // 纹理的AB. prefabmat.assetbundlePath = CreateMaterialAB(prefabmat.assetbundlePath); listMatNames.Add(prefabmat); // Count Times int curcount = -1; if (dicListMatNames.TryGetValue(prefabmat.assetbundlePath, out curcount)) { curcount++; } else { curcount = 1; } dicListMatNames[prefabmat.assetbundlePath] = curcount; } } ren.sharedMaterials = new Material[0]; } } } // 创建一个不带Material的Prefab. string nomaterialscenePath = folder + "/" + obj.name + "_nomaterial.prefab"; Object o = PrefabUtility.CreateEmptyPrefab(nomaterialscenePath); PrefabUtility.ReplacePrefab(characterClone, o); //{ // // // ArrayList listLightmaps = new ArrayList(); // Renderer[] rs = characterClone.GetComponentsInChildren<Renderer>(); // foreach (Renderer r in rs) // { // StringPrefabLightmap slmp = new StringPrefabLightmap(); // slmp.lightmapIndex = r.lightmapIndex; // slmp.lightmapScaleOffset = r.lightmapScaleOffset; // Debug.Log(r.gameObject.name + " " + r.lightmapIndex + " " + r.lightmapScaleOffset); // listLightmaps.Add(slmp); // } //} // 创建配置文件 StringPrefab holder = ScriptableObject.CreateInstance <StringPrefab>(); holder.material = (StringPrefabMaterial[])listMatNames.ToArray(typeof(StringPrefabMaterial)); //holder.lightmap = (StringPrefabLightmap[])listLightmaps.ToArray(typeof(StringPrefabLightmap)); string materialassetPath = folder + "/" + obj.name + "_material.asset"; AssetDatabase.CreateAsset(holder, materialassetPath); // string txtPath = mDestFolder + "/" + obj.name + ".txt"; string content = string.Empty; foreach (KeyValuePair <string, int> e in dicListMatNames) { content += e.Value; content += "\t"; content += e.Key; content += "\r\n"; } File.WriteAllText(txtPath, content); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); GameObject.DestroyImmediate(characterClone); nomaterialscene = (GameObject)AssetDatabase.LoadAssetAtPath(nomaterialscenePath, typeof(GameObject)); materialasset = (StringPrefab)AssetDatabase.LoadAssetAtPath(materialassetPath, typeof(StringPrefab)); }
public override bool Pair(string resname, Object res, System.Type type) { if (res == null) { Debuger.LogError("ABLoadScene.Pair " + resname + " " + type.ToString()); return false; } res.name = resname; if (type == typeof(GameObjectNav)) { nav = (GameObject)res; nav.name = res.name; } else if (type == typeof(GameObject)) { scene = (GameObject)res; scene.name = res.name; } else if (type == typeof(StringPrefab)) { asset = (StringPrefab)res; } else if (type == typeof(Texture2D)) { lightmap = (Texture2D)res; } return true; }
public override void Unload() { base.Unload(); nav = null; lightmap = null; asset = null; scene = null; requestGo = null; requestNav = null; requestAsset = null; requestTexture = null; { foreach (Material e in mMaterialObject.Values) { Material m = (Material)e; m = null; } mMaterialObject.Clear(); } { foreach (AssetBundleRequest e in mAssetBundleRequestObject.Values) { AssetBundleRequest requestTmp = (AssetBundleRequest)e; requestTmp = null; } mAssetBundleRequestObject.Clear(); } { foreach (ABLoad e in mAbLoadObject) { ABLoad abloadTmp = (ABLoad)e; switch (mABDataType) { case ABDataType.Mpq: ((ABLoadMpq)abloadTmp).Unload(); break; case ABDataType.Normal: ((ABLoadFile)abloadTmp).Unload(); break; } } } if (loadAdapter != null) loadAdapter.Unload(); }
static void CreateFromPrefab_Scene(PLATFORM p) { Debug.Log("CreateAssetbundles CreateFromPrefab_Scene"); CreateAssetBundlePath(); ArrayList listMatNames = new ArrayList(); foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets)) { // filters if (!(obj is GameObject)) { continue; } // GameObject characterClone = (GameObject)Object.Instantiate(obj); characterClone.name = obj.name; // 搜寻所有的MeshRender. foreach (MeshRenderer ren in characterClone.GetComponentsInChildren <MeshRenderer>()) { { // sharedMaterials if (ren.sharedMaterials != null) { int count = ren.sharedMaterials.Length; for (int i = count - 1; i >= 0; i--) { Material m = (Material)ren.sharedMaterials[i]; if (m == null) { Debug.LogError("Missing " + obj.name + " -> Material"); } else { //Debug.Log(characterClone.name + "/" + ren.gameObject.name + "/" + m.name); StringPrefabMaterial prefabmat = new StringPrefabMaterial(); // 资源名称. prefabmat.assetname = m.name; // 挂载的对象. prefabmat.meshrendererGameObject = ABTools.GetParentPath(ren.gameObject); // 资源对象. prefabmat.assetbundlePath = GetDepencyPath(m.name); listMatNames.Add(prefabmat); } } ren.sharedMaterials = new Material[0]; } } } // 创建一个不带Material的Prefab. Object o = PrefabUtility.CreateEmptyPrefab(ASSETBUNDLE_PATH + "/" + obj.name + "_nomaterial.prefab"); PrefabUtility.ReplacePrefab(characterClone, o); // 创建配置文件 StringPrefab holder = ScriptableObject.CreateInstance <StringPrefab>(); holder.material = (StringPrefabMaterial[])listMatNames.ToArray(typeof(StringPrefabMaterial)); AssetDatabase.CreateAsset(holder, ASSETBUNDLE_PATH + "/" + obj.name + "_material.asset"); GameObject.DestroyImmediate(characterClone); } }
/// <summary> /// 针对传入的硬盘对象,创建一个纹理配置文件asset /// </summary> /// <param name="obj"></param> /// <returns></returns> void DecomposeMaterialAsset(Object obj) { // 输出目录 string folder = AssetDatabase.GetAssetPath(obj); folder = Path.GetDirectoryName(folder); ArrayList listMatNames = new ArrayList(); Dictionary<string, int> dicListMatNames = new Dictionary<string, int>(); GameObject characterClone = (GameObject)Object.Instantiate(obj); characterClone.name = obj.name; // 搜寻所有的MeshRender. foreach (MeshRenderer ren in characterClone.GetComponentsInChildren<MeshRenderer>()) { { // sharedMaterials if (ren.sharedMaterials != null) { int count = ren.sharedMaterials.Length; for (int i = count - 1; i >= 0; i--) { Material m = (Material)ren.sharedMaterials[i]; if (m == null) Debug.LogError("Missing " + ren.gameObject.name + " -> Material in " + characterClone.name); else { //Debug.Log(characterClone.name + "/" + ren.gameObject.name + "/" + m.name); StringPrefabMaterial prefabmat = new StringPrefabMaterial(); // 挂载的对象. prefabmat.meshrendererGameObject = ABTools.GetParentPath(ren.gameObject) + "_" + ren.gameObject.GetInstanceID(); // ren.gameObject.name += "_" + ren.gameObject.GetInstanceID(); // 资源名称. prefabmat.assetname = m.name; // 资源对象. prefabmat.assetbundlePath = GetDepencyPath(m.name, ren.gameObject); // 纹理的AB. prefabmat.assetbundlePath = CreateMaterialAB(prefabmat.assetbundlePath); listMatNames.Add(prefabmat); // Count Times int curcount = -1; if (dicListMatNames.TryGetValue(prefabmat.assetbundlePath, out curcount)) curcount++; else curcount = 1; dicListMatNames[prefabmat.assetbundlePath] = curcount; } } ren.sharedMaterials = new Material[0]; } } } // 创建一个不带Material的Prefab. string nomaterialscenePath = folder + "/" + obj.name + "_nomaterial.prefab"; Object o = PrefabUtility.CreateEmptyPrefab(nomaterialscenePath); PrefabUtility.ReplacePrefab(characterClone, o); // 创建配置文件 StringPrefab holder = ScriptableObject.CreateInstance<StringPrefab>(); holder.material = (StringPrefabMaterial[])listMatNames.ToArray(typeof(StringPrefabMaterial)); string materialassetPath = folder + "/" + obj.name + "_material.asset"; AssetDatabase.CreateAsset(holder, materialassetPath); // string txtPath = mDestFolder + "/" + obj.name + ".txt"; string content = string.Empty; foreach(KeyValuePair<string, int> e in dicListMatNames) { content += e.Value; content += "\t"; content += e.Key; content += "\r\n"; } File.WriteAllText(txtPath, content); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); GameObject.DestroyImmediate(characterClone); nomaterialscene = (GameObject)AssetDatabase.LoadAssetAtPath(nomaterialscenePath, typeof(GameObject)); materialasset = (StringPrefab)AssetDatabase.LoadAssetAtPath(materialassetPath, typeof(StringPrefab)); }