spine 二进制 动态加载 播放第一个动画

async loadRemoteSpine ( ) { const remoteUrl = 'http://your-server.com/spine/hero' ; try { // 加载 .skel 二进制文件 const skelData = await this . loadRemoteAsset ( ${ remoteUrl } .skel , sp . SkeletonData ) ; // 加载 .atlas 文本 const atlasText = await this . loadRemoteAsset ( ${ remoteUrl } .atlas , null , 'text' ) ; // 加载纹理图片 const texture = await this . loadRemoteAsset ( ${ remoteUrl } .png , Texture2D ) ; // 创建 SkeletonData const skeletonData = new sp . SkeletonData ( ) ; skeletonData . atlasText = atlasText ; skeletonData . textures = [ texture ] ; skeletonData . textureNames = [ 'hero' ] ; skeletonData . _nativeAsset = skelData ; // 创建并播放 Spine 动画(同上) // ... } catch ( error ) { console . error ( '远程加载失败:' , error ) ; } } private loadRemoteAsset < T > ( url : string , assetType ? : any , responseType ? : string ) : Promise < T > { return new Promise ( ( resolve , reject ) => { assetManager . loadRemote ( url , { ext : '.skel' } , ( err , asset ) => { if ( err ) { reject ( err ) ; return ; } // 根据类型返回数据 if ( responseType === 'text' ) { resolve ( asset . text ) ; } else { resolve ( asset as T ) ; } } ) ; } ) ; }

let spData = new sp.SkeletonData();
let spr = assetPng.asset as SpriteFrame;
// spData.skeletonJson = (assetJsonOrSkel['json'] || assetJsonOrSkel);
if(assetJsonOrSkel['json']){
spData.skeletonJson = (assetJsonOrSkel as Asset)['json'];
}
else if(assetJsonOrSkel._nativeAsset){
spData._nativeAsset = (assetJsonOrSkel as sp.SkeletonData)._nativeAsset;
}
spData.atlasText = (assetAtlas['text'] || assetAtlas);
spData.textures = [spr.texture as Texture2D];
spData.textureNames = [assetPng.fileName];
spData._uuid = assetJsonOrSkel.uuid

let json = this.upLoadSpine.spine.skeletonData.skeletonJson;
if(json){
let nameList: string[] = Object.keys(json["animations"]);
event.SpineName = nameList[0];
}else{
event.SpineName = this.upLoadSpine.spine.skeletonData["_skeletonCache"]["animations"][0].name;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容