如何从cc.loader的缓存中获取图片资源?

prefab中引用的资源,比如图集,是否在加载引用该图集的prefab时,自动加载到内存中,而无需显式调用cc.loader.loadRes进行加载?

某个menu.prefab中引用到了ui.plist图集,这些资源都在resouces目录下;
但是我在代码中只通过cc.loader.loadRes对menu.prefab进行了加载,并没有显式加载ui.plist/png;
然后也能正常显示。

如果是这样的,那么我如何获取到ui.plist图集中其他spriteFrame呢?

如果代码中加载了ui.plist图集,我可以保存cc.SpriteAtlas的引用,通过这个来获取,比如:
sprite_frame = my_spriteatlas_ref.getSpriteFrame(frame_name);
但这种自动加载的图集,这个cc.SpriteAtlas的引用该如何获取到?cc.loader中没找到通过名字就能获取的接口。

可以用loadRes来加载图集和图片

确实可以通过再次调用cc.loader.loadRes来获取这个图集的引用,但是感觉这种写法不正规,因为从代码字面意思看是需要去加载这个图集,但其实已经加载过了,已经再缓存了,不需要再次加载了。我只需要获取这个资源的引用就可以。

我想问的是有没有类似这样的接口:
let sprite_atlas = cc.loader.getSpriteAtlasByName(“ui”);
let sprite_frame = sprite_atlas.getSpriteFrame(frame_name);

貌似没有这种接口,可能需要自己保存图集的引用。其实如果资源已经加载了,loadRes是不会再去加载一遍的,而是直接从内存中读取。个人感觉用loadRes更好一点,因为你不能保证使用的资源是否在内存中,可能还没加载上来,也可能已经被释放了。

已经在内存中的话可以使用getRes

cc.loader.loadResArray(loadRes, cc.Asset, progressCallback, function (error: Error, resource: any[]) {
resource.forEach(element => {
if (element.constructor == cc.Texture2D) {
//element.name怎么是空""
}

感谢回复。看来加载时保存一下引用是不错的解决方案