小游戏支持同步加载
关于支持同步加载的折中方案。
因为WebGL平台的特殊性,无法支持同步加载方法,只能走边玩边下的方式(全部实现异步加载)。但对于已经上线的项目,在功能业务逻辑里会存在大量的同步加载。要适配微信小游戏平台,要修改大量的业务代码是十分痛苦的事情。
这里有一种折中方案,可以避免做大量的业务代码调整。方案核心思路就是提前用异步方法加载AssetBundle,并让其驻留在内存中,然后业务层就可以用同步方法去加载其中的资源对象。
注意:如果仍要在WebGL或小游戏平台使用同步加载,需要在初始化参数里设置 createParameters.WebGLForceSyncLoadAsset = true。
private BundleFileHandle _bundleHandle;
private AssetHandle _assetHandle;
private IEnumerator Start()
{
// 异步加载并持有AssetBundle的句柄
_bundleHandle = package.LoadBundleFileAsync("prefab_location");
yield return _bundleHandle;
// 调用游戏逻辑
GameLogic();
}
private void OnDestroy()
{
// 合适的时机释放句柄,防止资源泄露
_bundleHandle.Release();
_assetHandle.Release();
}
private void GameLogic()
{
// 业务代码可以用同步加载方法
_assetHandle = package.LoadAssetSync("prefab_location");
var go = _assetHandle.InstantiateSync();
}