我晚上下班回家后在这里发一下代码吧,我在家里电脑上改的
谢谢大佬

import { _decorator, Component, Node, sp } from 'cc';
const { ccclass, property } = _decorator;
let indexCount = 0;
@ccclass('test')
export class test extends Component {
start() {
//@ts-ignore
sp.Skeleton.prototype._render = function(batcher: any) {
if (this._renderData && this._drawList) {
const rd = this._renderData;
const chunk = rd.chunk;
const accessor = chunk.vertexAccessor;
const meshBuffer = rd.getMeshBuffer()!;
const origin = meshBuffer.indexOffset;
indexCount = 0;
// Fill index buffer
accessor.appendIndices(chunk.bufferId, rd.indices!);
for (let i = 0; i < this._drawList.length; i++) {
const dc = this._drawList.data[i];
if (dc.texture) {
indexCount += dc.indexCount;
}
}
if (this._drawList.length > 0){
this._drawIdx = this._drawList.length - 1;
const dc = this._drawList.data[0];
if (dc.texture){
const ib = meshBuffer.requireFreeIA(batcher.device);
ib.firstIndex = origin;
ib.indexCount = indexCount;
batcher.commitIA(this, ib, dc.texture, dc.material!, this.node);
}
}
}
}
}
}
7赞
这样就能单spine内合批了,不过没有多测试,如果测试有啥问题可以一起讨论讨论
大佬这写法牛啊,我是用的继承还要重写挂组件,学到
哈哈,毕竟用不到修改太多的代码
这个2.4适用吗大佬,适用的话我也去改了试一下
楼下有大佬代码,一起测试下呗
这个不适用于2.x,对于2.x底层我研究的不多
好的,3q
我找动画的伙伴确认了下用了叠加模式的动画会出问题,还有就是想请教下大佬this._drawIdx的_drawIdx在哪儿用到的啊,我没看到这个变量在哪儿用到了,给您个测试用的动画有空帮我瞧瞧么spine.zip (981.5 KB) ,还有个问题我在想如果一个spine动画里面有多个图集会不会又问题呢
如果用了叠加模式,估计是材质有所不同,如果多个图集,会出问题,解决方法是可以代码写的更智能一点,遍历到使用相同材质和相同图集的合批,其它就不合批。其它问题我下班看看
用材质判断哦,我还在去找叠加的变量呢
,谢谢大佬指点,我再去看看
叠加一般是材质相关,而普通合批的先决条件就是同一个材质,同一个或可合并的纹理
去2.4.x里看了看,连个相同的方法名字都找不到。哎。
大佬,看看我的帖子,有空解答一下。谢谢哈。
改了源码之后那个人物的背景变黑了,我提供的文件里好像给了给了对比图 的吧
仔细研究了下,因为用到叠加模式的spine无法用同一个材质,也就无法合批,因为引擎的叠加是每一个材质一种叠加模式的,除非更深层的修改数据,让spine的各层数据统一进入各个顶点在材质内部做叠加,但这不现实,会增加不少存储数据,得不偿失。
那现在能做到就加个判断如果有叠加就不合批,没有叠加就用您改的那个逻辑是不

