一些必须通过异步处理,又需要赋值的情况下,可以用使用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;
}