资源加载(7)——实现边玩边下载角色

 

场景中的人物不在预加载中出现,走下面的流程,这部分输入资源加载里的,不属于版本更新

加载资源包

资源包的路径

如果可写区没有先下载资源包,先下载依赖bundle,然后把bundle加载依赖资源,然后加载主资源,最后把角色资源实例化成实例

        //边玩边下载角色
        private void LoadRole()
        {
            GameEntry.Resource.ResourceLoaderManager.LoadMainAsset(AssetCategory.RolePrefab,string.Format("Assets/Download/Role/RolePrefab/Player/Tianshan_001/Zy_tianshan_002_yxt.prefab"), (ResourceEntity resourceEntity) =>
            {
                Debug.Log("加载角色完毕");
                GameObject obj = GameObject.Instantiate(resourceEntity.Target as GameObject);
                obj.transform.position = new Vector3(166.51f, 1.454f, 171.1f);
            });
        }

 

加载依赖资源

依赖资源加载完毕后的回调是加载主资源

加载真正的主资源

        /// <summary>
        /// 真正的加载主资源,加载主资源之前先加载依赖,走到这步之前,说明依赖已经加载好了
        /// </summary>
        private void LoadMainAsset()
        {
            //1.从分类资源池(AssetPool)中查找
            m_CurrResourceEntity = GameEntry.Pool.PoolManager.AssetPool[m_CurrAssetEnity.Category].Spawn(m_CurrAssetEnity.AssetFullName);
            if (m_CurrResourceEntity != null)
            {
                //GameEntry.Log(LogCategory.Resource, "从分类资源池中加载{0}", m_CurrResourceEntity.ResourceName);
                if (m_OnComplete != null) m_OnComplete(m_CurrResourceEntity);
                return;
            }

            //2.找资源包,找Assetbundle
            GameEntry.Resource.ResourceLoaderManager.LoadAssetBundle(m_CurrAssetEnity.AssetBundleName, onComplete: (AssetBundle bundle) =>
            {
                //3.加载资源
                GameEntry.Resource.ResourceLoaderManager.LoadAsset(m_CurrAssetEnity.AssetFullName, bundle, onComplete: (UnityEngine.Object obj) =>
                  {
                      //4.再次检查 很重要 不检查引用计数会出错
                      m_CurrResourceEntity = GameEntry.Pool.PoolManager.AssetPool[m_CurrAssetEnity.Category].Spawn(m_CurrAssetEnity.AssetFullName);
                      if (m_CurrResourceEntity != null)
                      {
                          if (m_OnComplete != null) m_OnComplete(m_CurrResourceEntity);
                          return;
                      }

                      //资源池注册资源
                      m_CurrResourceEntity = GameEntry.Pool.DequeueClassObject<ResourceEntity>();
                      m_CurrResourceEntity.Category = m_CurrAssetEnity.Category;
                      m_CurrResourceEntity.IsAssetBundle = false;
                      m_CurrResourceEntity.ResourceName = m_CurrAssetEnity.AssetFullName;
                      m_CurrResourceEntity.Target = obj;
                      GameEntry.Pool.PoolManager.AssetPool[m_CurrAssetEnity.Category].Register(m_CurrResourceEntity);

                      //加入到这个资源的依赖资源链表里
                      var currDependsResource = m_DependResourceList.First;
                      while (currDependsResource != null)
                      {
                          var next = currDependsResource.Next;
                          m_DependResourceList.Remove(currDependsResource);
                          m_CurrResourceEntity.DependsResourceList.AddLast(currDependsResource);
                          currDependsResource = next;
                      }

                      //当前主资源加载器 加载完毕(类递归)
                      if (m_OnComplete != null) m_OnComplete(m_CurrResourceEntity);

                      //资源加载完毕之后重置,重置的时候把当前对象回池
                      Reset();
                  });
            });
        }

然后走回调执行实例化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值