You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
4.1 KiB
198 lines
4.1 KiB
4 years ago
|
using UnityEngine;
|
||
|
using System.Collections;
|
||
|
using UnityEngine.SceneManagement;
|
||
|
|
||
|
public abstract class AssetBundleLoadOperation : IEnumerator
|
||
|
{
|
||
|
public object Current
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
public bool MoveNext()
|
||
|
{
|
||
|
return !IsDone();
|
||
|
}
|
||
|
|
||
|
public void Reset()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
abstract public bool Update ();
|
||
|
|
||
|
abstract public bool IsDone ();
|
||
|
}
|
||
|
|
||
|
public class AssetBundleLoadLevelSimulationOperation : AssetBundleLoadOperation
|
||
|
{
|
||
|
public AssetBundleLoadLevelSimulationOperation ()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public override bool Update ()
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public override bool IsDone ()
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class AssetBundleLoadLevelOperation : AssetBundleLoadOperation
|
||
|
{
|
||
|
protected string m_AssetBundleName;
|
||
|
protected string m_LevelName;
|
||
|
protected bool m_IsAdditive;
|
||
|
protected string m_DownloadingError;
|
||
|
protected AsyncOperation m_Request;
|
||
|
|
||
|
public AssetBundleLoadLevelOperation (string assetbundleName, string levelName, bool isAdditive)
|
||
|
{
|
||
|
m_AssetBundleName = assetbundleName;
|
||
|
m_LevelName = levelName;
|
||
|
m_IsAdditive = isAdditive;
|
||
|
}
|
||
|
|
||
|
public override bool Update ()
|
||
|
{
|
||
|
if (m_Request != null)
|
||
|
return false;
|
||
|
|
||
|
LoadedAssetBundle bundle = AssetBundleManager.GetLoadedAssetBundle (m_AssetBundleName, out m_DownloadingError);
|
||
|
if (bundle != null)
|
||
|
{
|
||
|
if (m_IsAdditive)
|
||
|
m_Request = SceneManager.LoadSceneAsync(m_LevelName,LoadSceneMode.Additive);
|
||
|
else
|
||
|
m_Request = SceneManager.LoadSceneAsync(m_LevelName);
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public override bool IsDone ()
|
||
|
{
|
||
|
// Return if meeting downloading error.
|
||
|
// m_DownloadingError might come from the dependency downloading.
|
||
|
if (m_Request == null && m_DownloadingError != null)
|
||
|
{
|
||
|
Debug.LogError(m_DownloadingError);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return m_Request != null && m_Request.isDone;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public abstract class AssetBundleLoadAssetOperation : AssetBundleLoadOperation
|
||
|
{
|
||
|
public abstract T GetAsset<T>() where T : UnityEngine.Object;
|
||
|
}
|
||
|
|
||
|
public class AssetBundleLoadAssetOperationSimulation : AssetBundleLoadAssetOperation
|
||
|
{
|
||
|
Object m_SimulatedObject;
|
||
|
|
||
|
public AssetBundleLoadAssetOperationSimulation (Object simulatedObject)
|
||
|
{
|
||
|
m_SimulatedObject = simulatedObject;
|
||
|
}
|
||
|
|
||
|
public override T GetAsset<T>()
|
||
|
{
|
||
|
return m_SimulatedObject as T;
|
||
|
}
|
||
|
|
||
|
public override bool Update ()
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public override bool IsDone ()
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class AssetBundleLoadAssetOperationFull : AssetBundleLoadAssetOperation
|
||
|
{
|
||
|
protected string m_AssetBundleName;
|
||
|
protected string m_AssetName;
|
||
|
protected string m_DownloadingError;
|
||
|
protected System.Type m_Type;
|
||
|
protected AssetBundleRequest m_Request = null;
|
||
|
|
||
|
public AssetBundleLoadAssetOperationFull (string bundleName, string assetName, System.Type type)
|
||
|
{
|
||
|
m_AssetBundleName = bundleName;
|
||
|
m_AssetName = assetName;
|
||
|
m_Type = type;
|
||
|
}
|
||
|
|
||
|
public override T GetAsset<T>()
|
||
|
{
|
||
|
if (m_Request != null && m_Request.isDone)
|
||
|
return m_Request.asset as T;
|
||
|
else
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
// Returns true if more Update calls are required.
|
||
|
public override bool Update ()
|
||
|
{
|
||
|
if (m_Request != null)
|
||
|
return false;
|
||
|
|
||
|
LoadedAssetBundle bundle = AssetBundleManager.GetLoadedAssetBundle (m_AssetBundleName, out m_DownloadingError);
|
||
|
if (bundle != null)
|
||
|
{
|
||
|
m_Request = bundle.m_AssetBundle.LoadAssetAsync (m_AssetName, m_Type);
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override bool IsDone ()
|
||
|
{
|
||
|
// Return if meeting downloading error.
|
||
|
// m_DownloadingError might come from the dependency downloading.
|
||
|
if (m_Request == null && m_DownloadingError != null)
|
||
|
{
|
||
|
Debug.LogError(m_DownloadingError);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return m_Request != null && m_Request.isDone;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class AssetBundleLoadManifestOperation : AssetBundleLoadAssetOperationFull
|
||
|
{
|
||
|
public AssetBundleLoadManifestOperation (string bundleName, string assetName, System.Type type)
|
||
|
: base(bundleName, assetName, type)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public override bool Update ()
|
||
|
{
|
||
|
base.Update();
|
||
|
|
||
|
if (m_Request != null && m_Request.isDone)
|
||
|
{
|
||
|
AssetBundleManager.AssetBundleManifestObject = GetAsset<AssetBundleManifest>();
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|