From 83aeff8ac5c5bdb84acf3e01071f8c76e289ff06 Mon Sep 17 00:00:00 2001 From: caizhitao Date: Mon, 22 Jun 2020 18:42:11 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=86=85=E5=8F=91?= =?UTF-8?q?=E5=85=89=E7=89=88=E6=9C=AC2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/effects/sprite-glow-inner-v2.effect | 258 ++++++++++++++++++ .../effects/sprite-glow-inner-v2.effect.meta | 17 ++ assets/materials/sprite-glow-inner-v2.mtl | 18 ++ .../materials/sprite-glow-inner-v2.mtl.meta | 6 + assets/scenes/GlowInnerEffectScene.fire | 10 +- 5 files changed, 303 insertions(+), 6 deletions(-) create mode 100644 assets/effects/sprite-glow-inner-v2.effect create mode 100644 assets/effects/sprite-glow-inner-v2.effect.meta create mode 100644 assets/materials/sprite-glow-inner-v2.mtl create mode 100644 assets/materials/sprite-glow-inner-v2.mtl.meta diff --git a/assets/effects/sprite-glow-inner-v2.effect b/assets/effects/sprite-glow-inner-v2.effect new file mode 100644 index 0000000..cc12637 --- /dev/null +++ b/assets/effects/sprite-glow-inner-v2.effect @@ -0,0 +1,258 @@ +// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + +CCEffect %{ + techniques: + - passes: + - vert: vs + frag: fs + blendState: + targets: + - blend: true + rasterizerState: + cullMode: none + properties: + texture: { value: white } + alphaThreshold: { value: 0.5 } + # 自定义参数 + # 发光颜色 + glowColor: { + value: [1.0, 1.0, 0.0, 1.0], + editor: { + type: color, + tooltip: "发光颜色" + } + } + # 发光宽度 + glowColorSize: { + value: 0.2, + editor: { + tooltip: "发光宽度", + range: [0.0, 1.0], + } + } + # 发光透明度阈值 + # 只有超过这个透明度的点才会发光 + # 一般用于解决图像边缘存在渐变透明的时,决定超过这个透明度阈值的边缘点才点发光,具体可以操作一下 + glowThreshold: { + value: 0.1, + editor: { + tooltip: "发光阈值", + range: [0.0, 1.0] + } + } +}% + + +CCProgram vs %{ + precision highp float; + + #include + #include + + in vec3 a_position; + in vec4 a_color; + out vec4 v_color; + + #if USE_TEXTURE + in vec2 a_uv0; + out vec2 v_uv0; + #endif + + void main () { + vec4 pos = vec4(a_position, 1); + + #if CC_USE_MODEL + pos = cc_matViewProj * cc_matWorld * pos; + #else + pos = cc_matViewProj * pos; + #endif + + #if USE_TEXTURE + v_uv0 = a_uv0; + #endif + + v_color = a_color; + + gl_Position = pos; + } +}% + + +CCProgram fs %{ + precision highp float; + + #include + + in vec4 v_color; + + #if USE_TEXTURE + in vec2 v_uv0; + uniform sampler2D texture; + #endif + + #if SHOW_INNER_GLOW + + uniform glow { + // 发光颜色 + vec4 glowColor; + // 发光范围 + float glowColorSize; + // 发光阈值 + float glowThreshold; + // 特别地,必须是 vec4 先于 float 声明 + }; + + /** + * 获取纹理uv颜色 + * + * 主要实现:超出边界的统一返回 vec4(0.0, 0.0, 0.0, 0.0) + * + * 在 Cocos Creator 2.2.1 的编辑器中,超出边界的uv并不是返回 vec4(0.0, 0.0, 0.0, 0.0),实际返回为 + * + * * 超出左边界的uv,返回 v_uv0.x = 0 的颜色 + * * 超出右边界的uv,返回 v_uv0.x = 1 的颜色 + * * 超出上边界的uv,返回 v_uv0.y = 1 的颜色 + * * 超出下边界的uv,返回 v_uv0.y = 0 的颜色 + * + * 和实际在浏览器上显示(超出边界即为透明)的有区别,为了统一,这里适配一下,这样子,在编辑器上预览的效果就能和实际浏览器的保持一致 + */ + vec4 getTextureColor(sampler2D texture, vec2 v_uv0) { + if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) { + return vec4(0.0, 0.0, 0.0, 0.0); + } + return texture(texture, v_uv0); + } + + + /** + * 获取指定角度方向,距离为xxx的像素的透明度 + * + * @param angle 角度 [0.0, 360.0] + * @param dist 距离 [0.0, 1.0] + * + * @return alpha [0.0, 1.0] + */ + float getColorAlpha(float angle, float dist) { + // 角度转弧度,公式为:弧度 = 角度 * (pi / 180) + // float radian = angle * 0.01745329252; // 这个浮点数是 pi / 180 + float radian = radians(angle); + vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian))); + return color.a; + } + + /** + * 获取指定距离的周边像素的透明度平均值 + * + * @param dist 距离 [0.0, 1.0] + * + * @return average alpha [0.0, 1.0] + */ + float getAverageAlpha(float dist) { + float totalAlpha = 0.0; + // 以30度为一个单位,那么「周边一圈」就由0到360度中共计12个点的组成 + totalAlpha += getColorAlpha(0.0, dist); + totalAlpha += getColorAlpha(30.0, dist); + totalAlpha += getColorAlpha(60.0, dist); + totalAlpha += getColorAlpha(90.0, dist); + totalAlpha += getColorAlpha(120.0, dist); + totalAlpha += getColorAlpha(150.0, dist); + totalAlpha += getColorAlpha(180.0, dist); + totalAlpha += getColorAlpha(210.0, dist); + totalAlpha += getColorAlpha(240.0, dist); + totalAlpha += getColorAlpha(270.0, dist); + totalAlpha += getColorAlpha(300.0, dist); + totalAlpha += getColorAlpha(330.0, dist); + return totalAlpha * 0.0833; // 1 / 12 = 0.08333 + } + + /** + * 获取发光的透明度 + */ + float getGlowAlpha() { + // 如果发光宽度为0,直接返回0.0透明度,减少计算量 + if (glowColorSize == 0.0) { + return 0.0; + } + + // 因为我们是要做内发光,所以如果点本来是透明的或者接近透明的 + // 那么就意味着这个点是图像外的透明点或者图像内透明点(如空洞)之类的 + // 内发光的话,这些透明点我们不用处理,让它保持原样,否则就是会有内描边或者一点扩边的效果 + // 同时也是提前直接结束,减少计算量 + vec4 srcColor = getTextureColor(texture, v_uv0); + if (srcColor.a <= glowThreshold) { + return srcColor.a; + } + + // 将传入的指定距离,平均分成10圈,求出每一圈的平均透明度, + // 然后求和取平均值,那么就可以得到该点的平均透明度 + float totalAlpha = 0.0; + totalAlpha += getAverageAlpha(glowColorSize * 0.1); + totalAlpha += getAverageAlpha(glowColorSize * 0.2); + totalAlpha += getAverageAlpha(glowColorSize * 0.3); + totalAlpha += getAverageAlpha(glowColorSize * 0.4); + totalAlpha += getAverageAlpha(glowColorSize * 0.5); + totalAlpha += getAverageAlpha(glowColorSize * 0.6); + totalAlpha += getAverageAlpha(glowColorSize * 0.7); + totalAlpha += getAverageAlpha(glowColorSize * 0.8); + totalAlpha += getAverageAlpha(glowColorSize * 0.9); + totalAlpha += getAverageAlpha(glowColorSize * 1.0); + return totalAlpha * 0.1; + } + + #endif + + void main () { + vec4 o = vec4(1, 1, 1, 1); + + #if USE_TEXTURE + o *= texture(texture, v_uv0); + #if CC_USE_ALPHA_ATLAS_TEXTURE + o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r; + #endif + #endif + + o *= v_color; + + ALPHA_TEST(o); + + gl_FragColor = o; + + #if SHOW_INNER_GLOW + // 目标颜色(图像) + vec4 color_dest = o; + + // 获取发光透明度 + // 此时我们得到的是内部透明度为1,靠近边缘的为接近0的透明度,其他位置为0的透明度 + float alpha = getGlowAlpha(); + + // 而内发光是从边缘开始的,那么什么算是边缘呢? + // 如果图像边缘有大量渐变,那么如果我们取大于 0.0 点就算是图像内的话,那么可能边缘会出现锯齿 + // 因此为了确定边缘,引入了发光阈值,我们只需要比较一下发光阈值就可以,大于发光阈值的点都是(图像内)发光点 + if (alpha > glowThreshold) { + + // 内发光是从边缘发光的,是需要内部透明度为0,靠近边缘的接近1的透明度 + // 因此我们需要翻转一下透明度 + alpha = 1.0 - alpha; + + // 给点调料,让靠近边缘的更加亮 + alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0; + } + // 源颜色(内发光) + vec4 color_src = glowColor * alpha; + + // 按照这个顺序,源颜色就是内发光颜色,目标颜色就是图案颜色色 + // 所以命名就是 color_src, color_dest + + // 按照混合颜色规则 http://docs.cocos.com/creator/manual/zh/advanced-topics/ui-auto-batch.html#blend-%E6%A8%A1%E5%BC%8F + // 要在图案上方,叠加一个内发光,将两者颜色混合起来,那么最终选择的混合模式如下: + // + // (内发光)color_src: GL_SRC_ALPHA + // (原图像)color_dest: GL_ONE + // + // 即最终颜色如下: + // color_src * GL_SRC_ALPHA + color_dest * GL_ONE + + gl_FragColor = color_src * color_src.a + color_dest; + #endif + } +}% diff --git a/assets/effects/sprite-glow-inner-v2.effect.meta b/assets/effects/sprite-glow-inner-v2.effect.meta new file mode 100644 index 0000000..bd6790a --- /dev/null +++ b/assets/effects/sprite-glow-inner-v2.effect.meta @@ -0,0 +1,17 @@ +{ + "ver": "1.0.25", + "uuid": "c49fbec9-7e8c-4114-a058-354eebd04446", + "compiledShaders": [ + { + "glsl1": { + "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform vec4 glowColor;\nuniform float glowColorSize;\nuniform float glowThreshold;\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" + }, + "glsl3": { + "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform glow {\n vec4 glowColor;\n float glowColorSize;\n float glowThreshold;\n};\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" + } + } + ], + "subMetas": {} +} \ No newline at end of file diff --git a/assets/materials/sprite-glow-inner-v2.mtl b/assets/materials/sprite-glow-inner-v2.mtl new file mode 100644 index 0000000..525a6bd --- /dev/null +++ b/assets/materials/sprite-glow-inner-v2.mtl @@ -0,0 +1,18 @@ +{ + "__type__": "cc.Material", + "_name": "New Material", + "_objFlags": 0, + "_native": "", + "_effectAsset": { + "__uuid__": "c49fbec9-7e8c-4114-a058-354eebd04446" + }, + "_techniqueIndex": 0, + "_techniqueData": { + "0": { + "defines": { + "USE_TEXTURE": true, + "SHOW_INNER_GLOW": true + } + } + } +} \ No newline at end of file diff --git a/assets/materials/sprite-glow-inner-v2.mtl.meta b/assets/materials/sprite-glow-inner-v2.mtl.meta new file mode 100644 index 0000000..c7cf582 --- /dev/null +++ b/assets/materials/sprite-glow-inner-v2.mtl.meta @@ -0,0 +1,6 @@ +{ + "ver": "1.0.3", + "uuid": "ed801db5-01ea-4505-b505-e661a3f1bb07", + "dataAsSubAsset": null, + "subMetas": {} +} \ No newline at end of file diff --git a/assets/scenes/GlowInnerEffectScene.fire b/assets/scenes/GlowInnerEffectScene.fire index 557f40e..3de5a16 100755 --- a/assets/scenes/GlowInnerEffectScene.fire +++ b/assets/scenes/GlowInnerEffectScene.fire @@ -174,7 +174,7 @@ "array": [ 0, 0, - 324.7595264191645, + 399.23771114462625, 0, 0, 0, @@ -5145,7 +5145,6 @@ }, "_resize": 1, "_N$layoutType": 2, - "_N$padding": 0, "_N$cellSize": { "__type__": "cc.Size", "width": 40, @@ -5310,7 +5309,7 @@ "_enabled": true, "_materials": [ { - "__uuid__": "647e873f-e0ed-4ce7-84cb-9e4d4f8a211f" + "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" } ], "_srcBlendFactor": 770, @@ -5404,7 +5403,7 @@ "_enabled": true, "_materials": [ { - "__uuid__": "647e873f-e0ed-4ce7-84cb-9e4d4f8a211f" + "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" } ], "_srcBlendFactor": 770, @@ -5498,7 +5497,7 @@ "_enabled": true, "_materials": [ { - "__uuid__": "647e873f-e0ed-4ce7-84cb-9e4d4f8a211f" + "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" } ], "_useOriginalSize": false, @@ -5564,7 +5563,6 @@ }, "_resize": 1, "_N$layoutType": 2, - "_N$padding": 0, "_N$cellSize": { "__type__": "cc.Size", "width": 40, From 97d4af5d69e4bb2f35a01c439cfcb19dc4d58f53 Mon Sep 17 00:00:00 2001 From: caizhitao Date: Tue, 23 Jun 2020 14:48:50 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/materials/sprite-glow-inner-v2.mtl | 12 +- assets/scenes/GlowInnerEffectScene.fire | 145 ++++++++++++++++++---- assets/textures/shark_1.png | Bin 0 -> 36377 bytes assets/textures/shark_1.png.meta | 36 ++++++ 4 files changed, 168 insertions(+), 25 deletions(-) create mode 100644 assets/textures/shark_1.png create mode 100644 assets/textures/shark_1.png.meta diff --git a/assets/materials/sprite-glow-inner-v2.mtl b/assets/materials/sprite-glow-inner-v2.mtl index 525a6bd..e380191 100644 --- a/assets/materials/sprite-glow-inner-v2.mtl +++ b/assets/materials/sprite-glow-inner-v2.mtl @@ -1,6 +1,6 @@ { "__type__": "cc.Material", - "_name": "New Material", + "_name": "sprite-glow-inner-v2", "_objFlags": 0, "_native": "", "_effectAsset": { @@ -12,6 +12,16 @@ "defines": { "USE_TEXTURE": true, "SHOW_INNER_GLOW": true + }, + "props": { + "glowColorSize": 0.1, + "glowColor": { + "__type__": "cc.Color", + "r": 255, + "g": 0, + "b": 87, + "a": 255 + } } } } diff --git a/assets/scenes/GlowInnerEffectScene.fire b/assets/scenes/GlowInnerEffectScene.fire index 3de5a16..2028183 100755 --- a/assets/scenes/GlowInnerEffectScene.fire +++ b/assets/scenes/GlowInnerEffectScene.fire @@ -77,14 +77,14 @@ ], "_active": true, "_components": [ - { - "__id__": 124 - }, - { - "__id__": 125 - }, { "__id__": 126 + }, + { + "__id__": 127 + }, + { + "__id__": 128 } ], "_prefab": null, @@ -174,7 +174,7 @@ "array": [ 0, 0, - 399.23771114462625, + 415.97635840214735, 0, 0, 0, @@ -254,7 +254,7 @@ "_active": true, "_components": [ { - "__id__": 123 + "__id__": 125 } ], "_prefab": null, @@ -5178,15 +5178,18 @@ }, { "__id__": 119 + }, + { + "__id__": 121 } ], "_active": true, "_components": [ { - "__id__": 121 + "__id__": 123 }, { - "__id__": 122 + "__id__": 124 } ], "_prefab": null, @@ -5201,7 +5204,7 @@ "_contentSize": { "__type__": "cc.Size", "width": 384, - "height": 442 + "height": 141.29999999999998 }, "_anchorPoint": { "__type__": "cc.Vec2", @@ -5239,7 +5242,7 @@ }, { "__type__": "cc.Node", - "_name": "cocos_logo", + "_name": "shark_1", "_objFlags": 0, "_parent": { "__id__": 114 @@ -5260,6 +5263,100 @@ "b": 255, "a": 255 }, + "_contentSize": { + "__type__": "cc.Size", + "width": 553, + "height": 471 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -70.64999999999999, + 0, + 0, + 0, + 0, + 1, + 0.3, + 0.3, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "90jOWIi0BE+aHDVAvj/lOv" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 115 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "0e41233e-c8d7-4f37-b2c2-60f41472887d" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "05uYrlNcNInp1I5l0tPn9S" + }, + { + "__type__": "cc.Node", + "_name": "cocos_logo", + "_objFlags": 0, + "_parent": { + "__id__": 114 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 118 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, "_contentSize": { "__type__": "cc.Size", "width": 195, @@ -5275,7 +5372,7 @@ "ctor": "Float64Array", "array": [ 0, - -135, + -312.29999999999995, 0, 0, 0, @@ -5304,7 +5401,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 115 + "__id__": 117 }, "_enabled": true, "_materials": [ @@ -5339,10 +5436,10 @@ "__id__": 114 }, "_children": [], - "_active": true, + "_active": false, "_components": [ { - "__id__": 118 + "__id__": 120 } ], "_prefab": null, @@ -5369,7 +5466,7 @@ "ctor": "Float64Array", "array": [ 0, - -336, + -543.3, 0, 0, 0, @@ -5398,7 +5495,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 117 + "__id__": 119 }, "_enabled": true, "_materials": [ @@ -5433,10 +5530,10 @@ "__id__": 114 }, "_children": [], - "_active": true, + "_active": false, "_components": [ { - "__id__": 120 + "__id__": 122 } ], "_prefab": null, @@ -5463,7 +5560,7 @@ "ctor": "Float64Array", "array": [ 0, - -422, + -659.3, 0, 0, 0, @@ -5492,7 +5589,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 119 + "__id__": 121 }, "_enabled": true, "_materials": [ @@ -5559,7 +5656,7 @@ "_layoutSize": { "__type__": "cc.Size", "width": 384, - "height": 442 + "height": 141.29999999999998 }, "_resize": 1, "_N$layoutType": 2, @@ -5577,7 +5674,7 @@ "_N$spacingY": 36, "_N$verticalDirection": 1, "_N$horizontalDirection": 0, - "_N$affectedByScale": false, + "_N$affectedByScale": true, "_id": "ff9z0nF9BGm5zFMuGhj1jt" }, { diff --git a/assets/textures/shark_1.png b/assets/textures/shark_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f102f44f7d8d70b232d9d69851ccb42ed7d46ba6 GIT binary patch literal 36377 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 literal 0 HcmV?d00001 diff --git a/assets/textures/shark_1.png.meta b/assets/textures/shark_1.png.meta new file mode 100644 index 0000000..abb07ff --- /dev/null +++ b/assets/textures/shark_1.png.meta @@ -0,0 +1,36 @@ +{ + "ver": "2.3.4", + "uuid": "027e7b96-1718-4e86-b330-a631dc3eaa0c", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": true, + "width": 640, + "height": 480, + "platformSettings": {}, + "subMetas": { + "shark_1": { + "ver": "1.0.4", + "uuid": "0e41233e-c8d7-4f37-b2c2-60f41472887d", + "rawTextureUuid": "027e7b96-1718-4e86-b330-a631dc3eaa0c", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 5.5, + "offsetY": 0.5, + "trimX": 49, + "trimY": 4, + "width": 553, + "height": 471, + "rawWidth": 640, + "rawHeight": 480, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file From eb0023a3c42c40e73cec035a781c58b6151b3217 Mon Sep 17 00:00:00 2001 From: caizhitao Date: Tue, 23 Jun 2020 15:15:55 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E7=BA=B9=E7=90=86=E5=AE=BD=E9=AB=98=E6=AF=94=E4=BE=8B=E4=B8=8B?= =?UTF-8?q?uv=E5=8D=95=E4=BD=8D=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/effects/sprite-glow-inner-v2.effect | 29 ++- .../effects/sprite-glow-inner-v2.effect.meta | 4 +- assets/materials/sprite-glow-inner-v2.mtl | 2 +- assets/scenes/GlowInnerEffectScene.fire | 220 ++++++++++++++++-- assets/scripts/GlowInnerEffectScene.ts | 9 +- assets/textures/giraffe_1.png | Bin 0 -> 40060 bytes assets/textures/giraffe_1.png.meta | 36 +++ assets/textures/sushi_1.png | Bin 0 -> 35063 bytes assets/textures/sushi_1.png.meta | 36 +++ 9 files changed, 315 insertions(+), 21 deletions(-) create mode 100644 assets/textures/giraffe_1.png create mode 100644 assets/textures/giraffe_1.png.meta create mode 100644 assets/textures/sushi_1.png create mode 100644 assets/textures/sushi_1.png.meta diff --git a/assets/effects/sprite-glow-inner-v2.effect b/assets/effects/sprite-glow-inner-v2.effect index cc12637..ae787cf 100644 --- a/assets/effects/sprite-glow-inner-v2.effect +++ b/assets/effects/sprite-glow-inner-v2.effect @@ -22,7 +22,19 @@ CCEffect %{ tooltip: "发光颜色" } } - # 发光宽度 + spriteWidth: { + value: 500, + editor: { + tooltip: "纹理宽度" + } + } + spriteHeight: { + value: 500, + editor: { + tooltip: "纹理高度" + } + } + # 发光宽度(相对于宽度) glowColorSize: { value: 0.2, editor: { @@ -95,10 +107,19 @@ CCProgram fs %{ uniform glow { // 发光颜色 vec4 glowColor; + + // 纹理宽度(px) + float spriteWidth; + + // 纹理高度(px) + float spriteHeight; + // 发光范围 float glowColorSize; + // 发光阈值 float glowThreshold; + // 特别地,必须是 vec4 先于 float 声明 }; @@ -136,7 +157,11 @@ CCProgram fs %{ // 角度转弧度,公式为:弧度 = 角度 * (pi / 180) // float radian = angle * 0.01745329252; // 这个浮点数是 pi / 180 float radian = radians(angle); - vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian))); + float width = dist; + float height = width / (spriteWidth / spriteHeight); + float dist_fixed = sqrt(pow(width, 2.0) + pow(height, 2.0)); + vec4 color = getTextureColor(texture, v_uv0 + vec2(dist_fixed * cos(radian), dist_fixed * sin(radian))); + // vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian))); return color.a; } diff --git a/assets/effects/sprite-glow-inner-v2.effect.meta b/assets/effects/sprite-glow-inner-v2.effect.meta index bd6790a..c4ea57b 100644 --- a/assets/effects/sprite-glow-inner-v2.effect.meta +++ b/assets/effects/sprite-glow-inner-v2.effect.meta @@ -5,11 +5,11 @@ { "glsl1": { "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", - "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform vec4 glowColor;\nuniform float glowColorSize;\nuniform float glowThreshold;\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform vec4 glowColor;\nuniform float spriteWidth;\nuniform float spriteHeight;\nuniform float glowColorSize;\nuniform float glowThreshold;\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n float width = dist;\n float height = width / (spriteWidth / spriteHeight);\n float dist_fixed = sqrt(pow(width, 2.0) + pow(height, 2.0));\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist_fixed * cos(radian), dist_fixed * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" }, "glsl3": { "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", - "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform glow {\n vec4 glowColor;\n float glowColorSize;\n float glowThreshold;\n};\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform glow {\n vec4 glowColor;\n float spriteWidth;\n float spriteHeight;\n float glowColorSize;\n float glowThreshold;\n};\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n float width = dist;\n float height = width / (spriteWidth / spriteHeight);\n float dist_fixed = sqrt(pow(width, 2.0) + pow(height, 2.0));\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist_fixed * cos(radian), dist_fixed * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" } } ], diff --git a/assets/materials/sprite-glow-inner-v2.mtl b/assets/materials/sprite-glow-inner-v2.mtl index e380191..a99c7cd 100644 --- a/assets/materials/sprite-glow-inner-v2.mtl +++ b/assets/materials/sprite-glow-inner-v2.mtl @@ -14,7 +14,7 @@ "SHOW_INNER_GLOW": true }, "props": { - "glowColorSize": 0.1, + "glowColorSize": 0.01, "glowColor": { "__type__": "cc.Color", "r": 255, diff --git a/assets/scenes/GlowInnerEffectScene.fire b/assets/scenes/GlowInnerEffectScene.fire index 2028183..d6847ec 100755 --- a/assets/scenes/GlowInnerEffectScene.fire +++ b/assets/scenes/GlowInnerEffectScene.fire @@ -78,13 +78,13 @@ "_active": true, "_components": [ { - "__id__": 126 + "__id__": 130 }, { - "__id__": 127 + "__id__": 131 }, { - "__id__": 128 + "__id__": 132 } ], "_prefab": null, @@ -174,7 +174,7 @@ "array": [ 0, 0, - 415.97635840214735, + 416.1116748714887, 0, 0, 0, @@ -254,7 +254,7 @@ "_active": true, "_components": [ { - "__id__": 125 + "__id__": 129 } ], "_prefab": null, @@ -5181,15 +5181,21 @@ }, { "__id__": 121 + }, + { + "__id__": 123 + }, + { + "__id__": 125 } ], "_active": true, "_components": [ { - "__id__": 123 + "__id__": 127 }, { - "__id__": 124 + "__id__": 128 } ], "_prefab": null, @@ -5336,7 +5342,7 @@ }, { "__type__": "cc.Node", - "_name": "cocos_logo", + "_name": "sushi_1", "_objFlags": 0, "_parent": { "__id__": 114 @@ -5357,6 +5363,194 @@ "b": 255, "a": 255 }, + "_contentSize": { + "__type__": "cc.Size", + "width": 639, + "height": 287 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -249.04999999999998, + 0, + 0, + 0, + 0, + 1, + 0.5, + 0.5, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "8a1dgfWGBBmIPp6Cvii1C6" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 117 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "8eb18f86-2d97-4fbf-8d69-c5dd52df4a13" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "9b1oKjhJxMSrg6qauxRc5V" + }, + { + "__type__": "cc.Node", + "_name": "giraffe_1", + "_objFlags": 0, + "_parent": { + "__id__": 114 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 120 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 300, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -516.8, + 0, + 0, + 0, + 0, + 1, + 0.5, + 0.5, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "7ditFS1Y9KmpSmca6NZFy3" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 119 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "ca4c5d38-6446-45f6-88fc-2300852051f9" + }, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "1eCplTTO9BSJ6wePyWwtmu" + }, + { + "__type__": "cc.Node", + "_name": "cocos_logo", + "_objFlags": 0, + "_parent": { + "__id__": 114 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 122 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, "_contentSize": { "__type__": "cc.Size", "width": 195, @@ -5401,7 +5595,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 117 + "__id__": 121 }, "_enabled": true, "_materials": [ @@ -5439,7 +5633,7 @@ "_active": false, "_components": [ { - "__id__": 120 + "__id__": 124 } ], "_prefab": null, @@ -5495,7 +5689,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 119 + "__id__": 123 }, "_enabled": true, "_materials": [ @@ -5533,7 +5727,7 @@ "_active": false, "_components": [ { - "__id__": 122 + "__id__": 126 } ], "_prefab": null, @@ -5589,7 +5783,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 121 + "__id__": 125 }, "_enabled": true, "_materials": [ diff --git a/assets/scripts/GlowInnerEffectScene.ts b/assets/scripts/GlowInnerEffectScene.ts index f4b2cdb..4340470 100644 --- a/assets/scripts/GlowInnerEffectScene.ts +++ b/assets/scripts/GlowInnerEffectScene.ts @@ -86,7 +86,7 @@ export default class GlowInnerEffectScene extends cc.Component { this._updateRenderComponentMaterial({ glowColor: cc.v4(this._redSlider.progress, this._greenSlider.progress, this._blueSlider.progress, this._alphaSlider.progress), glowColorSize: realGlowWidthProgress, - glowThreshold: realGlowThresholdProgress + glowThreshold: realGlowThresholdProgress, }); } @@ -113,9 +113,12 @@ export default class GlowInnerEffectScene extends cc.Component { */ glowThreshold: number; }) { - this._examplesParentNode.children.forEach(childNode => { - childNode.getComponents(cc.RenderComponent).forEach(renderComponent => { + this._examplesParentNode.children.forEach((childNode) => { + childNode.getComponents(cc.RenderComponent).forEach((renderComponent) => { + let spriteFrameRect = (renderComponent).spriteFrame.getRect(); let material: cc.Material = renderComponent.getMaterial(0); + material.setProperty("spriteWidth", spriteFrameRect.width); + material.setProperty("spriteHeight", spriteFrameRect.height); material.setProperty("glowColorSize", param.glowColorSize); material.setProperty("glowColor", param.glowColor); material.setProperty("glowThreshold", param.glowThreshold); diff --git a/assets/textures/giraffe_1.png b/assets/textures/giraffe_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e2bfbc824aba5bfbcf297bdd3f73000081a22b GIT binary patch literal 40060 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ƞl7w{}t)QTV;eC%c*RuiY-vRn0^GgxnP7bm9zS;DBD=Y2L;|2dc2 o#p7(dt?Q=`yIrR3Y5)KL07*qoM6N<$f(HpubN~PV literal 0 HcmV?d00001 diff --git a/assets/textures/giraffe_1.png.meta b/assets/textures/giraffe_1.png.meta new file mode 100644 index 0000000..2c9410a --- /dev/null +++ b/assets/textures/giraffe_1.png.meta @@ -0,0 +1,36 @@ +{ + "ver": "2.3.4", + "uuid": "a4aa4d0b-7260-4512-928b-2e21a404fa74", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": true, + "width": 320, + "height": 640, + "platformSettings": {}, + "subMetas": { + "giraffe_1": { + "ver": "1.0.4", + "uuid": "ca4c5d38-6446-45f6-88fc-2300852051f9", + "rawTextureUuid": "a4aa4d0b-7260-4512-928b-2e21a404fa74", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 10, + "trimY": 0, + "width": 300, + "height": 640, + "rawWidth": 320, + "rawHeight": 640, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/assets/textures/sushi_1.png b/assets/textures/sushi_1.png new file mode 100644 index 0000000000000000000000000000000000000000..be91b33832edf65746e5898fa3336dded9e5bba8 GIT binary patch literal 35063 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 Tg literal 0 HcmV?d00001 diff --git a/assets/textures/sushi_1.png.meta b/assets/textures/sushi_1.png.meta new file mode 100644 index 0000000..c88e151 --- /dev/null +++ b/assets/textures/sushi_1.png.meta @@ -0,0 +1,36 @@ +{ + "ver": "2.3.4", + "uuid": "83e0e28c-7599-4754-a59f-a169cbd5cbcd", + "type": "sprite", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": true, + "width": 640, + "height": 320, + "platformSettings": {}, + "subMetas": { + "sushi_1": { + "ver": "1.0.4", + "uuid": "8eb18f86-2d97-4fbf-8d69-c5dd52df4a13", + "rawTextureUuid": "83e0e28c-7599-4754-a59f-a169cbd5cbcd", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0.5, + "offsetY": -3.5, + "trimX": 1, + "trimY": 20, + "width": 639, + "height": 287, + "rawWidth": 640, + "rawHeight": 320, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "subMetas": {} + } + } +} \ No newline at end of file From cc8c3b8bedeb140b08d08c9acbe1795cb10ee579 Mon Sep 17 00:00:00 2001 From: caizhitao Date: Tue, 23 Jun 2020 17:01:23 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=87=87=E6=A0=B7?= =?UTF-8?q?=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/effects/sprite-glow-inner-v2.effect | 74 ++++--------------- .../effects/sprite-glow-inner-v2.effect.meta | 4 +- assets/materials/sprite-glow-inner-v2.mtl | 9 ++- assets/scenes/GlowInnerEffectScene.fire | 8 +- 4 files changed, 26 insertions(+), 69 deletions(-) diff --git a/assets/effects/sprite-glow-inner-v2.effect b/assets/effects/sprite-glow-inner-v2.effect index ae787cf..1435ba3 100644 --- a/assets/effects/sprite-glow-inner-v2.effect +++ b/assets/effects/sprite-glow-inner-v2.effect @@ -102,6 +102,9 @@ CCProgram fs %{ uniform sampler2D texture; #endif + // 定义向周边搜索的圈数 + #define range 5.0 + #if SHOW_INNER_GLOW uniform glow { @@ -144,52 +147,6 @@ CCProgram fs %{ return texture(texture, v_uv0); } - - /** - * 获取指定角度方向,距离为xxx的像素的透明度 - * - * @param angle 角度 [0.0, 360.0] - * @param dist 距离 [0.0, 1.0] - * - * @return alpha [0.0, 1.0] - */ - float getColorAlpha(float angle, float dist) { - // 角度转弧度,公式为:弧度 = 角度 * (pi / 180) - // float radian = angle * 0.01745329252; // 这个浮点数是 pi / 180 - float radian = radians(angle); - float width = dist; - float height = width / (spriteWidth / spriteHeight); - float dist_fixed = sqrt(pow(width, 2.0) + pow(height, 2.0)); - vec4 color = getTextureColor(texture, v_uv0 + vec2(dist_fixed * cos(radian), dist_fixed * sin(radian))); - // vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian))); - return color.a; - } - - /** - * 获取指定距离的周边像素的透明度平均值 - * - * @param dist 距离 [0.0, 1.0] - * - * @return average alpha [0.0, 1.0] - */ - float getAverageAlpha(float dist) { - float totalAlpha = 0.0; - // 以30度为一个单位,那么「周边一圈」就由0到360度中共计12个点的组成 - totalAlpha += getColorAlpha(0.0, dist); - totalAlpha += getColorAlpha(30.0, dist); - totalAlpha += getColorAlpha(60.0, dist); - totalAlpha += getColorAlpha(90.0, dist); - totalAlpha += getColorAlpha(120.0, dist); - totalAlpha += getColorAlpha(150.0, dist); - totalAlpha += getColorAlpha(180.0, dist); - totalAlpha += getColorAlpha(210.0, dist); - totalAlpha += getColorAlpha(240.0, dist); - totalAlpha += getColorAlpha(270.0, dist); - totalAlpha += getColorAlpha(300.0, dist); - totalAlpha += getColorAlpha(330.0, dist); - return totalAlpha * 0.0833; // 1 / 12 = 0.08333 - } - /** * 获取发光的透明度 */ @@ -208,20 +165,19 @@ CCProgram fs %{ return srcColor.a; } - // 将传入的指定距离,平均分成10圈,求出每一圈的平均透明度, - // 然后求和取平均值,那么就可以得到该点的平均透明度 + // 每一圈的对应的步长 + float per_step_x = (1.0 / spriteWidth) * (glowColorSize * spriteWidth / range); + float per_step_y = (1.0 / spriteHeight) * (glowColorSize * spriteHeight / range); + + // 取样周边一定范围透明度 float totalAlpha = 0.0; - totalAlpha += getAverageAlpha(glowColorSize * 0.1); - totalAlpha += getAverageAlpha(glowColorSize * 0.2); - totalAlpha += getAverageAlpha(glowColorSize * 0.3); - totalAlpha += getAverageAlpha(glowColorSize * 0.4); - totalAlpha += getAverageAlpha(glowColorSize * 0.5); - totalAlpha += getAverageAlpha(glowColorSize * 0.6); - totalAlpha += getAverageAlpha(glowColorSize * 0.7); - totalAlpha += getAverageAlpha(glowColorSize * 0.8); - totalAlpha += getAverageAlpha(glowColorSize * 0.9); - totalAlpha += getAverageAlpha(glowColorSize * 1.0); - return totalAlpha * 0.1; + for (float x = -range; x <= range; x++) { + for (float y = -range; y <= range; y++) { + totalAlpha += getTextureColor(texture, v_uv0 + vec2(x * per_step_x, y * per_step_y)).a; + } + } + totalAlpha /= (range + range + 1.0) * (range + range + 1.0); + return totalAlpha; } #endif diff --git a/assets/effects/sprite-glow-inner-v2.effect.meta b/assets/effects/sprite-glow-inner-v2.effect.meta index c4ea57b..c048d3c 100644 --- a/assets/effects/sprite-glow-inner-v2.effect.meta +++ b/assets/effects/sprite-glow-inner-v2.effect.meta @@ -5,11 +5,11 @@ { "glsl1": { "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", - "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform vec4 glowColor;\nuniform float spriteWidth;\nuniform float spriteHeight;\nuniform float glowColorSize;\nuniform float glowThreshold;\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n float width = dist;\n float height = width / (spriteWidth / spriteHeight);\n float dist_fixed = sqrt(pow(width, 2.0) + pow(height, 2.0));\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist_fixed * cos(radian), dist_fixed * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform vec4 glowColor;\nuniform float spriteWidth;\nuniform float spriteHeight;\nuniform float glowColorSize;\nuniform float glowThreshold;\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float per_step_x = (1.0 / spriteWidth) * (glowColorSize * spriteWidth / 5.0);\n float per_step_y = (1.0 / spriteHeight) * (glowColorSize * spriteHeight / 5.0);\n float totalAlpha = 0.0;\n for (float x = -5.0; x <= 5.0; x++) {\n for (float y = -5.0; y <= 5.0; y++) {\n totalAlpha += getTextureColor(texture, v_uv0 + vec2(x * per_step_x, y * per_step_y)).a;\n }\n }\n totalAlpha /= (5.0 + 5.0 + 1.0) * (5.0 + 5.0 + 1.0);\n return totalAlpha;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" }, "glsl3": { "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", - "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform glow {\n vec4 glowColor;\n float spriteWidth;\n float spriteHeight;\n float glowColorSize;\n float glowThreshold;\n};\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n float width = dist;\n float height = width / (spriteWidth / spriteHeight);\n float dist_fixed = sqrt(pow(width, 2.0) + pow(height, 2.0));\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist_fixed * cos(radian), dist_fixed * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform glow {\n vec4 glowColor;\n float spriteWidth;\n float spriteHeight;\n float glowColorSize;\n float glowThreshold;\n};\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float per_step_x = (1.0 / spriteWidth) * (glowColorSize * spriteWidth / 5.0);\n float per_step_y = (1.0 / spriteHeight) * (glowColorSize * spriteHeight / 5.0);\n float totalAlpha = 0.0;\n for (float x = -5.0; x <= 5.0; x++) {\n for (float y = -5.0; y <= 5.0; y++) {\n totalAlpha += getTextureColor(texture, v_uv0 + vec2(x * per_step_x, y * per_step_y)).a;\n }\n }\n totalAlpha /= (5.0 + 5.0 + 1.0) * (5.0 + 5.0 + 1.0);\n return totalAlpha;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" } } ], diff --git a/assets/materials/sprite-glow-inner-v2.mtl b/assets/materials/sprite-glow-inner-v2.mtl index a99c7cd..3950b1d 100644 --- a/assets/materials/sprite-glow-inner-v2.mtl +++ b/assets/materials/sprite-glow-inner-v2.mtl @@ -14,14 +14,15 @@ "SHOW_INNER_GLOW": true }, "props": { - "glowColorSize": 0.01, + "glowColorSize": 0.1, "glowColor": { "__type__": "cc.Color", "r": 255, - "g": 0, - "b": 87, + "g": 255, + "b": 255, "a": 255 - } + }, + "glowThreshold": 0.1 } } } diff --git a/assets/scenes/GlowInnerEffectScene.fire b/assets/scenes/GlowInnerEffectScene.fire index d6847ec..325e2bc 100755 --- a/assets/scenes/GlowInnerEffectScene.fire +++ b/assets/scenes/GlowInnerEffectScene.fire @@ -5210,7 +5210,7 @@ "_contentSize": { "__type__": "cc.Size", "width": 384, - "height": 141.29999999999998 + "height": 676.8 }, "_anchorPoint": { "__type__": "cc.Vec2", @@ -5348,7 +5348,7 @@ "__id__": 114 }, "_children": [], - "_active": false, + "_active": true, "_components": [ { "__id__": 118 @@ -5442,7 +5442,7 @@ "__id__": 114 }, "_children": [], - "_active": false, + "_active": true, "_components": [ { "__id__": 120 @@ -5850,7 +5850,7 @@ "_layoutSize": { "__type__": "cc.Size", "width": 384, - "height": 141.29999999999998 + "height": 676.8 }, "_resize": 1, "_N$layoutType": 2, From 987bb8f58bbd3100a21cbce32eeece762650ba51 Mon Sep 17 00:00:00 2001 From: caizhitao Date: Tue, 23 Jun 2020 17:09:30 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/scenes/GlowInnerEffectScene.fire | 280 ++++++++++++++++-------- assets/scripts/GlowInnerEffectScene.ts | 6 +- 2 files changed, 188 insertions(+), 98 deletions(-) diff --git a/assets/scenes/GlowInnerEffectScene.fire b/assets/scenes/GlowInnerEffectScene.fire index 325e2bc..e7ed95e 100755 --- a/assets/scenes/GlowInnerEffectScene.fire +++ b/assets/scenes/GlowInnerEffectScene.fire @@ -77,14 +77,14 @@ ], "_active": true, "_components": [ - { - "__id__": 130 - }, - { - "__id__": 131 - }, { "__id__": 132 + }, + { + "__id__": 133 + }, + { + "__id__": 134 } ], "_prefab": null, @@ -254,7 +254,7 @@ "_active": true, "_components": [ { - "__id__": 129 + "__id__": 131 } ], "_prefab": null, @@ -5164,7 +5164,7 @@ }, { "__type__": "cc.Node", - "_name": "Examples", + "_name": "ScrollView", "_objFlags": 0, "_parent": { "__id__": 5 @@ -5172,30 +5172,15 @@ "_children": [ { "__id__": 115 - }, - { - "__id__": 117 - }, - { - "__id__": 119 - }, - { - "__id__": 121 - }, - { - "__id__": 123 - }, - { - "__id__": 125 } ], "_active": true, "_components": [ { - "__id__": 127 + "__id__": 129 }, { - "__id__": 128 + "__id__": 130 } ], "_prefab": null, @@ -5210,7 +5195,7 @@ "_contentSize": { "__type__": "cc.Size", "width": 384, - "height": 676.8 + "height": 640 }, "_anchorPoint": { "__type__": "cc.Vec2", @@ -5244,6 +5229,87 @@ "_is3DNode": false, "_groupIndex": 0, "groupIndex": 0, + "_id": "2d/atMp8dG4L16Rl7WrAM5" + }, + { + "__type__": "cc.Node", + "_name": "Examples", + "_objFlags": 0, + "_parent": { + "__id__": 114 + }, + "_children": [ + { + "__id__": 116 + }, + { + "__id__": 118 + }, + { + "__id__": 120 + }, + { + "__id__": 122 + }, + { + "__id__": 124 + }, + { + "__id__": 126 + } + ], + "_active": true, + "_components": [ + { + "__id__": 128 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 1238.8 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 1 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, "_id": "feymBChPxA1pr6+/rlPqey" }, { @@ -5251,13 +5317,13 @@ "_name": "shark_1", "_objFlags": 0, "_parent": { - "__id__": 114 + "__id__": 115 }, "_children": [], "_active": true, "_components": [ { - "__id__": 116 + "__id__": 117 } ], "_prefab": null, @@ -5284,7 +5350,7 @@ "ctor": "Float64Array", "array": [ 0, - -70.64999999999999, + -82.64999999999999, 0, 0, 0, @@ -5313,7 +5379,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 115 + "__id__": 116 }, "_enabled": true, "_materials": [ @@ -5345,13 +5411,13 @@ "_name": "sushi_1", "_objFlags": 0, "_parent": { - "__id__": 114 + "__id__": 115 }, "_children": [], "_active": true, "_components": [ { - "__id__": 118 + "__id__": 119 } ], "_prefab": null, @@ -5378,7 +5444,7 @@ "ctor": "Float64Array", "array": [ 0, - -249.04999999999998, + -261.04999999999995, 0, 0, 0, @@ -5407,7 +5473,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 117 + "__id__": 118 }, "_enabled": true, "_materials": [ @@ -5439,13 +5505,13 @@ "_name": "giraffe_1", "_objFlags": 0, "_parent": { - "__id__": 114 + "__id__": 115 }, "_children": [], "_active": true, "_components": [ { - "__id__": 120 + "__id__": 121 } ], "_prefab": null, @@ -5472,7 +5538,7 @@ "ctor": "Float64Array", "array": [ 0, - -516.8, + -528.8, 0, 0, 0, @@ -5501,7 +5567,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 119 + "__id__": 120 }, "_enabled": true, "_materials": [ @@ -5533,13 +5599,13 @@ "_name": "cocos_logo", "_objFlags": 0, "_parent": { - "__id__": 114 + "__id__": 115 }, "_children": [], - "_active": false, + "_active": true, "_components": [ { - "__id__": 122 + "__id__": 123 } ], "_prefab": null, @@ -5566,7 +5632,7 @@ "ctor": "Float64Array", "array": [ 0, - -312.29999999999995, + -859.8, 0, 0, 0, @@ -5595,7 +5661,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 121 + "__id__": 122 }, "_enabled": true, "_materials": [ @@ -5627,13 +5693,13 @@ "_name": "ball_1", "_objFlags": 0, "_parent": { - "__id__": 114 + "__id__": 115 }, "_children": [], - "_active": false, + "_active": true, "_components": [ { - "__id__": 124 + "__id__": 125 } ], "_prefab": null, @@ -5660,7 +5726,7 @@ "ctor": "Float64Array", "array": [ 0, - -543.3, + -1090.8, 0, 0, 0, @@ -5689,7 +5755,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 123 + "__id__": 124 }, "_enabled": true, "_materials": [ @@ -5721,13 +5787,13 @@ "_name": "BmFont", "_objFlags": 0, "_parent": { - "__id__": 114 + "__id__": 115 }, "_children": [], - "_active": false, + "_active": true, "_components": [ { - "__id__": 126 + "__id__": 127 } ], "_prefab": null, @@ -5754,7 +5820,7 @@ "ctor": "Float64Array", "array": [ 0, - -659.3, + -1206.8, 0, 0, 0, @@ -5783,7 +5849,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 125 + "__id__": 126 }, "_enabled": true, "_materials": [ @@ -5812,45 +5878,18 @@ "_N$cacheMode": 0, "_id": "7cXLgoUJhDP7BPjr4yx+Ep" }, - { - "__type__": "cc.Widget", - "_name": "", - "_objFlags": 0, - "node": { - "__id__": 114 - }, - "_enabled": true, - "alignMode": 1, - "_target": null, - "_alignFlags": 41, - "_left": 0.6, - "_right": 0, - "_top": 0, - "_bottom": 48, - "_verticalCenter": 0, - "_horizontalCenter": 0, - "_isAbsLeft": false, - "_isAbsRight": true, - "_isAbsTop": true, - "_isAbsBottom": true, - "_isAbsHorizontalCenter": true, - "_isAbsVerticalCenter": true, - "_originalWidth": 509, - "_originalHeight": 0, - "_id": "80mVZhmc1LHYCtsbpy1Jnu" - }, { "__type__": "cc.Layout", "_name": "", "_objFlags": 0, "node": { - "__id__": 114 + "__id__": 115 }, "_enabled": true, "_layoutSize": { "__type__": "cc.Size", - "width": 384, - "height": 676.8 + "width": 0, + "height": 1238.8 }, "_resize": 1, "_N$layoutType": 2, @@ -5862,8 +5901,8 @@ "_N$startAxis": 0, "_N$paddingLeft": 0, "_N$paddingRight": 0, - "_N$paddingTop": 0, - "_N$paddingBottom": 0, + "_N$paddingTop": 12, + "_N$paddingBottom": 12, "_N$spacingX": 48, "_N$spacingY": 36, "_N$verticalDirection": 1, @@ -5871,6 +5910,57 @@ "_N$affectedByScale": true, "_id": "ff9z0nF9BGm5zFMuGhj1jt" }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 114 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0.6, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": false, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_id": "66DhDtyM5DXI4OitKADVOI" + }, + { + "__type__": "cc.ScrollView", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 114 + }, + "_enabled": true, + "horizontal": false, + "vertical": true, + "inertia": true, + "brake": 0.5, + "elastic": true, + "bounceDuration": 1, + "scrollEvents": [], + "cancelInnerEvents": true, + "_N$content": { + "__id__": 115 + }, + "content": { + "__id__": 115 + }, + "_id": "6afSoDGrxMdbMz9CZsHCeI" + }, { "__type__": "68622NlRNJFN4QrXlFCQMe/", "_name": "", @@ -5898,16 +5988,6 @@ "_fitHeight": true, "_id": "4bz2+ak99DBYVlSVIMFGN0" }, - { - "__type__": "eebe5Fr5bhMO7IsowoLW/Yp", - "_name": "", - "_objFlags": 0, - "node": { - "__id__": 2 - }, - "_enabled": true, - "_id": "1a7ypfDW1DQqGMHUC5Sf0L" - }, { "__type__": "cc.Widget", "_name": "", @@ -5934,5 +6014,15 @@ "_originalWidth": 0, "_originalHeight": 0, "_id": "314F24pJRBBZaYka0OCTsh" + }, + { + "__type__": "eebe5Fr5bhMO7IsowoLW/Yp", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "_id": "1a7ypfDW1DQqGMHUC5Sf0L" } ] \ No newline at end of file diff --git a/assets/scripts/GlowInnerEffectScene.ts b/assets/scripts/GlowInnerEffectScene.ts index 4340470..2dc11fc 100644 --- a/assets/scripts/GlowInnerEffectScene.ts +++ b/assets/scripts/GlowInnerEffectScene.ts @@ -20,7 +20,7 @@ export default class GlowInnerEffectScene extends cc.Component { private _glowThresholdSlider: cc.Slider = null; private _glowThresholdSliderLabel: cc.Label = null; - private _examplesParentNode: cc.Node = null; + private _scrollView: cc.ScrollView = null; onLoad() { this._redSlider = cc.find("Canvas/Content/Sliders/ColorRedSlider/Slider").getComponent(cc.Slider); @@ -41,7 +41,7 @@ export default class GlowInnerEffectScene extends cc.Component { this._glowThresholdSlider = cc.find("Canvas/Content/Sliders/GlowThresholdSlider/Slider").getComponent(cc.Slider); this._glowThresholdSliderLabel = cc.find("Canvas/Content/Sliders/GlowThresholdSlider/ValueLabel").getComponent(cc.Label); - this._examplesParentNode = cc.find("Canvas/Content/Examples"); + this._scrollView = cc.find("Canvas/Content/ScrollView").getComponent(cc.ScrollView); } onEnable() { @@ -113,7 +113,7 @@ export default class GlowInnerEffectScene extends cc.Component { */ glowThreshold: number; }) { - this._examplesParentNode.children.forEach((childNode) => { + this._scrollView.content.children.forEach((childNode) => { childNode.getComponents(cc.RenderComponent).forEach((renderComponent) => { let spriteFrameRect = (renderComponent).spriteFrame.getRect(); let material: cc.Material = renderComponent.getMaterial(0); From e6f520d4fae3fc7a6f7a6d15d45f761bef738154 Mon Sep 17 00:00:00 2001 From: caizhitao Date: Tue, 23 Jun 2020 17:12:44 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E6=95=B4=E7=90=86=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ner.effect => sprite-glow-inner-v1.effect} | 0 ....meta => sprite-glow-inner-v1.effect.meta} | 0 assets/effects/sprite-glow-inner-v2.effect | 30 +- .../effects/sprite-glow-inner-v2.effect.meta | 4 +- ...low-inner.mtl => sprite-glow-inner-v1.mtl} | 0 ...mtl.meta => sprite-glow-inner-v1.mtl.meta} | 0 assets/materials/sprite-glow-inner-v2.mtl | 8 +- .../materials/sprite-glow-inner-v2.mtl.meta | 2 +- assets/scenes/GlowInnerEffectScene.fire | 14 +- assets/scenes/GlowInnerV2EffectScene.fire | 6028 +++++++++++++++++ .../scenes/GlowInnerV2EffectScene.fire.meta | 7 + assets/scripts/GlowInnerEffectScene.ts | 13 +- assets/scripts/GlowInnerV2EffectScene.ts | 128 + assets/scripts/GlowInnerV2EffectScene.ts.meta | 9 + 14 files changed, 6206 insertions(+), 37 deletions(-) rename assets/effects/{sprite-glow-inner.effect => sprite-glow-inner-v1.effect} (100%) rename assets/effects/{sprite-glow-inner.effect.meta => sprite-glow-inner-v1.effect.meta} (100%) rename assets/materials/{sprite-glow-inner.mtl => sprite-glow-inner-v1.mtl} (100%) rename assets/materials/{sprite-glow-inner.mtl.meta => sprite-glow-inner-v1.mtl.meta} (100%) create mode 100755 assets/scenes/GlowInnerV2EffectScene.fire create mode 100644 assets/scenes/GlowInnerV2EffectScene.fire.meta create mode 100644 assets/scripts/GlowInnerV2EffectScene.ts create mode 100644 assets/scripts/GlowInnerV2EffectScene.ts.meta diff --git a/assets/effects/sprite-glow-inner.effect b/assets/effects/sprite-glow-inner-v1.effect similarity index 100% rename from assets/effects/sprite-glow-inner.effect rename to assets/effects/sprite-glow-inner-v1.effect diff --git a/assets/effects/sprite-glow-inner.effect.meta b/assets/effects/sprite-glow-inner-v1.effect.meta similarity index 100% rename from assets/effects/sprite-glow-inner.effect.meta rename to assets/effects/sprite-glow-inner-v1.effect.meta diff --git a/assets/effects/sprite-glow-inner-v2.effect b/assets/effects/sprite-glow-inner-v2.effect index 1435ba3..e9e5c6c 100644 --- a/assets/effects/sprite-glow-inner-v2.effect +++ b/assets/effects/sprite-glow-inner-v2.effect @@ -1,4 +1,6 @@ -// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. +// 相比起 v1 版本的变更 +// +// 1. 切换了采样算法,由原来圆采样,改为矩形采样,减少大量三角函数运算,在保持差不多效果的前提下,性能得到大幅提升 CCEffect %{ techniques: @@ -25,21 +27,19 @@ CCEffect %{ spriteWidth: { value: 500, editor: { - tooltip: "纹理宽度" + tooltip: "纹理宽度(px)" } } spriteHeight: { value: 500, editor: { - tooltip: "纹理高度" + tooltip: "纹理高度(px)" } } - # 发光宽度(相对于宽度) - glowColorSize: { - value: 0.2, + glowRange: { + value: 20, editor: { - tooltip: "发光宽度", - range: [0.0, 1.0], + tooltip: "内发光范围(px)" } } # 发光透明度阈值 @@ -48,7 +48,7 @@ CCEffect %{ glowThreshold: { value: 0.1, editor: { - tooltip: "发光阈值", + tooltip: "发光阈值(只有超过这个透明度的点才会发光)", range: [0.0, 1.0] } } @@ -117,8 +117,8 @@ CCProgram fs %{ // 纹理高度(px) float spriteHeight; - // 发光范围 - float glowColorSize; + // 内发光范围(px) + float glowRange; // 发光阈值 float glowThreshold; @@ -152,7 +152,7 @@ CCProgram fs %{ */ float getGlowAlpha() { // 如果发光宽度为0,直接返回0.0透明度,减少计算量 - if (glowColorSize == 0.0) { + if (glowRange == 0.0) { return 0.0; } @@ -166,8 +166,8 @@ CCProgram fs %{ } // 每一圈的对应的步长 - float per_step_x = (1.0 / spriteWidth) * (glowColorSize * spriteWidth / range); - float per_step_y = (1.0 / spriteHeight) * (glowColorSize * spriteHeight / range); + float per_step_x = (1.0 / spriteWidth) * (glowRange / range); + float per_step_y = (1.0 / spriteHeight) * (glowRange / range); // 取样周边一定范围透明度 float totalAlpha = 0.0; @@ -216,7 +216,7 @@ CCProgram fs %{ alpha = 1.0 - alpha; // 给点调料,让靠近边缘的更加亮 - alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0; + alpha = -1.0 * pow((alpha - 1.0), 4.0) + 1.0; } // 源颜色(内发光) vec4 color_src = glowColor * alpha; diff --git a/assets/effects/sprite-glow-inner-v2.effect.meta b/assets/effects/sprite-glow-inner-v2.effect.meta index c048d3c..862a269 100644 --- a/assets/effects/sprite-glow-inner-v2.effect.meta +++ b/assets/effects/sprite-glow-inner-v2.effect.meta @@ -5,11 +5,11 @@ { "glsl1": { "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", - "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform vec4 glowColor;\nuniform float spriteWidth;\nuniform float spriteHeight;\nuniform float glowColorSize;\nuniform float glowThreshold;\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float per_step_x = (1.0 / spriteWidth) * (glowColorSize * spriteWidth / 5.0);\n float per_step_y = (1.0 / spriteHeight) * (glowColorSize * spriteHeight / 5.0);\n float totalAlpha = 0.0;\n for (float x = -5.0; x <= 5.0; x++) {\n for (float y = -5.0; y <= 5.0; y++) {\n totalAlpha += getTextureColor(texture, v_uv0 + vec2(x * per_step_x, y * per_step_y)).a;\n }\n }\n totalAlpha /= (5.0 + 5.0 + 1.0) * (5.0 + 5.0 + 1.0);\n return totalAlpha;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform vec4 glowColor;\nuniform float spriteWidth;\nuniform float spriteHeight;\nuniform float glowRange;\nuniform float glowThreshold;\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\nfloat getGlowAlpha() {\n if (glowRange == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float per_step_x = (1.0 / spriteWidth) * (glowRange / 5.0);\n float per_step_y = (1.0 / spriteHeight) * (glowRange / 5.0);\n float totalAlpha = 0.0;\n for (float x = -5.0; x <= 5.0; x++) {\n for (float y = -5.0; y <= 5.0; y++) {\n totalAlpha += getTextureColor(texture, v_uv0 + vec2(x * per_step_x, y * per_step_y)).a;\n }\n }\n totalAlpha /= (5.0 + 5.0 + 1.0) * (5.0 + 5.0 + 1.0);\n return totalAlpha;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * pow((alpha - 1.0), 4.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" }, "glsl3": { "vert": "\nprecision highp float;\nuniform CCGlobal {\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}", - "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform glow {\n vec4 glowColor;\n float spriteWidth;\n float spriteHeight;\n float glowColorSize;\n float glowThreshold;\n};\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float per_step_x = (1.0 / spriteWidth) * (glowColorSize * spriteWidth / 5.0);\n float per_step_y = (1.0 / spriteHeight) * (glowColorSize * spriteHeight / 5.0);\n float totalAlpha = 0.0;\n for (float x = -5.0; x <= 5.0; x++) {\n for (float y = -5.0; y <= 5.0; y++) {\n totalAlpha += getTextureColor(texture, v_uv0 + vec2(x * per_step_x, y * per_step_y)).a;\n }\n }\n totalAlpha /= (5.0 + 5.0 + 1.0) * (5.0 + 5.0 + 1.0);\n return totalAlpha;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" + "frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform glow {\n vec4 glowColor;\n float spriteWidth;\n float spriteHeight;\n float glowRange;\n float glowThreshold;\n};\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\nfloat getGlowAlpha() {\n if (glowRange == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float per_step_x = (1.0 / spriteWidth) * (glowRange / 5.0);\n float per_step_y = (1.0 / spriteHeight) * (glowRange / 5.0);\n float totalAlpha = 0.0;\n for (float x = -5.0; x <= 5.0; x++) {\n for (float y = -5.0; y <= 5.0; y++) {\n totalAlpha += getTextureColor(texture, v_uv0 + vec2(x * per_step_x, y * per_step_y)).a;\n }\n }\n totalAlpha /= (5.0 + 5.0 + 1.0) * (5.0 + 5.0 + 1.0);\n return totalAlpha;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * pow((alpha - 1.0), 4.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}" } } ], diff --git a/assets/materials/sprite-glow-inner.mtl b/assets/materials/sprite-glow-inner-v1.mtl similarity index 100% rename from assets/materials/sprite-glow-inner.mtl rename to assets/materials/sprite-glow-inner-v1.mtl diff --git a/assets/materials/sprite-glow-inner.mtl.meta b/assets/materials/sprite-glow-inner-v1.mtl.meta similarity index 100% rename from assets/materials/sprite-glow-inner.mtl.meta rename to assets/materials/sprite-glow-inner-v1.mtl.meta diff --git a/assets/materials/sprite-glow-inner-v2.mtl b/assets/materials/sprite-glow-inner-v2.mtl index 3950b1d..dcc25e8 100644 --- a/assets/materials/sprite-glow-inner-v2.mtl +++ b/assets/materials/sprite-glow-inner-v2.mtl @@ -14,15 +14,13 @@ "SHOW_INNER_GLOW": true }, "props": { - "glowColorSize": 0.1, "glowColor": { "__type__": "cc.Color", "r": 255, - "g": 255, - "b": 255, + "g": 0, + "b": 0, "a": 255 - }, - "glowThreshold": 0.1 + } } } } diff --git a/assets/materials/sprite-glow-inner-v2.mtl.meta b/assets/materials/sprite-glow-inner-v2.mtl.meta index c7cf582..751fac2 100644 --- a/assets/materials/sprite-glow-inner-v2.mtl.meta +++ b/assets/materials/sprite-glow-inner-v2.mtl.meta @@ -1,6 +1,6 @@ { "ver": "1.0.3", - "uuid": "ed801db5-01ea-4505-b505-e661a3f1bb07", + "uuid": "5e2baa0c-d8bf-493f-89f7-a11352092439", "dataAsSubAsset": null, "subMetas": {} } \ No newline at end of file diff --git a/assets/scenes/GlowInnerEffectScene.fire b/assets/scenes/GlowInnerEffectScene.fire index e7ed95e..1485397 100755 --- a/assets/scenes/GlowInnerEffectScene.fire +++ b/assets/scenes/GlowInnerEffectScene.fire @@ -174,7 +174,7 @@ "array": [ 0, 0, - 416.1116748714887, + 415.69219381653056, 0, 0, 0, @@ -5384,7 +5384,7 @@ "_enabled": true, "_materials": [ { - "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" + "__uuid__": "5e2baa0c-d8bf-493f-89f7-a11352092439" } ], "_srcBlendFactor": 770, @@ -5478,7 +5478,7 @@ "_enabled": true, "_materials": [ { - "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" + "__uuid__": "5e2baa0c-d8bf-493f-89f7-a11352092439" } ], "_srcBlendFactor": 770, @@ -5572,7 +5572,7 @@ "_enabled": true, "_materials": [ { - "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" + "__uuid__": "5e2baa0c-d8bf-493f-89f7-a11352092439" } ], "_srcBlendFactor": 770, @@ -5666,7 +5666,7 @@ "_enabled": true, "_materials": [ { - "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" + "__uuid__": "5e2baa0c-d8bf-493f-89f7-a11352092439" } ], "_srcBlendFactor": 770, @@ -5760,7 +5760,7 @@ "_enabled": true, "_materials": [ { - "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" + "__uuid__": "5e2baa0c-d8bf-493f-89f7-a11352092439" } ], "_srcBlendFactor": 770, @@ -5854,7 +5854,7 @@ "_enabled": true, "_materials": [ { - "__uuid__": "ed801db5-01ea-4505-b505-e661a3f1bb07" + "__uuid__": "5e2baa0c-d8bf-493f-89f7-a11352092439" } ], "_useOriginalSize": false, diff --git a/assets/scenes/GlowInnerV2EffectScene.fire b/assets/scenes/GlowInnerV2EffectScene.fire new file mode 100755 index 0000000..2d43b7b --- /dev/null +++ b/assets/scenes/GlowInnerV2EffectScene.fire @@ -0,0 +1,6028 @@ +[ + { + "__type__": "cc.SceneAsset", + "_name": "", + "_objFlags": 0, + "_native": "", + "scene": { + "__id__": 1 + } + }, + { + "__type__": "cc.Scene", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + } + ], + "_active": false, + "_components": [], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_is3DNode": true, + "_groupIndex": 0, + "groupIndex": 0, + "autoReleaseAssets": false, + "_id": "6d781c30-9520-4a95-9e9d-eb99fb2bbded" + }, + { + "__type__": "cc.Node", + "_name": "Canvas", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 3 + }, + { + "__id__": 5 + } + ], + "_active": true, + "_components": [ + { + "__id__": 132 + }, + { + "__id__": 133 + }, + { + "__id__": 134 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 252, + "g": 252, + "b": 252, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 480, + 320, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "a286bbGknJLZpRpxROV6M94" + }, + { + "__type__": "cc.Node", + "_name": "Main Camera", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 4 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 415.69219381653056, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "fbL5wf1mhFa6PPZbeZvnZ9" + }, + { + "__type__": "cc.Camera", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 3 + }, + "_enabled": true, + "_cullingMask": 4294967295, + "_clearFlags": 7, + "_backgroundColor": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_depth": -1, + "_zoomRatio": 1, + "_targetTexture": null, + "_fov": 60, + "_orthoSize": 10, + "_nearClip": 1, + "_farClip": 4096, + "_ortho": true, + "_rect": { + "__type__": "cc.Rect", + "x": 0, + "y": 0, + "width": 1, + "height": 1 + }, + "_renderStages": 1, + "_alignWithScreen": true, + "_id": "adItdqNzZHbYUhDAmfCr9b" + }, + { + "__type__": "cc.Node", + "_name": "Content", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 6 + }, + { + "__id__": 9 + }, + { + "__id__": 114 + } + ], + "_active": true, + "_components": [ + { + "__id__": 131 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "faqYlnbttBCaJJgkn4Ntv/" + }, + { + "__type__": "cc.Node", + "_name": "Bg", + "_objFlags": 0, + "_parent": { + "__id__": 5 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 7 + }, + { + "__id__": 8 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 27, + "g": 38, + "b": 46, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 960, + "height": 640 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "e2e0crkOLxGrpMxpbC4iQg1" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 6 + }, + "_enabled": true, + "alignMode": 0, + "_target": null, + "_alignFlags": 45, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 200, + "_originalHeight": 150, + "_id": "89IA6P0/5JEZERosKJJo6k" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 6 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "410fb916-8721-4663-bab8-34397391ace7" + }, + "_type": 1, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "2azjUbJNxALLAfDZrJ8TV0" + }, + { + "__type__": "cc.Node", + "_name": "Sliders", + "_objFlags": 0, + "_parent": { + "__id__": 5 + }, + "_children": [ + { + "__id__": 10 + }, + { + "__id__": 27 + }, + { + "__id__": 44 + }, + { + "__id__": 61 + }, + { + "__id__": 78 + }, + { + "__id__": 95 + } + ], + "_active": true, + "_components": [ + { + "__id__": 112 + }, + { + "__id__": 113 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 576, + "height": 460 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 1 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -192, + 320, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "d0PWmVX95D3LEcvBQBPDr+" + }, + { + "__type__": "cc.Node", + "_name": "ColorRedSlider", + "_objFlags": 0, + "_parent": { + "__id__": 9 + }, + "_children": [ + { + "__id__": 11 + }, + { + "__id__": 14 + }, + { + "__id__": 23 + } + ], + "_active": true, + "_components": [ + { + "__id__": 26 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 576, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -30, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "75CtG/r79FIrGBRQBxUnMM" + }, + { + "__type__": "cc.Node", + "_name": "SliderDescLabel", + "_objFlags": 0, + "_parent": { + "__id__": 10 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 12 + }, + { + "__id__": 13 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 144, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -144, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "ed/vvuTO9EG6+WRy0En/W6" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 11 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_useOriginalSize": false, + "_string": "Red:", + "_N$string": "Red:", + "_fontSize": 40, + "_lineHeight": 40, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 2, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "f7z02UrAJASZQYcxrcMJGt" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 11 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0, + "_right": 0.75, + "_top": 10, + "_bottom": 10, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": false, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 113.38, + "_originalHeight": 50.4, + "_id": "afzIZOHWBJA5+woZcJ2gwz" + }, + { + "__type__": "cc.Node", + "_name": "Slider", + "_objFlags": 0, + "_parent": { + "__id__": 10 + }, + "_children": [ + { + "__id__": 15 + }, + { + "__id__": 18 + } + ], + "_active": true, + "_components": [ + { + "__id__": 21 + }, + { + "__id__": 22 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 230.40000000000003, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -115.20000000000002, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "3dthetNVJOj7zluUpaljKC" + }, + { + "__type__": "cc.Node", + "_name": "Background", + "_objFlags": 0, + "_parent": { + "__id__": 14 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 16 + }, + { + "__id__": 17 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 230.40000000000003, + "height": 20 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "e39OJTLUlNJrje+eGwfquO" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 15 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "31d8962d-babb-4ec7-be19-8e9f54a4ea99" + }, + "_type": 1, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "15IILtSZRG5ouBCP+OBsoy" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 15 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0, + "_right": 0, + "_top": 20, + "_bottom": 20, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 300, + "_originalHeight": 20, + "_id": "05mU6YJy1EVoBT5Yq2Og8A" + }, + { + "__type__": "cc.Node", + "_name": "Handle", + "_objFlags": 0, + "_parent": { + "__id__": 14 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 19 + }, + { + "__id__": 20 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 32, + "height": 32 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 230.40000000000006, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "7bSyqIqN5AGpV7Q1H8UELD" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 18 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_type": 1, + "_sizeMode": 2, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "bdsXS3PtFPiK59vgFohUUn" + }, + { + "__type__": "cc.Button", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 18 + }, + "_enabled": true, + "_normalMaterial": null, + "_grayMaterial": null, + "duration": 0.1, + "zoomScale": 1.1, + "clickEvents": [], + "_N$interactable": true, + "_N$enableAutoGrayEffect": true, + "_N$transition": 3, + "transition": 3, + "_N$normalColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$hoverColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "hoverColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$disabledColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$normalSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_N$pressedSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "pressedSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_N$hoverSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "hoverSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_N$disabledSprite": { + "__uuid__": "29158224-f8dd-4661-a796-1ffab537140e" + }, + "_N$target": { + "__id__": 18 + }, + "_id": "9c/4Y0juRIZpOZZ7lyVI/u" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 14 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0.3, + "_right": 0.3, + "_top": 0, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": false, + "_isAbsRight": false, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 300, + "_originalHeight": 20, + "_id": "3dNMNnhp5CmaAbSbLqK54L" + }, + { + "__type__": "cc.Slider", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 14 + }, + "_enabled": true, + "direction": 0, + "slideEvents": [], + "_N$handle": { + "__id__": 20 + }, + "_N$progress": 1, + "_id": "16lk7dFbdHP4Lm1acPXErH" + }, + { + "__type__": "cc.Node", + "_name": "ValueLabel", + "_objFlags": 0, + "_parent": { + "__id__": 10 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 24 + }, + { + "__id__": 25 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 144, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 288, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "eeKVye8E5Cxbh+AWJEDLUf" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 23 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0.75, + "_right": 0, + "_top": 10, + "_bottom": 10, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": false, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 113.38, + "_originalHeight": 50.4, + "_id": "3d4moMMihBmLirK/X6nrNt" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 23 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_useOriginalSize": false, + "_string": "0.10 | 26", + "_N$string": "0.10 | 26", + "_fontSize": 40, + "_lineHeight": 40, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 0, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "a5/IYKgkVBIprxaeuKTge+" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 10 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 40, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 461.38, + "_originalHeight": 0, + "_id": "afxGrMSLlInYj8+7gvzYaz" + }, + { + "__type__": "cc.Node", + "_name": "ColorGreenSlider", + "_objFlags": 0, + "_parent": { + "__id__": 9 + }, + "_children": [ + { + "__id__": 28 + }, + { + "__id__": 31 + }, + { + "__id__": 40 + } + ], + "_active": true, + "_components": [ + { + "__id__": 43 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 576, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -110, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "326+Vf4/VCI4n/eb7ABmQ2" + }, + { + "__type__": "cc.Node", + "_name": "SliderDescLabel", + "_objFlags": 0, + "_parent": { + "__id__": 27 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 29 + }, + { + "__id__": 30 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 144, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -144, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "dc89G2vIVF261JRkYLWpr+" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 28 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_useOriginalSize": false, + "_string": "Green:", + "_N$string": "Green:", + "_fontSize": 40, + "_lineHeight": 40, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 2, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "edj1Qt2bRFE7sqqv3+k9FR" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 28 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0, + "_right": 0.75, + "_top": 10, + "_bottom": 10, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": false, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 113.38, + "_originalHeight": 50.4, + "_id": "7b9qe0965Dk5xcg7/fw7Xw" + }, + { + "__type__": "cc.Node", + "_name": "Slider", + "_objFlags": 0, + "_parent": { + "__id__": 27 + }, + "_children": [ + { + "__id__": 32 + }, + { + "__id__": 35 + } + ], + "_active": true, + "_components": [ + { + "__id__": 38 + }, + { + "__id__": 39 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 230.40000000000003, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -115.20000000000002, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "b8VzriQJBAgogzmF5f14zV" + }, + { + "__type__": "cc.Node", + "_name": "Background", + "_objFlags": 0, + "_parent": { + "__id__": 31 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 33 + }, + { + "__id__": 34 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 230.40000000000003, + "height": 20 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "cewXFktFJEOJyZ0cfyjt9k" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 32 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "31d8962d-babb-4ec7-be19-8e9f54a4ea99" + }, + "_type": 1, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "1fqds7RW1Bj7n7IKuEYru7" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 32 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0, + "_right": 0, + "_top": 20, + "_bottom": 20, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 300, + "_originalHeight": 20, + "_id": "5f7aWhkBhLZKSH7nysQnZD" + }, + { + "__type__": "cc.Node", + "_name": "Handle", + "_objFlags": 0, + "_parent": { + "__id__": 31 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 36 + }, + { + "__id__": 37 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 32, + "height": 32 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "01xShpu7JJZJ16s+zzr3za" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 35 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_type": 1, + "_sizeMode": 2, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "f4Bovma6JGk7fv5agt9xfx" + }, + { + "__type__": "cc.Button", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 35 + }, + "_enabled": true, + "_normalMaterial": null, + "_grayMaterial": null, + "duration": 0.1, + "zoomScale": 1.1, + "clickEvents": [], + "_N$interactable": true, + "_N$enableAutoGrayEffect": true, + "_N$transition": 3, + "transition": 3, + "_N$normalColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$hoverColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "hoverColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$disabledColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$normalSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_N$pressedSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "pressedSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_N$hoverSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "hoverSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_N$disabledSprite": { + "__uuid__": "29158224-f8dd-4661-a796-1ffab537140e" + }, + "_N$target": { + "__id__": 35 + }, + "_id": "57cFuTtK1CAJ/hN9ewxzJY" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 31 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0.3, + "_right": 0.3, + "_top": 0, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": false, + "_isAbsRight": false, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 300, + "_originalHeight": 20, + "_id": "b33mmA5spJPr8++4P0Y/JP" + }, + { + "__type__": "cc.Slider", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 31 + }, + "_enabled": true, + "direction": 0, + "slideEvents": [], + "_N$handle": { + "__id__": 37 + }, + "_N$progress": 0, + "_id": "7ff0bXreRC05d9kAI/PAgA" + }, + { + "__type__": "cc.Node", + "_name": "ValueLabel", + "_objFlags": 0, + "_parent": { + "__id__": 27 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 41 + }, + { + "__id__": 42 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 144, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 288, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "9fwmi2UehO8p4XCB8ewlDL" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 40 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0.75, + "_right": 0, + "_top": 10, + "_bottom": 10, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": false, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 113.38, + "_originalHeight": 50.4, + "_id": "d8Cn7rGylPq4jjxFO9vdyX" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 40 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_useOriginalSize": false, + "_string": "0.10 | 26", + "_N$string": "0.10 | 26", + "_fontSize": 40, + "_lineHeight": 40, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 0, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "e5rEyKV1VD/772YXNMSIAI" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 27 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 40, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 461.38, + "_originalHeight": 0, + "_id": "eai759mRVFGq2yx9v5QsUO" + }, + { + "__type__": "cc.Node", + "_name": "ColorBlueSlider", + "_objFlags": 0, + "_parent": { + "__id__": 9 + }, + "_children": [ + { + "__id__": 45 + }, + { + "__id__": 48 + }, + { + "__id__": 57 + } + ], + "_active": true, + "_components": [ + { + "__id__": 60 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 576, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -190, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "77H3WJNzBFloSV/XcgYZ2h" + }, + { + "__type__": "cc.Node", + "_name": "SliderDescLabel", + "_objFlags": 0, + "_parent": { + "__id__": 44 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 46 + }, + { + "__id__": 47 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 144, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -144, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "c0mBRAF2RIYYAajo4eLQst" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 45 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_useOriginalSize": false, + "_string": "Blue:", + "_N$string": "Blue:", + "_fontSize": 40, + "_lineHeight": 40, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 2, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "53G6DkWFdC24UTbk1INEnG" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 45 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0, + "_right": 0.75, + "_top": 10, + "_bottom": 10, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": false, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 113.38, + "_originalHeight": 50.4, + "_id": "ddGu+jkxhHnYaYVA5gg2QT" + }, + { + "__type__": "cc.Node", + "_name": "Slider", + "_objFlags": 0, + "_parent": { + "__id__": 44 + }, + "_children": [ + { + "__id__": 49 + }, + { + "__id__": 52 + } + ], + "_active": true, + "_components": [ + { + "__id__": 55 + }, + { + "__id__": 56 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 230.40000000000003, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -115.20000000000002, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "89knithiNNobnClrWw7OBf" + }, + { + "__type__": "cc.Node", + "_name": "Background", + "_objFlags": 0, + "_parent": { + "__id__": 48 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 50 + }, + { + "__id__": 51 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 230.40000000000003, + "height": 20 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "c6KPPPQQxKrJ5WlwYEtWgW" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 49 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "31d8962d-babb-4ec7-be19-8e9f54a4ea99" + }, + "_type": 1, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "catFOSdOtKvqBJU6NyZptL" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 49 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0, + "_right": 0, + "_top": 20, + "_bottom": 20, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 300, + "_originalHeight": 20, + "_id": "3fQjTIRnZO/KOLdzMb0GLz" + }, + { + "__type__": "cc.Node", + "_name": "Handle", + "_objFlags": 0, + "_parent": { + "__id__": 48 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 53 + }, + { + "__id__": 54 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 32, + "height": 32 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "05Lw5+ju5Km6CUuZHE0KIJ" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 52 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_type": 1, + "_sizeMode": 2, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "59km8OsEFBYKJBL8uemNsI" + }, + { + "__type__": "cc.Button", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 52 + }, + "_enabled": true, + "_normalMaterial": null, + "_grayMaterial": null, + "duration": 0.1, + "zoomScale": 1.1, + "clickEvents": [], + "_N$interactable": true, + "_N$enableAutoGrayEffect": true, + "_N$transition": 3, + "transition": 3, + "_N$normalColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "pressedColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$hoverColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "hoverColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$disabledColor": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_N$normalSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_N$pressedSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "pressedSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_N$hoverSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "hoverSprite": { + "__uuid__": "e7aba14b-f956-4480-b254-8d57832e273f" + }, + "_N$disabledSprite": { + "__uuid__": "29158224-f8dd-4661-a796-1ffab537140e" + }, + "_N$target": { + "__id__": 52 + }, + "_id": "60hGQyHlpFo5tBoUoSMlr0" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 48 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0.3, + "_right": 0.3, + "_top": 0, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": false, + "_isAbsRight": false, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 300, + "_originalHeight": 20, + "_id": "d59WBBmtNFop4L7e3muEqI" + }, + { + "__type__": "cc.Slider", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 48 + }, + "_enabled": true, + "direction": 0, + "slideEvents": [], + "_N$handle": { + "__id__": 54 + }, + "_N$progress": 0, + "_id": "85Bj14/jlEqJFygmdTXhhP" + }, + { + "__type__": "cc.Node", + "_name": "ValueLabel", + "_objFlags": 0, + "_parent": { + "__id__": 44 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 58 + }, + { + "__id__": 59 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 144, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 288, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "4clGFOBU5C1KS9BNZ3PBJO" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 57 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 45, + "_left": 0.75, + "_right": 0, + "_top": 10, + "_bottom": 10, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": false, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 113.38, + "_originalHeight": 50.4, + "_id": "67Bcp4s0ZFV4smaHkvs2PR" + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 57 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_useOriginalSize": false, + "_string": "0.10 | 26", + "_N$string": "0.10 | 26", + "_fontSize": 40, + "_lineHeight": 40, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_styleFlags": 0, + "_underlineHeight": 0, + "_N$horizontalAlign": 0, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 2, + "_N$cacheMode": 0, + "_id": "b7jxERzvFB7aeQfSMt4bGk" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 44 + }, + "_enabled": true, + "alignMode": 1, + "_target": null, + "_alignFlags": 40, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_verticalCenter": 0, + "_horizontalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 461.38, + "_originalHeight": 0, + "_id": "e6kFzW7M1LRoUqbVaPBizj" + }, + { + "__type__": "cc.Node", + "_name": "ColorAlphaSlider", + "_objFlags": 0, + "_parent": { + "__id__": 9 + }, + "_children": [ + { + "__id__": 62 + }, + { + "__id__": 65 + }, + { + "__id__": 74 + } + ], + "_active": true, + "_components": [ + { + "__id__": 77 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 576, + "height": 60 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -270, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "78ay9VkEVGU67Iinzm3rCq" + }, + { + "__type__": "cc.Node", + "_name": "SliderDescLabel", + "_objFlags": 0, + "_parent": { + "__id__": 61 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 63 + }, + { + "__id__": 64 + } + ], + "_prefab": null, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 144, + "height": 40 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 1, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + -144, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "b0Am40rDhKiLU6um45ktt+" + }, + { + "__type__": "cc.Label", + "_name": "SliderDescLabel