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;
}