[Editor Extension] How to set spriteFrame from AssetDB

Hi friends.

I want to make an editor extension and automatically replace some of sprite frames of sprite components in the scene via searching and finding with names corresponding sprite frames from an atlas in asset db.

I used scene walker script in editor extension and managed to find sprites in asset database with queryAssets:

Editor.assetdb.queryAssets( 'db://assets/**\/*', 'sprite-frame', function ( err, results ) {
     Editor.log("URL: " + result.url);
}

And I have managed to get corresponding sprite in the scene:

let scene = cc.director.getScene();
let node = scene.getChildByName("smsg_logo_512_rgb");
let sprite = node.getComponent(cc.Sprite);
sprite.spriteFrame = result; // this doesn't work

But I can’t set spriteframe from the query. How can I do that?

Here is the screenshot:

@slackmoehrle @jare can you help me guys? Thanks.

Yessss! I did it! :smiley:
I should had to load it with cc.loader.load(…) using “uuid”

    var self = this;
    Editor.assetdb.queryAssets( 'db://assets/**\/*', 'sprite-frame', function ( err, results ) {
        results.forEach(function ( result ) {
            let sf_name = result.url.split('\\').pop().split('/').pop();
            if(sf_name === "smsg_logo_512_rgb.png"){
                cc.loader.load({uuid:result.uuid, type: 'uuid'}, function (err, sprite_frame) {
                    let scene = cc.director.getScene();
                    let node = scene.getChildByName("smsg_logo_512");
                    node.getComponent(cc.Sprite).spriteFrame = sprite_frame;
                });     
            }
        });
    });

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.