Ejemplo n.º 1
0
        public void CopyResToStreammingAssets()
        {
            FileUtil.DeleteFileOrDirectory("Assets/StreamingAssets/res");
            AssetDatabase.Refresh();
            FileHelper.CreateDirectory("Assets/StreamingAssets/res");
            m_res_config.TraverseAssets(
                _info => {
                String dest = String.Concat("Assets/StreamingAssets/res/", _info.Name);
                FileHelper.CreateDirectoryByFilePath(dest);
                File.Copy(String.Concat(OUTPUT_ROOT, "/", _info.Version.ToString(), "/", _info.Name), dest, true);
            });

            File.Copy(String.Concat(OUTPUT_ROOT, "/res_config.grt"), "Assets/StreamingAssets/res/res_config.grt", true);

            AssetDatabase.Refresh();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 初始化资源管理器
        /// </summary>
        /// <param name="_updateByAppConfig">是否使用app内config更新列表,在更新完成之后重新初始化时不需要更新</param>
        /// <returns></returns>
        public Boolean Initialize(Boolean _updateByAppConfig)
        {
            String appResConfigPath        = String.Concat(Application.streamingAssetsPath, "/res/res_config.grt");
            var    assetbundleAppResConfig = AssetBundle.LoadFromFile(appResConfigPath);

            if (assetbundleAppResConfig == null)
            {
                Log.Critical("[ResourceManager.Initialize]:读取inapp res config 失败! assetbundle 加载失败!");
                return(false);
            }

            var appResConfigBytes = assetbundleAppResConfig.LoadAsset <TextAsset>("res_config");

            if (appResConfigBytes == null)
            {
                Log.Critical("[ResourceManager.Initialize]:读取inapp res config 失败! TextAsset加载失败");
                assetbundleAppResConfig.Unload(true);
                return(false);
            }
            var appResConfig = ResConfigFile.Create(appResConfigBytes.bytes);

            if (appResConfig == null)
            {
                Log.Critical(eLogType.Resources, "[ResourceManager.Initialize]: 读取inapp res config 失败! 解析失败!");
                assetbundleAppResConfig.Unload(true);
                return(false);
            }
            assetbundleAppResConfig.Unload(true);


            mLoadResConfig = ResConfigFile.Create(ResUtility.LocalResConfigPath, true);
            if (mLoadResConfig == null)
            {
                Log.Error(eLogType.Resources, "[ResouceManager]: Local res config file 创建失败!");
                return(false);
            }

            // 首次初始化时执行
            if (_updateByAppConfig)
            {
                mLoadResConfig.UpdateByAppResConfig(appResConfig);
            }


            mLoadResConfig.TraverseAssets(_info => {
                m_res_dictionary.Add(_info.Name, _createResourceData(_info));
            });

            // 读取依赖
            var assetbundleManifest      = AssetBundle.LoadFromFile(GetResource("res.grt").ResouceInfo.SystemApiLoadingPath);
            AssetBundleManifest manifest = assetbundleManifest.LoadAsset <AssetBundleManifest>("AssetBundleManifest");

            foreach (Resource_Base res in m_res_dictionary.Values)
            {
                if (res.ResouceInfo.ResType != ResourceType.AssetBundle)
                {
                    continue;
                }
                Resource_Assetbundle resAssetbundle = res as Resource_Assetbundle;
                var dependenciesName = manifest.GetDirectDependencies(res.Name);
                for (int i = 0; i < dependenciesName.Length; i++)
                {
                    Resource_Assetbundle dependency = GetResource <Resource_Assetbundle>(dependenciesName[i]);
                    if (dependency == null)
                    {
                        Log.Critical(eLogType.Resources, "[ResourceManager.Initialize]: {0}的依赖资源: {1}没有在ResourceConfig中找到! 请尝试重新打包!", res.Name, dependenciesName[i]);
                        return(false);
                    }
                    resAssetbundle.AddDependencies(dependency);
                }
            }
            assetbundleManifest.Unload(true);

            Log.Debug(eLogType.Resources, "ResourceManager Initialized Done!");
            return(true);
        }