spine局部换装

  • Creator 版本:

  • 目标平台:

  • 详细报错信息,包含调用堆栈:

  • 重现方式:

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:

  • 额外线索:

spine局部换装
因为近期项目(对标跳跳神枪手)中需要用到 spine , 进行任务中枪支的更换. 奈何 creator 官方文档实在极简, 论坛又资料不详, 幸运的是上网找到了篇资料, 证实有效, 现在特意做个记录
先上链接: https://my.oschina.net/u/3905200/blog/1844674
1 了解 spine 结构:
skeleton --> bones(骨骼) --> slot(插槽) --> attachmnet(附件)

    2 替换过程

    (1) creator 编辑器:  spine 文件拖入官方提供组件中, 我们的需求就是要在游戏中替换黄色椭圆中的枪支
   
    (2) 代码逻辑

var spine = this.spine = this.getComponent(‘sp.Skeleton’); //定义当前节点脚本组件 sp.Skeleton
//局部换装: skeleton(脚本组件), slotName(需要替换图片的插槽名字), targetSkinName(替换目标的皮肤名字), targetAttaName(用于替换的附件名字)
chaneSkin(){
let skeleton = this.spine;
let slotName = ‘gun’;
let targetSkinName = ‘default’;
let targetAttaName = “gun4”;
const slot = skeleton.findSlot(slotName);
const skeletonData = skeleton.skeletonData.getRuntimeData();
const slotIndex = skeletonData.findSlotIndex(slotName);
const skin = skeletonData.findSkin(targetSkinName);
const atta = skin.getAttachment(slotIndex, targetAttaName);

console.log(‘change cloth:’, slot, skin, slotIndex, atta);

slot.setAttachment(atta);
},

    2 代码替换原理
   (1) 获取得到当前需要更换附件的插槽数据(包括 index attachment);
   (2) 获取当前皮肤下用于替换的附件;
   (3) 在当前插槽下设置更换附件;

后记: ok, 到此局部更换spine皮肤功能就完成了, 欢迎加v: liang13979850665 能一起讨论学习,–热爱游戏开发者_shl1937

6赞

这种方式,必须是要是插槽才行?如果要变换的东西多了,第一次加载的时候,会很卡的

是否有原生那种可以直接替换纹理贴图的方式去实现换装,而不是去替换附件

最近研究了一下局部换装,刚好可以来回答这个问题。
首先:是否有原生那种可以直接替换纹理贴图的方式去实现换装,而不是去替换附件?
没有,需要自己改底层。

前提:
首先肯定要能动态替换,不能一次性加载所有图集资源(功能迭代后,换装越来越多,加载越来越卡是不能被接受的),然后又要保证和spine底层的设计尽可能的贴合,并且还有一个点就是,我们需要注意不要因为替换了原来的attachment(附件)的数据,导致想还原最初的样子的时候,又需要加载一张贴图。
题主的方案,没有解决非一次性加载资源的问题。
修改思路:
修改的方案可以比较简单:
1.首先我们使用这张纹理,构建spine内部的page和region。
2.然后用region去更新对应的attachment(附件)的相关数据。
这样就可以了。
需要注意的是,这个是有局限性的。在2的描述中,有“相关数据”,代表不是所有数据。
这里比较繁杂,就是一些json里的数据,如果是mesh的类型,就有triangles,uv,等信息。
所有如果使用这种替换,需要注意前后纹理是能满足这些要求的。
更多具体的,可以自己研究一下。

大神,能写个demo吗

有demo,但是上传没有用哈。因为要涉及c++修改。你看一下哪里思路不清楚,我可以解释一下

方便加QQ123244355讨教下吗

嗯嗯可以的

可以加QQ 244369852 详细聊下么

mark

mark

楼主,我问一下,人物的所有枪支都是在一个插槽(slot)下吗?还是每个插槽下有一把武器(比如说有十把武器,这十把武器分别在十个插槽下),能否把你的spine的动画武器结构给我看一下呢?谢谢

mark

能换成功,但是我切换动画就变回了原来的这个是什么问题?

还有后续吗

楼主,能给个demo嘛?

提供技术来换

怎么一个说法?