You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何等待Initialize()执行完成后再执行后续代码?

别再用固定等待时间了,这完全不靠谱。Unity IAP的初始化是异步操作,得靠官方提供的回调来精准判断完成时机,给你两种靠谱方案:

方案1:利用初始化完成回调直接执行逻辑

你的类已经实现了IStoreListener接口(毕竟调用UnityPurchasing.Initialize(this, builder)时传了this),只需要在OnInitialized回调里触发后续逻辑就行:

// 加个标记,方便其他地方判断初始化状态
private bool _isInitialized = false;

void Initialize()
{
    var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
    builder.Configure<IGooglePlayConfiguration>().SetDeferredPurchaseListener(OnDeferredPurchase);
    builder.Configure<IGooglePlayConfiguration>().SetQueryProductDetailsFailedListener(MyAction);
    builder.AddProduct(productId, ProductType.Subscription);
    UnityPurchasing.Initialize(this, builder);
};

// IStoreListener要求实现的初始化完成回调
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
    _isInitialized = true;
    // 初始化完成立刻执行后续逻辑
    dosomeThing();
}

// 必须实现初始化失败的回调,否则会报错
public void OnInitializeFailed(InitializationFailureReason error)
{
    Debug.LogError($"IAP初始化失败:{error}");
    // 这里可以加失败后的处理逻辑,比如弹窗提示用户
}

方案2:用协程等待初始化完成(适合特定时机触发的场景)

如果不想在回调里直接执行,而是要在某个方法里主动等待初始化完成再执行,就用协程配合标记变量:

private bool _isInitialized = false;

void waitInit()
{
    Initialize();
    // 启动协程等待初始化完成
    StartCoroutine(WaitForInitThenExecute());
}

IEnumerator WaitForInitThenExecute()
{
    // 等待标记变为true,完全不用固定时间
    yield return new WaitUntil(() => _isInitialized);
    dosomeThing();
}

// 同样要在回调里更新标记
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
    _isInitialized = true;
}

public void OnInitializeFailed(InitializationFailureReason error)
{
    Debug.LogError($"IAP初始化失败:{error}");
}

为什么原来的WaitForSeconds不行?

Unity IAP的初始化时间受网络状态、设备性能影响,可能1秒不够(比如网络卡顿),导致后续逻辑执行时初始化还没完成;也可能浪费时间(比如0.2秒就完成了,还要空等0.8秒),只有靠回调或状态标记的方式,才能精准、可靠地等待初始化完成。

内容的提问来源于stack exchange,提问作者stingalimian galimian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:35:29