跳到主要内容
版本:3.0.x

小游戏支持同步加载

关于支持同步加载的折中方案。

因为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();
}