Beispiel #1
0
    private static void LoadSceneConfig()
    {
        string patch           = FullAssetPackagePathRoot + SceneConfigPatch;
        string stSchemeAllText = DeCodeAssetFile(patch);

        if (stSchemeAllText.Equals(string.Empty))
        {
            Debug.LogError("加载场景配置失败!");
            return;
        }

        //去掉\n,因为ScpReader以"\r"分割
        stSchemeAllText = stSchemeAllText.Replace("\n", "");
        //再干掉最后的"\r"
        stSchemeAllText = stSchemeAllText.Remove(stSchemeAllText.Length - 1, 1);
        AssetBundleConfigReader SceneConfigReader = new AssetBundleConfigReader(stSchemeAllText, "SceneConfig", 2);

        // 遍歷整個表并存儲起來
        for (int i = 0; i < SceneConfigReader.GetRecordCount(); ++i)
        {
            ResConfigData cof = new ResConfigData();
            cof.AssetName       = SceneConfigReader.GetString(i, (int)SceneConfig.COL_SCENE_NAME, "");
            cof.AssetGUID       = SceneConfigReader.GetString(i, (int)SceneConfig.COL_GUID, "");
            cof.AssetBundleName = SceneConfigReader.GetString(i, (int)SceneConfig.COL_ASSETBUNDLENAME, "");
            SceneConfigTable.Add(cof.AssetName, cof);
        }

        SceneConfigReader.Dispose();
        SceneConfigReader = null;
    }
Beispiel #2
0
    static void LoadCSVConfig()
    {
        string patch = AssetBundleManager.GetUICSVConfigPatch();

        if (!File.Exists(patch))
        {
            return;
        }
        m_UIConfigTable.Clear();
        //m_UIPackageTable.Clear();
        string stSchemeAllText = DeCodeAssetFile(patch);

        //去掉\n,因为ScpReader以"\r"分割
        stSchemeAllText = stSchemeAllText.Replace("\n", "");
        //再干掉最后的"\r"
        stSchemeAllText = stSchemeAllText.Remove(stSchemeAllText.Length - 1, 1);
        AssetBundleConfigReader UIReader = new AssetBundleConfigReader(stSchemeAllText, "UIConfig", 2);

        // 遍歷整個表并存儲起來
        for (int i = 0; i < UIReader.GetRecordCount(); ++i)
        {
            ResConfigData data = new ResConfigData();
            //int id = UIReader.GetInt(i, (int)UIConfigCol.COL_ID, -1);
            data.AssetBundleName = UIReader.GetString(i, (int)AssetConfigCol.COL_AssetBundleName, string.Empty);
            data.AssetName       = UIReader.GetString(i, (int)AssetConfigCol.COL_AssetName, string.Empty);
            data.AssetGUID       = UIReader.GetString(i, (int)AssetConfigCol.COL_AssetGUID, string.Empty);
            data.AssetSize_X     = UIReader.GetFloat(i, (int)AssetConfigCol.COL_AssetSize_X, -1.0f);
            data.AssetSize_Y     = UIReader.GetFloat(i, (int)AssetConfigCol.COL_AssetSize_Y, -1.0f);
            if (data.AssetName.Equals(string.Empty))
            {
                Debug.LogError("包名为空!");
                continue;
            }
            ////ID与包名对应表
            //if (!m_UIPackageTable.ContainsKey(id))
            //{
            //    m_UIPackageTable.Add(id, data.AssetBundleName);
            //}

            //包名已经存在了
            if (m_UIConfigTable.ContainsKey(data.AssetBundleName))
            {
                Dictionary <string, ResConfigData> ta = m_UIConfigTable[data.AssetBundleName];
                if (ta.ContainsKey(data.AssetName))
                {
                    Debug.LogError("重复的资源名:" + data.AssetName + ",包:" + data.AssetBundleName);
                    continue;
                }
                ta.Add(data.AssetName, data);
            }
            else
            {
                Dictionary <string, ResConfigData> ta = new Dictionary <string, ResConfigData>();
                ta.Add(data.AssetName, data);
                m_UIConfigTable.Add(data.AssetBundleName, ta);
            }
        }
        UIReader.Dispose();
        UIReader = null;
    }
