Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
    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();
    }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 5
0
        /// <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));
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 9
0
        /// <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));
        }
Exemplo n.º 10
0
    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();
    }