コード例 #1
0
    IEnumerator LoadCoroutine(ResourceInfo resourceInfo, OnResourceLoadFinished callback)
    {
        ResourceLoadState = ResourceLoadStateType.Loading;

        Object resource;

        if (resourceInfo.isFromAssetBundle)
        {
            var assetbundlePath = string.Format("{0}{1}/{2}{3}", Application.streamingAssetsPath, PREFIX_ASSETBUNDLE_PATH, resourceInfo.assetbundlePath, SUFFIX_ASSETBUNDLE_PATH);
            WWW www             = new WWW(assetbundlePath);
            yield return(www);

            var bundle  = www.assetBundle;
            var request = bundle.LoadAssetAsync <GameObject>(resourceInfo.resourceName);
            yield return(request);

            resource = request.asset;
            bundle.Unload(false);
        }
        else
        {
            var request = Resources.LoadAsync(resourceInfo.resourcePath);
            yield return(request);

            resource = request.asset;
        }

        _resourceDict.Add(resourceInfo.resourceName, resource);

        LoadAsyncFinished(resource, callback);
    }
コード例 #2
0
    /// <summary>
    /// 异步加载资源
    /// </summary>
    /// <param name="resourceName">资源名称</param>
    /// <param name="callback">加载成功的回调</param>
    public void LoadAsync(string resourceName, OnResourceLoadFinished callback)
    {
        var worldMgr = WorldManager.Instance;

        Object resource;

        if (_resourceDict.TryGetValue(resourceName, out resource))
        {
            worldMgr.TimerMgr.AddOnce(0, delegate()
            {
                // 即使已经加载,也保证下一帧返回
                LoadAsyncFinished(resource, callback);
            });
            return;
        }

        for (var i = 0; i < _asyncResourceRequestList.Count; i++)
        {
            var request = _asyncResourceRequestList[i];
            if (request.resourceName == resourceName)
            {
                request.callBack += callback;
                return;
            }
        }

        var resourceRequest = worldMgr.PoolMgr.Get <AsyncResourceRequest>();

        resourceRequest.resourceName = resourceName;
        resourceRequest.callBack     = callback;

        _asyncResourceRequestList.Add(resourceRequest);

        StartLoadAsync();
    }
コード例 #3
0
    void LoadAsyncFinished(Object resource, OnResourceLoadFinished callback)
    {
        if (callback != null)
        {
            callback(resource);
        }

        ResourceLoadState = ResourceLoadStateType.Finished;
    }
コード例 #4
0
 public void Clear()
 {
     resourceName = string.Empty;
     callBack     = null;
 }