场景中的人物不在预加载中出现,走下面的流程,这部分输入资源加载里的,不属于版本更新
加载资源包
资源包的路径
如果可写区没有先下载资源包,先下载依赖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();
});
});
}
然后走回调执行实例化