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(); }
/// <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); }