public void LoadAsset(string assetName, LoadAssetCallbacks loadAssetCallbacks, object userData) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; string resourceChildName = null; if (!CheckAsset(assetName, out resourceInfo, out dependencyAssetNames, out resourceChildName)) { string err; loadAssetCallbacks.LoadAssetFailureCallback(assetName, LoadResourceStatus.NotReady); return; } LoadAssetTask mainTask = new LoadAssetTask(assetName, resourceInfo.Value, dependencyAssetNames, loadAssetCallbacks, userData); foreach (string dependencyAssetName in dependencyAssetNames) { if (!LoadDependencyAsset(dependencyAssetNames, mainTask, userData)) { string err; loadAssetCallbacks.LoadAssetFailureCallback(assetName, LoadResourceStatus.dependencyerror); return } } m_TaskPool.AddTask(mainTask); }
//NOWGF private bool CheckAssetBundle(string assetBundleName, out ResourceInfo?resourceInfo, out string resourceChildName) { resourceInfo = null; resourceChildName = null; if (string.IsNullOrEmpty(assetBundleName)) { return(false); } int childNamePosition = assetBundleName.IndexOf("Assets/"); if (childNamePosition + 1 >= assetBundleName.Length && childNamePosition != -1) { return(false); } resourceChildName = childNamePosition != -1 ? assetBundleName.Substring(childNamePosition + 7).ToLower() : assetBundleName.ToLower(); resourceInfo = m_ResourceManager.GetResourceInfo(resourceChildName); if (!resourceInfo.HasValue) { return(false); } return(true); }
/// <summary> /// 异步加载二进制资源。 /// </summary> /// <param name="binaryAssetName">要加载二进制资源的名称。</param> /// <param name="loadBinaryCallbacks">加载二进制资源回调函数集。</param> /// <param name="userData">用户自定义数据。</param> public void LoadBinary(string binaryAssetName, LoadBinaryCallbacks loadBinaryCallbacks, object userData) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; if (!CheckAsset(binaryAssetName, out resourceInfo, out dependencyAssetNames)) { string errorMessage = Utility.Text.Format("Can not load binary '{0}'.", binaryAssetName); if (loadBinaryCallbacks.LoadBinaryFailureCallback != null) { loadBinaryCallbacks.LoadBinaryFailureCallback(binaryAssetName, LoadResourceStatus.NotReady, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } if (!IsLoadFromBinary(resourceInfo.Value.LoadType)) { string errorMessage = Utility.Text.Format("Can not load binary asset '{0}' which is not a binary asset.", binaryAssetName); if (loadBinaryCallbacks.LoadBinaryFailureCallback != null) { loadBinaryCallbacks.LoadBinaryFailureCallback(binaryAssetName, LoadResourceStatus.TypeError, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } string path = Utility.Path.GetRemotePath(Path.Combine(resourceInfo.Value.StorageInReadOnly ? m_ResourceManager.m_ReadOnlyPath : m_ResourceManager.m_ReadWritePath, resourceInfo.Value.ResourceName.FullName)); m_ResourceManager.m_ResourceHelper.LoadBytes(path, m_LoadBytesCallbacks, LoadBinaryInfo.Create(binaryAssetName, resourceInfo.Value, loadBinaryCallbacks, userData)); }
private bool LoadDependencyAsset(string assetName, int priority, LoadResourceTaskBase mainTask, object userData) { if (mainTask == null) { throw new GameFrameworkException("Main task is invalid."); } ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; if (!CheckAsset(assetName, out resourceInfo, out dependencyAssetNames)) { return(false); } if (IsLoadFromBinary(resourceInfo.Value.LoadType)) { return(false); } LoadDependencyAssetTask dependencyTask = LoadDependencyAssetTask.Create(assetName, priority, resourceInfo.Value, dependencyAssetNames, mainTask, userData); foreach (string dependencyAssetName in dependencyAssetNames) { if (!LoadDependencyAsset(dependencyAssetName, priority, dependencyTask, userData)) { return(false); } } m_TaskPool.AddTask(dependencyTask); return(true); }
private bool LoadDependencyAsset(string assetName, int priority, LoadResourceTaskBase mainTask, object userData) { if (mainTask == null) { throw new GameFrameworkException("Main task is invalid."); } ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; if (!CheckAsset(assetName, out resourceInfo, out dependencyAssetNames)) { GameFrameworkLog.Debug("Can not load asset '{0}'.", assetName); return(false); } LoadDependencyAssetTask dependencyTask = new LoadDependencyAssetTask(assetName, priority, resourceInfo.Value, dependencyAssetNames, mainTask, userData); foreach (string dependencyAssetName in dependencyAssetNames) { if (!LoadDependencyAsset(dependencyAssetName, priority, dependencyTask, userData)) { GameFrameworkLog.Debug("Can not load dependency asset '{0}' when load dependency asset '{1}'.", dependencyAssetName, assetName); return(false); } } m_TaskPool.AddTask(dependencyTask); return(true); }
private bool CheckAsset(string assetName, out ResourceInfo?resourceInfo, out string[] dependencyAssetNames) { resourceInfo = null; dependencyAssetNames = null; if (string.IsNullOrEmpty(assetName)) { return(false); } AssetInfo?assetInfo = m_ResourceManager.GetAssetInfo(assetName); if (!assetInfo.HasValue) { return(false); } resourceInfo = m_ResourceManager.GetResourceInfo(assetInfo.Value.ResourceName); if (!resourceInfo.HasValue) { return(false); } dependencyAssetNames = assetInfo.Value.GetDependencyAssetNames(); return(true); }
/// <summary> /// 获取二进制资源的实际路径。 /// </summary> /// <param name="binaryAssetName">要获取实际路径的二进制资源的名称。</param> /// <returns>二进制资源的实际路径。</returns> public string GetBinaryPath(string binaryAssetName) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; if (!CheckAsset(binaryAssetName, out resourceInfo, out dependencyAssetNames)) { return(null); } return(Utility.Path.GetRegularPath(Path.Combine(resourceInfo.Value.StorageInReadOnly ? m_ResourceManager.m_ReadOnlyPath : m_ResourceManager.m_ReadWritePath, resourceInfo.Value.ResourceName.FullName))); }
/// <summary> /// 检查资源是否存在。 /// </summary> /// <param name="assetName">要检查资源的名称。</param> /// <returns>检查资源是否存在的结果。</returns> public HasAssetResult HasAsset(string assetName) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; if (!CheckAsset(assetName, out resourceInfo, out dependencyAssetNames)) { return(HasAssetResult.NotExist); } return(IsLoadFromBinary(resourceInfo.Value.LoadType) ? HasAssetResult.Binary : HasAssetResult.Asset); }
/// <summary> /// 异步加载场景。 /// </summary> /// <param name="sceneAssetName">要加载场景资源的名称。</param> /// <param name="priority">加载场景资源的优先级。</param> /// <param name="loadSceneCallbacks">加载场景回调函数集。</param> /// <param name="userData">用户自定义数据。</param> public void LoadScene(string sceneAssetName, int priority, LoadSceneCallbacks loadSceneCallbacks, object userData) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; if (!CheckAsset(sceneAssetName, out resourceInfo, out dependencyAssetNames)) { string errorMessage = Utility.Text.Format("Can not load scene '{0}'.", sceneAssetName); if (loadSceneCallbacks.LoadSceneFailureCallback != null) { loadSceneCallbacks.LoadSceneFailureCallback(sceneAssetName, LoadResourceStatus.NotReady, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } if (IsLoadFromBinary(resourceInfo.Value.LoadType)) { string errorMessage = Utility.Text.Format("Can not load scene asset '{0}' which is a binary asset.", sceneAssetName); if (loadSceneCallbacks.LoadSceneFailureCallback != null) { loadSceneCallbacks.LoadSceneFailureCallback(sceneAssetName, LoadResourceStatus.TypeError, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } LoadSceneTask mainTask = LoadSceneTask.Create(sceneAssetName, priority, resourceInfo.Value, dependencyAssetNames, loadSceneCallbacks, userData); foreach (string dependencyAssetName in dependencyAssetNames) { if (!LoadDependencyAsset(dependencyAssetName, priority, mainTask, userData)) { string errorMessage = Utility.Text.Format("Can not load dependency asset '{0}' when load scene '{1}'.", dependencyAssetName, sceneAssetName); if (loadSceneCallbacks.LoadSceneFailureCallback != null) { loadSceneCallbacks.LoadSceneFailureCallback(sceneAssetName, LoadResourceStatus.DependencyError, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } } m_TaskPool.AddTask(mainTask); }
/// <summary> /// 获取二进制资源的实际路径。 /// </summary> /// <param name="binaryAssetName">要获取实际路径的二进制资源的名称。</param> /// <param name="storageInReadOnly">资源是否在只读区。</param> /// <param name="relativePath">二进制资源相对于只读区或者读写区的相对路径。</param> /// <returns>获取二进制资源的实际路径是否成功。</returns> public bool GetBinaryPath(string binaryAssetName, out bool storageInReadOnly, out string relativePath) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; if (!CheckAsset(binaryAssetName, out resourceInfo, out dependencyAssetNames)) { storageInReadOnly = false; relativePath = null; return(false); } storageInReadOnly = resourceInfo.Value.StorageInReadOnly; relativePath = resourceInfo.Value.ResourceName.FullName; return(true); }
/// <summary> /// 检查资源 /// </summary> /// <param name="assetName"></param> /// <param name="resourceInfo"></param> /// <param name="dependencyAssetNames"></param> /// <param name="scatteredDependencyAssetNames"></param> /// <param name="resourceChildName">aaa/bb/cc; 资产(??资源)的名字 = cc</param> /// <returns></returns> private bool CheckAsset(string assetName, out ResourceInfo?resourceInfo, out string[] dependencyAssetNames, out string[] scatteredDependencyAssetNames, out string resourceChildName) { resourceInfo = null; dependencyAssetNames = null; scatteredDependencyAssetNames = null; resourceChildName = null; if (string.IsNullOrEmpty(assetName)) { return(false); } AssetInfo?assetInfo = m_ResourceManager.GetAssetInfo(assetName); if (!assetInfo.HasValue) { return(false); } resourceInfo = m_ResourceManager.GetResourceInfo(assetInfo.Value.ResourceName); if (!resourceInfo.HasValue) { return(false); } //最后一位不能为“/” int childNamePosition = assetName.LastIndexOf('/'); if (childNamePosition + 1 >= assetName.Length) { return(false); } resourceChildName = assetName.Substring(childNamePosition + 1); AssetDependencyInfo?assetDependencyInfo = m_ResourceManager.GetAssetDependencyInfo(assetName); if (!assetDependencyInfo.HasValue) { return(true); } dependencyAssetNames = assetDependencyInfo.Value.GetDependencyAssetNames(); scatteredDependencyAssetNames = assetDependencyInfo.Value.GetScatteredDependencyAssetNames(); return(true); }
bool CheckAsset(string assetName, out ResourceInfo? resourceInfo) { if (!string.IsNullOrEmpty(assetName)) { return false; } AssetInfo assetInfo = m_ResourceManager.GetAssetInfo(assetName); if (!assetInfo.HasValue) { return false; } resourceInfo = m_ResourceManager.GetResourceInfo(assetInfo.Value.ResourceName); resourceChildName = assetName.Substring(childNamePosition + 1); assetDependencyInfo = m_ResourceManager.GetAssetDependencyInfo(); }
/// <summary> /// 异步加载资源。 /// </summary> /// <param name="assetName">要加载资源的名称。</param> /// <param name="loadAssetCallbacks">加载资源回调函数集。</param> /// <param name="userData">用户自定义数据。</param> public void LoadAsset(string assetName, LoadAssetCallbacks loadAssetCallbacks, object userData) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; string[] scatteredDependencyAssetNames = null; string resourceChildName = null; if (!CheckAsset(assetName, out resourceInfo, out dependencyAssetNames, out scatteredDependencyAssetNames, out resourceChildName)) { //加载资产失败 string errorMessage = string.Format("Can not load asset '{0}'.", assetName); if (loadAssetCallbacks.LoadAssetFailureCallback != null) { loadAssetCallbacks.LoadAssetFailureCallback(assetName, LoadResourceStatus.NotReady, errorMessage, userData); return; } throw new AshException(errorMessage); } //新建读取资产任务 LoadAssetTask mainTask = new LoadAssetTask(assetName, resourceInfo.Value, dependencyAssetNames, scatteredDependencyAssetNames, resourceChildName, loadAssetCallbacks, userData); //读取关联资源 foreach (string dependencyAssetName in dependencyAssetNames) { if (!LoadDependencyAsset(dependencyAssetName, mainTask, userData)) { //读取关联资产失败 string errorMessage = string.Format("Can not load dependency asset '{0}' when load asset '{1}'.", dependencyAssetName, assetName); if (loadAssetCallbacks.LoadAssetFailureCallback != null) { loadAssetCallbacks.LoadAssetFailureCallback(assetName, LoadResourceStatus.DependencyError, errorMessage, userData); return; } throw new AshException(errorMessage); } } m_TaskPool.AddTask(mainTask); }
private bool CheckAsset(string assetName, out ResourceInfo?resourceInfo, out string[] dependencyAssetNames, out string resourceChildName) { resourceInfo = null; dependencyAssetNames = null; resourceChildName = null; AssetInfo?assetInfo = m_ResourceManager.GetAssetInfo(assetName); if (!assetInfo.HasValue) { return(false); } resourceInfo = m_ResourceManager.GetResourceInfo(assetInfo.Value.ResourceName); AssetDependencyInfo?assetDependencyInfo = m_ResourceManager.GetAssetDependencyInfo(assetName); dependencyAssetNames = assetDependencyInfo.Value.GetDependencyAssetNames(); return(true); }
//NOWGF /// <summary> /// 异步加载资源包。 /// </summary> /// <param name="assetBundleName">要加载资源包的名称。</param> /// <param name="loadAssetBundleCallbacks">加载资源包回调函数集。</param> /// <param name="userData">用户自定义数据。</param> public void LoadAssetBundle(string assetBundleName, LoadAssetBundleCallbacks loadAssetBundleCallbacks, object userData) { ResourceInfo?resourceInfo = null; string resourceChildName = null; if (!CheckAssetBundle(assetBundleName, out resourceInfo, out resourceChildName)) { string errorMessage = string.Format("Can not load asset bundle '{0}'.", assetBundleName); if (loadAssetBundleCallbacks.LoadAssetBundleFailureCallback != null) { loadAssetBundleCallbacks.LoadAssetBundleFailureCallback(assetBundleName, LoadResourceStatus.NotReady, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } LoadAssetBundleTask mainTask = new LoadAssetBundleTask(assetBundleName, resourceInfo.Value, loadAssetBundleCallbacks, resourceChildName, userData); m_TaskPool.AddTask(mainTask); }
/// <summary> /// 异步加载场景。 /// </summary> /// <param name="sceneAssetName">要加载场景资源的名称。</param> /// <param name="loadSceneCallbacks">加载场景回调函数集。</param> /// <param name="userData">用户自定义数据。</param> public void LoadScene(string sceneAssetName, LoadSceneCallbacks loadSceneCallbacks, object userData) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; string[] scatteredDependencyAssetNames = null; string resourceChildName = null; if (!CheckAsset(sceneAssetName, out resourceInfo, out dependencyAssetNames, out scatteredDependencyAssetNames, out resourceChildName)) { string errorMessage = string.Format("Can not load scene '{0}'.", sceneAssetName); if (loadSceneCallbacks.LoadSceneFailureCallback != null) { loadSceneCallbacks.LoadSceneFailureCallback(sceneAssetName, LoadResourceStatus.NotReady, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } LoadSceneTask mainTask = new LoadSceneTask(sceneAssetName, resourceInfo.Value, dependencyAssetNames, scatteredDependencyAssetNames, resourceChildName, loadSceneCallbacks, userData); foreach (string dependencyAssetName in dependencyAssetNames) { if (!LoadDependencyAsset(dependencyAssetName, mainTask, userData)) { string errorMessage = string.Format("Can not load dependency asset '{0}' when load scene '{1}'.", dependencyAssetName, sceneAssetName); if (loadSceneCallbacks.LoadSceneFailureCallback != null) { loadSceneCallbacks.LoadSceneFailureCallback(sceneAssetName, LoadResourceStatus.DependencyError, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } } m_TaskPool.AddTask(mainTask); }
/// <summary> /// 异步实例化资源。 /// </summary> /// <param name="assetName">要实例化资源的名称。</param> /// <param name="instantiateAssetCallbacks">实例化资源回调函数集。</param> /// <param name="userData">用户自定义数据。</param> public void InstantiateAsset(string assetName, InstantiateAssetCallbacks instantiateAssetCallbacks, object userData) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; string[] scatteredDependencyAssetNames = null; string resourceChildName = null; if (!CheckAsset(assetName, out resourceInfo, out dependencyAssetNames, out scatteredDependencyAssetNames, out resourceChildName)) { string errorMessage = string.Format("Can not instantiate asset '{0}'.", assetName); if (instantiateAssetCallbacks.InstantiateAssetFailureCallback != null) { instantiateAssetCallbacks.InstantiateAssetFailureCallback(assetName, LoadResourceStatus.NotReady, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } InstantiateAssetTask mainTask = new InstantiateAssetTask(assetName, resourceInfo.Value, dependencyAssetNames, scatteredDependencyAssetNames, resourceChildName, instantiateAssetCallbacks, userData); foreach (string dependencyAssetName in dependencyAssetNames) { if (!LoadDependencyAsset(dependencyAssetName, mainTask, userData)) { string errorMessage = string.Format("Can not load dependency asset '{0}' when instantiate asset '{1}'.", dependencyAssetName, assetName); if (instantiateAssetCallbacks.InstantiateAssetFailureCallback != null) { instantiateAssetCallbacks.InstantiateAssetFailureCallback(assetName, LoadResourceStatus.DependencyError, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } } m_TaskPool.AddTask(mainTask); }
/// <summary> /// 异步加载资源。 /// </summary> /// <param name="assetName">要加载资源的名称。</param> /// <param name="assetType">要加载资源的类型。</param> /// <param name="priority">加载资源的优先级。</param> /// <param name="loadAssetCallbacks">加载资源回调函数集。</param> /// <param name="userData">用户自定义数据。</param> public void LoadAsset(string assetName, Type assetType, int priority, LoadAssetCallbacks loadAssetCallbacks, object userData) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; if (!CheckAsset(assetName, out resourceInfo, out dependencyAssetNames)) { string errorMessage = Utility.Text.Format("Can not load asset '{0}'.", assetName); if (loadAssetCallbacks.LoadAssetFailureCallback != null) { loadAssetCallbacks.LoadAssetFailureCallback(assetName, LoadResourceStatus.NotReady, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } LoadAssetTask mainTask = ReferencePool.Acquire <LoadAssetTask>(); mainTask.Initialize(assetName, assetType, priority, resourceInfo.Value, dependencyAssetNames, loadAssetCallbacks, userData); foreach (string dependencyAssetName in dependencyAssetNames) { if (!LoadDependencyAsset(dependencyAssetName, priority, mainTask, userData)) { string errorMessage = Utility.Text.Format("Can not load dependency asset '{0}' when load asset '{1}'.", dependencyAssetName, assetName); if (loadAssetCallbacks.LoadAssetFailureCallback != null) { loadAssetCallbacks.LoadAssetFailureCallback(assetName, LoadResourceStatus.DependencyError, errorMessage, userData); return; } throw new GameFrameworkException(errorMessage); } } m_TaskPool.AddTask(mainTask); }
private object LoadDependencyAssetSync(string assetName, IResourceHelper resourceHelper) { ResourceInfo?resourceInfo = null; string[] dependencyAssetNames = null; string[] scatteredDependencyAssetNames = null; string resourceChildName = null; if (!CheckAsset(assetName, out resourceInfo, out dependencyAssetNames, out scatteredDependencyAssetNames, out resourceChildName)) { Log.Debug("Can not load asset '{0}'.", assetName); return(false); } AssetObject assetObject = m_AssetPool.Spawn(assetName); if (assetObject != null) { return(true); } object[] dependencyAssets = new object[dependencyAssetNames.Length]; for (int i = 0; i < dependencyAssetNames.Length; i++) { object asset = LoadDependencyAssetSync(dependencyAssetNames[i], resourceHelper); if (asset != null) { dependencyAssets[i] = asset; } else { string errorMessage = string.Format( "Can not load dependency asset '{0}' when load asset '{1}'.", dependencyAssetNames[i], assetName); throw new GameFrameworkException(errorMessage); } } ResourceObject resourceObject = m_ResourcePool.Spawn(resourceInfo.Value.ResourceName.Name); if (resourceObject != null) { object asset = m_SyncLoadResourceHelper.LoadAssetSync(resourceObject.Target, resourceChildName); AssetObject assetObj = new AssetObject(assetName, asset, dependencyAssets, resourceObject.Target, m_AssetPool, m_ResourcePool, resourceHelper); m_AssetPool.Register(assetObj, true); return(true); } string fullPath = Utility.Path.GetCombinePath( resourceInfo.Value.StorageInReadOnly ? m_ReadOnlyPath : m_ReadWritePath, Utility.Path.GetResourceNameWithSuffix(resourceInfo.Value.ResourceName.FullName)); object resourceObj = null; if (resourceInfo.Value.LoadType == LoadType.LoadFromFile) { resourceObj = m_SyncLoadResourceHelper.ReadFileSync(fullPath); } else { resourceObj = m_SyncLoadResourceHelper.ReadBytesSync(fullPath, (int)resourceInfo.Value.LoadType); } if (resourceObj != null) { ResourceObject resObject = new ResourceObject(resourceInfo.Value.ResourceName.Name, resourceObj, resourceHelper); m_ResourcePool.Register(resObject, true); object asset = m_SyncLoadResourceHelper.LoadAssetSync(resObject.Target, resourceChildName); AssetObject assetObj = new AssetObject(assetName, asset, dependencyAssets, resObject.Target, m_AssetPool, m_ResourcePool, resourceHelper); m_AssetPool.Register(assetObj, true); return(true); } else { string errorMessage = string.Format("Can not load asset '{0}' when load asset '{1}'.", assetName); throw new GameFrameworkException(errorMessage); } }