[原]unity中WWW isDone方法只能在主线程中调用

项目中要使用动态加载,原计划是生成WWW对象后,放到一个容器里。由一个独立线程轮询容器里的对象,如果www.isDone为true时,回调一个接口把结果交给请求方。

 

new Thread( new ThreadStart( XXX.run ) );

 

运行以后出现下面错误:

详细错误:

get_isDone  can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.

提示只能在主线程中调用isDone方法

 

无奈,原来线程中轮询的代码放到MonoBehaviour的派生类中,利用update()方法被循环(每一桢)调用的特点来轮询容器。

update是每一桢调用,这样的轮询间隔没有必要,所以需要在update方法中加一deltaTime的累加,到达需要的步长时再执行业务代码。updateStep为0时则不执行延迟调用。

 

private updateStep = 0;

void Update(
    if( 0 < updateStep ){
        tm += Time.deltaTime;
        if( tm >= 2 ){
            tm = 0f;
            update();  // Call custom update
        }
    } else {
        update();     // Call custom update
    }
}

 

 

转载于:https://www.cnblogs.com/basecn/p/3264294.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值