Resources异步加载

本文介绍了Unity中Resources异步加载的重要性,以避免因加载大资源导致的程序卡顿。详细阐述了两种异步加载方法:通过完成事件监听和使用协程,并对比了它们在处理复杂逻辑和并行加载上的差异。对于需要实现异步加载单例和避免重复加载的场景,提供了一种可能的实现思路。
摘要由CSDN通过智能技术生成

1、Resources异步加载

如果加载过多、过大的资源可能会造成程序卡顿,卡顿的原因时从硬盘上把数据读取到内存中,是需要进行计算的,越大的资源耗时越长,就会造成掉帧卡顿。

Resources异步加载,就是内部新开一个线程进行资源加载,不会造成主线程卡顿

2、Resources异步加载方法

注意:异步加载不能马上得到加载的资源,至少要等一帧

(1)通过异步加载中的完成事件监听,使用加载的资源

刚刚执行了异步加载的执行代码资源还没有加载完毕,不能直接使用,一定要等加载结束后才能使用

Texture tex;
private void LoadOver(AsyncOperation rq) {
    print("加载结束")
    tex = (rq as ResourceRequest).asset
    ......
}

// 新开一个线程进行资源加载
ResourceRequest rq = Resource.LoadAsync<Texture>("Tex/TestJpg");
// 资源加载结束后进行相关的事件监听回调
rq.completed += LoadOver;

private void Update() {
    // 使用前要对tex进行判空
    if (tex != null)
        ......
}

(2)通过协程使用加载的资源

StartCoroutine(Load());

IEnumerator Load() {
    // 迭代器函数遇到yield return时就会停止执行之后的代码(分步)
    // 然
在Cocos中,可以使用以下方法来异步加载资源: 1. 使用cc.loader.loadRes()方法,该方法可以异步加载资源并在加载完成后执行回调函数。例如: ``` cc.loader.loadRes('prefabs/myPrefab', function (err, prefab) { if (err) { cc.log(err); return; } cc.log('My prefab loaded successfully'); }); ``` 2. 使用cc.loader.load()方法,该方法可以异步加载网络上的资源并在加载完成后执行回调函数。例如: ``` cc.loader.load('http://www.myserver.com/image.png', function (err, texture) { if (err) { cc.log(err); return; } cc.log('My texture loaded successfully'); }); ``` 3. 使用cc.loader.loadResDir()方法,该方法可以异步加载一个文件夹中的所有资源并在加载完成后执行回调函数。例如: ``` cc.loader.loadResDir('res/prefabs', function (err, prefabs) { if (err) { cc.log(err); return; } cc.log('My prefabs loaded successfully'); }); ``` 4. 使用cc.loader.loadResArray()方法,该方法可以异步加载一个资源数组并在加载完成后执行回调函数。例如: ``` var myRes = ['prefabs/myPrefab', 'images/myImage.png']; cc.loader.loadResArray(myRes, function (err, resources) { if (err) { cc.log(err); return; } cc.log('My resources loaded successfully'); }); ``` 这些方法都支持使用Promise方式进行异步加载。例如: ``` cc.loader.loadRes('prefabs/myPrefab') .then(function (prefab) { cc.log('My prefab loaded successfully'); }) .catch(function (err) { cc.log(err); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值