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);
            }
예제 #3
0
            /// <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));
            }
예제 #4
0
            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)));
            }
예제 #8
0
            /// <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);
            }
예제 #9
0
            /// <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);
            }
예제 #11
0
            /// <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);
            }
예제 #12
0
        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();

        }
예제 #13
0
            /// <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);
            }
예제 #17
0
            /// <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);
            }
예제 #18
0
            /// <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);
            }
예제 #19
0
            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);
                }
            }