Beispiel #3
0
    private static void LoadDependenciesResConfig(Dictionary <string, ResConfigData> Result = null)
    {
        string patch = AssetBundleManager.GetDependenicesResConfigPath();

        if (!File.Exists(patch))
        {
            if (Application.isPlaying)
            {
                Debug.LogError("找不到预制体资源表!!!-" + patch);
            }
            return;
        }

        string stSchemeAllText = DeCodeAssetFile(patch);

        if (stSchemeAllText.Equals(string.Empty))
        {
            return;
        }

        if (null == Result)
        {
            Result = m_DependenciesResConfigTable;
        }

        ////去掉\n,因为ScpReader以"\r"分割
        //stSchemeAllText = stSchemeAllText.Replace("\n", "");
        ////再干掉最后的"\r"
        //stSchemeAllText = stSchemeAllText.Remove(stSchemeAllText.Length - 1, 1);
        AssetBundleConfigReader ResReader = new AssetBundleConfigReader(stSchemeAllText, "DependenicesResConfig", 0);

        for (int i = 0; i < ResReader.GetRecordCount(); ++i)
        {
            ResConfigData depconf = new ResConfigData();
            depconf.AssetBundleName = StringHelper.CopyString(ResReader.GetString(i, (int)AssetConfigCol.COL_AssetBundleName, string.Empty));
            depconf.AssetName       = StringHelper.CopyString(ResReader.GetString(i, (int)AssetConfigCol.COL_AssetName, string.Empty));
            depconf.AssetGUID       = StringHelper.CopyString(ResReader.GetString(i, (int)AssetConfigCol.COL_AssetGUID, string.Empty));
            depconf.AssetSize_X     = ResReader.GetFloat(i, (int)AssetConfigCol.COL_AssetSize_X, -1.0f);
            depconf.AssetSize_Y     = ResReader.GetFloat(i, (int)AssetConfigCol.COL_AssetSize_Y, -1.0f);
            if (m_DependenciesResConfigTable.ContainsKey(depconf.AssetGUID))
            {
                Debug.LogWarning(StringHelper.BuildString("依赖资源表有重复的配置:", depconf.AssetGUID, depconf.AssetName, depconf.AssetBundleName));
                continue;
            }
            else
            {
                m_DependenciesResConfigTable.Add(StringHelper.CopyString(depconf.AssetGUID), depconf);
            }
        }

        ResReader.Dispose();
        ResReader = null;
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="path"></param>
    /// <param name="ResResult">为空,则加载到自身的表里</param>
    /// <param name="OtherResult">为空,则加载到自身的表里</param>
    public static void LoadPackageList(string path, Dictionary <string, PackageNode> ResResult = null,
                                       Dictionary <string, PackageNode> OtherResult            = null)
    {
        if (!File.Exists(path))
        {
            return;
        }
        string stSchemeAllText = DeCodeAssetFile(path);

        if (stSchemeAllText.Equals(string.Empty))
        {
            return;
        }
        if (null == ResResult)
        {
            ResResult = m_RespackageTable;
        }
        if (null == OtherResult)
        {
            OtherResult = m_OtherpackageTable;
        }

        //去掉\n,因为ScpReader以"\r"分割
        stSchemeAllText = stSchemeAllText.Replace("\n", "");
        //再干掉最后的"\r"
        stSchemeAllText = stSchemeAllText.Remove(stSchemeAllText.Length - 1, 0);
        AssetBundleConfigReader packageReader = new AssetBundleConfigReader(stSchemeAllText, "packageList", 0);

        int currentIndex = 0;

        string lowerArtistCommonPatch = ArtistCommonPatch.ToLower();

        #region Res
        //先读取资源的
        for (int i = currentIndex; i < packageReader.GetRecordCount(); ++i)
        {
            string SplitKey = packageReader.GetString(i, 0, string.Empty);
            if (SplitKey.Contains(SplitCSVKey))
            {
                currentIndex = i + 1;
                break;
            }
            PackageNode data = new PackageNode();
            data.md5 = packageReader.GetString(i, (int)PackageNodeCol.COL_MD5, string.Empty);
            data.assetBundlePatch = packageReader.GetString(i, (int)PackageNodeCol.COL_AB_NAME, string.Empty);
            data.fileSize         = packageReader.GetFloat(i, (int)PackageNodeCol.COL_FILESIZE, 0);
            string fullpath = FullAssetPackagePathRoot + data.assetBundlePatch;
            if (!File.Exists(fullpath))
            {
                continue;
            }
            if (!ResResult.ContainsKey(data.assetBundlePatch))
            {
                ResResult.Add(data.assetBundlePatch, data);
                InsertUnionDependenicesAssetBundle(data.assetBundlePatch);
                if (data.assetBundlePatch.Contains(lowerArtistCommonPatch))
                {
                    ArtistCommonAssetBundleNames.Add(data.assetBundlePatch);
                }
                else if (data.assetBundlePatch.Contains(FontAssetBundlePatch))
                {
                    FontAssetBundleNames.Add(data.assetBundlePatch);
                }

                if (data.assetBundlePatch.EndsWith(UIVariant))
                {
                    m_UIAssetBundleTable.Add(data.assetBundlePatch);
                }

                if (data.assetBundlePatch.EndsWith(ShaderAssetVariant))
                {
                    if (data.assetBundlePatch.Contains(FirstLoadPatchKey))
                    {
                        m_FirstLoadAssetBundlePath.Add(data.assetBundlePatch);
                    }
                    else
                    {
                        m_NormalShaderAssetBundlePath.Add(data.assetBundlePatch);
                    }
                }
            }
            else
            {
                Debug.LogWarning("资源列表里有重复的文件:" + data.assetBundlePatch);
            }
        }
        #endregion

        #region Other

        //先读取资源的
        for (int i = currentIndex; i < packageReader.GetRecordCount(); ++i)
        {
            string SplitKey = packageReader.GetString(i, 0, string.Empty);
            if (SplitKey.Contains(SplitCSVKey))
            {
                currentIndex = i + 1;
                break;
            }
            PackageNode data = new PackageNode();
            data.md5 = packageReader.GetString(i, (int)PackageNodeCol.COL_MD5, string.Empty);
            data.assetBundlePatch = packageReader.GetString(i, (int)PackageNodeCol.COL_AB_NAME, string.Empty);
            data.fileSize         = packageReader.GetFloat(i, (int)PackageNodeCol.COL_FILESIZE, 0);
            if (!OtherResult.ContainsKey(data.assetBundlePatch))
            {
                OtherResult.Add(data.assetBundlePatch, data);
            }
            else
            {
                Debug.LogWarning("资源列表里有重复的文件:" + data.assetBundlePatch);
            }
        }

        #endregion
    }
Beispiel #5
0
    /// <summary>
    /// 加载预制体配置
    /// </summary>
    private static void LoadPrefabSelfConfig(Dictionary <string, Dictionary <string, UnionResConfigData> > result = null,
                                             Dictionary <string, PrefabDependenicesResConfigData> depedenceResult = null)
    {
        string patch = AssetBundleManager.GetPrefabConfigPath();

        if (!File.Exists(patch))
        {
            if (Application.isPlaying)
            {
                Debug.LogError("找不到预制体配置!!!-" + patch);
            }
            return;
        }
        string stSchemeAllText = DeCodeAssetFile(patch);

        if (stSchemeAllText.Equals(string.Empty))
        {
            return;
        }

        if (result == null || depedenceResult == null)
        {
            result          = m_PrefabConfigTable;
            depedenceResult = m_PrefabDependenciesConfigTable;
        }

        ////去掉\n,因为ScpReader以"\r"分割
        //stSchemeAllText = stSchemeAllText.Replace("\n", "");
        ////再干掉最后的"\r"
        //stSchemeAllText = stSchemeAllText.Remove(stSchemeAllText.Length - 1, 1);

        AssetBundleConfigReader PrefabReader = new AssetBundleConfigReader(stSchemeAllText, "PrefabConfig", 0);


        bool isNeedLoadDependenices          = false; //是否需要加载依赖配置
        UnionResConfigData currLoadingPrefab = null;  //当前正在加载的Prefab
        int texcount        = 0;                      //贴图数目
        int fbxcount        = 0;                      //fbx数目
        int clipcount       = 0;                      //clip数目
        int controllercount = 0;                      //animatorcontroller数目
        int shadercount     = 0;                      //shader数目
        int materialcount   = 0;                      //材质球数目

        string lowerPrefabCommonPatch = PrefabCommonPatch.ToLower();

        for (int i = 0; i < PrefabReader.GetRecordCount(); ++i)
        {
            isNeedLoadDependenices = !(texcount == 0 && fbxcount == 0 &&
                                       clipcount == 0 && controllercount == 0 &&
                                       shadercount == 0 && materialcount == 0);
            if (!isNeedLoadDependenices)
            {
                UnionResConfigData prefabConfig = new UnionResConfigData();
                prefabConfig.AssetBundleName = PrefabReader.GetString(i, (int)PrefabConfigCol.COL_AssetBundleName, string.Empty);
                prefabConfig.AssetName       = PrefabReader.GetString(i, (int)PrefabConfigCol.COL_AssetName, string.Empty);
                prefabConfig.AssetGUID       = PrefabReader.GetString(i, (int)PrefabConfigCol.COL_AssetGUID, string.Empty);
                prefabConfig.unionIndx       = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_UnionIndex, -1);
                prefabConfig.startIndex      = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_StartIndex, -1);
                prefabConfig.dataLength      = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_DataLength, -1);


                if (!prefabConfig.AssetBundleName.EndsWith(PrefabVariant))
                {
                    Debug.LogWarning("预制体配置中有冗余的配置:" + prefabConfig.AssetBundleName + ",名字:" + prefabConfig.AssetName + ",重新生成资源可解决此问题 -- not gameobject");
                    continue;
                }

                texcount        = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_TextureCount, 0);
                fbxcount        = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_FBXCount, 0);
                clipcount       = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_ClipCount, 0);
                controllercount = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_ControllerCount, 0);
                shadercount     = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_ShaderCount, 0);
                materialcount   = PrefabReader.GetInt(i, (int)PrefabConfigCol.COL_MaterialCount, 0);

                isNeedLoadDependenices = !(texcount == 0 && fbxcount == 0 &&
                                           clipcount == 0 && controllercount == 0 &&
                                           shadercount == 0 && materialcount == 0);

                if (Application.isPlaying)
                {
                    if (isOnRunTimeMode)
                    {
                        if (prefabConfig.unionIndx < 0 || prefabConfig.startIndex < 0 || prefabConfig.dataLength <= 0)
                        {
                            Debug.LogWarning("无效的预制体配置中有冗余的配置:" + prefabConfig.AssetBundleName + ",名字:" + prefabConfig.AssetName + ",重新生成资源可解决此问题--uniondex < 0");
                            i                     += texcount;
                            i                     += fbxcount;
                            i                     += clipcount;
                            i                     += controllercount;
                            i                     += shadercount;
                            i                     += materialcount;
                            texcount               = 0;
                            fbxcount               = 0;
                            clipcount              = 0;
                            controllercount        = 0;
                            shadercount            = 0;
                            materialcount          = 0;
                            isNeedLoadDependenices = false;
                            currLoadingPrefab      = null;
                            continue;
                        }
                    }
                }

                currLoadingPrefab = prefabConfig;
                int InstanceID = GUIDToInstanceID(prefabConfig.AssetGUID);
                if (m_PrefabGUIDConfigTable.ContainsKey(InstanceID))
                {
                    Debug.LogWarning("重复的预制体配置,GUID:" + prefabConfig.AssetGUID +
                                     "资源名:" + prefabConfig.AssetName);
                    i                     += texcount;
                    i                     += fbxcount;
                    i                     += clipcount;
                    i                     += controllercount;
                    i                     += shadercount;
                    i                     += materialcount;
                    texcount               = 0;
                    fbxcount               = 0;
                    clipcount              = 0;
                    controllercount        = 0;
                    shadercount            = 0;
                    materialcount          = 0;
                    isNeedLoadDependenices = false;
                    currLoadingPrefab      = null;
                    continue;
                }
                else
                {
                    m_PrefabGUIDConfigTable.Add(InstanceID, prefabConfig);
                }

                //把预制体资源先加载进去
                Dictionary <string, UnionResConfigData> assetTable = null;
                if (result.TryGetValue(prefabConfig.AssetBundleName, out assetTable))
                {
                    if (assetTable.ContainsKey(prefabConfig.AssetName))
                    {
                        Debug.LogWarning("预制体:" + prefabConfig.AssetBundleName + "有重复的依赖资源:" + prefabConfig.AssetName);
                        continue;
                    }
                    assetTable.Add(prefabConfig.AssetName, prefabConfig);
                }
                else
                {
                    assetTable = new Dictionary <string, UnionResConfigData>();
                    assetTable.Add(prefabConfig.AssetName, prefabConfig);
                    result.Add(prefabConfig.AssetBundleName, assetTable);

                    //通用预制体
                    if (prefabConfig.AssetBundleName.Contains(lowerPrefabCommonPatch))
                    {
                        PrefabCommonAssetBundleNames.Add(prefabConfig.AssetBundleName);
                    }
                }
                //直接destroy GameObject类型的资源

                //没有依赖的,给一个空配置即可
                if (!isNeedLoadDependenices)
                {
                    depedenceResult.Add(currLoadingPrefab.AssetGUID, new PrefabDependenicesResConfigData());
                }
                continue;
            }

            /*开始加载配置依赖表*/



            //1.先创建类
            PrefabDependenicesResConfigData dependenicesConfig = null;
            if (!depedenceResult.TryGetValue(currLoadingPrefab.AssetGUID, out dependenicesConfig))
            {
                dependenicesConfig = new PrefabDependenicesResConfigData();
                depedenceResult.Add(currLoadingPrefab.AssetGUID, dependenicesConfig);
            }

            //先是贴图
            if (texcount > 0)
            {
                texcount--;
                string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty));
                PushPrefabUnionRes(guid, dependenicesConfig.TextureResConfigDatas);
                continue;
            }

            //再加载FBX
            if (fbxcount > 0)
            {
                fbxcount--;
                string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty));
                PushPrefabUnionRes(guid, dependenicesConfig.FBXResConfigDatas);
                continue;
            }

            //再加载clip
            if (clipcount > 0)
            {
                clipcount--;
                string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty));
                PushPrefabUnionRes(guid, dependenicesConfig.AnimatonClipResConfigDatas);

                continue;
            }

            //再加载controller
            if (controllercount > 0)
            {
                controllercount--;
                string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty));
                PushPrefabUnionRes(guid, dependenicesConfig.AnimatorControllerResConfigDatas);

                continue;
            }

            //再加载shader
            if (shadercount > 0)
            {
                shadercount--;
                string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty));
                PushPrefabUnionRes(guid, dependenicesConfig.ShaderResConfigDatas);
                continue;
            }

            //再加载material
            if (materialcount > 0)
            {
                materialcount--;
                string guid = StringHelper.CopyString(PrefabReader.GetString(i, 0, string.Empty));

                PushPrefabUnionRes(guid, dependenicesConfig.MaterialResConfigDatas);
                continue;
            }
        }

        PrefabReader.Dispose();
        PrefabReader = null;
    }