在编辑器内是 Sprite 可以正常显示的,对应的材质效果也有,但在浏览器中节点存在, Sprite 组件也存在,但图片看不见。
查了不少文章,已经把 spriteFrame 的 Packable 去掉了勾选,项目设置宏勾选了CLEANUP_IMAGE_CACHE ,同时在脚本中的最外层写了 macro.CLEANUP_IMAGE_CACHE = true; DynamicAtlasManager.instance.enabled = false;。而且试了3.8.5、3.8.4、3.4.1,都不行。
CCEffect %{
techniques:
- name: opaque
passes:
- vert: legacy/main-functions/general-vs:vert # builtin header
frag: hole-fs:frag
properties: &props
holeCenter: { value: [0.5, 0.5] } # 挖孔的中心位置
holeSize: { value: [0.4, 0.4] } # 挖孔的宽度和高度
holeBlurRadius: { value: 0.05 } # 虚化半径
- name: transparent
passes:
- vert: general-vs:vert # builtin header
frag: hole-fs:frag
blendState:
targets:
- blend: true
blendSrc: src_alpha
blendDst: one_minus_src_alpha
blendSrcAlpha: src_alpha
blendDstAlpha: one_minus_src_alpha
properties: *props
}%
CCProgram hole-fs %{
precision highp float;
#include <legacy/output>
#include <sprite-texture>
uniform Constant {
vec2 holeCenter; // 挖孔的中心
vec2 holeSize; // 挖孔的宽度和高度
float holeBlurRadius; // 虚化半径
};
in vec2 v_uv; // 纹理坐标
vec4 frag () {
// 计算矩形的四条边距离
float distX = max(abs(v_uv.x - holeCenter.x) - holeSize.x * 0.5, 0.0);
float distY = max(abs(v_uv.y - holeCenter.y) - holeSize.y * 0.5, 0.0);
// 计算离矩形边缘的总距离
float dist = length(vec2(distX, distY));
// 应用虚化效果:在边缘处应用逐渐减小的透明度
float fade = smoothstep(0.0, holeBlurRadius, dist);
// 如果当前像素在孔内或已经超出虚化边缘,则丢弃该像素
if (fade < 0.1) {
discard;
}
// 否则显示纹理,乘上透明度(虚化效果)
vec4 col = texture(cc_spriteTexture, v_uv);
col.a *= fade; // 根据虚化程度调整透明度
return col;
}
}%
上传不了项目压缩包,可我就是个新建2D空项目,一个.effect、一个材质、一个场景和一个脚本而已呀


