unity3d使用Coroutines传递返回值(.NET 3.5)

一些必须通过异步处理,又需要赋值的情况下,可以用使用action委托来操作。一个简单的例子:

public Texture2D texture2D;

void Start()
{
    StartCoroutine(LoadBundleTexAsync((value) => texture2D = value, filepath, filename));
}

IEnumerator LoadTextureAsync(Action<Texture2D> result, string filepath, string filename)
{
    string bundleName = string.Format("{0}/{1}.unity3d", filepath, filename);
    string path = Path.Combine(dir, bundleName);

    byte[] bytes = File.ReadAllBytes(path);
    AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(bytes);
    yield return request;
    AssetBundle bundle = request.assetBundle;

    Texture2D texture2D = bundle.LoadAsset<Texture2D>(bundle.AllAssetNames()[0]);
    result(texture2D);

    //延迟到下一帧执行卸载
    yield return new WaitForEndOfFrame();
    bundle.Unload(false);
    bundle = null;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值