android 子线程和主线程数据交互_Unity 子线程调用主线程

在Unity中,子线程是无法调用Unity主线程的API的,因为unity不允许这么干。

v2-82b32db317e99b32133bfd4cb461a54b_b.jpg

但是我们可以通过别的途径,实现这一功能。

大致思路:

将子线程中需要调用的函数,通过委托传递给Loom中的委托列表,在Loom中去调用该委托。因为Loom是继承MonoBehavior的,挂载在空物体上面,所以由他去执行委托,自热是没问题的!

v2-ed8d0d32105ca6758dabd615c4ceb152_b.jpg

详细思路:

  1. 一开始在Unity中创建一个新物体obj,挂上Loom脚本。
  2. Loom中有List<Action> listActions;
  3. 将子线程中的函数,以委托的形式,传递给listActions,Loom在Updata里面,轮询去调用委托。
  4. 巧妙的将子线程无法调用主线程的API 转化为 子线程传递给空物体上面的Loom,在Loom里面去调用委托来调用主线程API。

Loom.cs:

using 

常规的出错用法:

Text 

使用Loom.cs:

Text 

需要注意的是,应当提前把Loom实例化出来。

其实在上述的测试代码中,在ThreadFun()中调用Loom函数,Loom已经执行了初始化了。

假如这是第一次调用Loom,那么会触发Loom的初始化函数Initialize(),会执行 new GameObject("Loom"),相当于还是在子线程中调用主线程代码,还是行不通 会报错的。所以我们要提前给Loom实例化。

方法有2:

1.手动在场景中创建一个空物体,挂上Loom脚本

v2-fa64d398678a9eb33212a9c01cb4a05d_b.jpg

2.在游戏启动的时候,主动调用Loom的初始化函数。假设GameManager.cs 是游戏的管理启动脚本

GameManager.cs :

void 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值