取色板的实现

效果,压缩的太厉害了,看不太清。
合成 1_2
可以先扫描二维码先体验一下小游戏
gh_9742ee30190e_258

实现方法
主要使用shader+代码的方式实现(这不是废话么!)
分为两部分,1,上下滑动的滑条,控制6种颜色的渐变,2二维触摸板,控制灰度的渐变
第一部分,滑条
滑条就是使用的creato自带的SliderBar,调整一下尺寸,角度,把背景设置为透明。下面再放一个plane,并且自己创建一个material,一个effect,将material绑定到plane上,effect绑定到material上,基础工作完成,这里需要注意的是plane的layer调整成ui的camera可见,基础操作,不懂的可以去看官方文档。
下面是代码部分。
shader部分:


看这代码是不是很简单,定义6个颜色,然后用uv的y值去lerp6种颜色即可。
第二部分,二维触摸板
这一部分就更简单了,直接上代码
微信图片_20210907202939
这里用到了两个lerp,第一个lerp是白色跟目标颜色进行lerp,第二个lerp是上一个lerp得到的颜色跟黑色进行lerp,最终得到每一个uv上的的颜色值。
篇幅有限,有兴趣的,可以加qq号,328387458,或者加qq群319058222,与我进行深入探讨。

7赞

怎么实现获取图片指定点上的像素颜色呢

使用 renderTexture -> readPixels;
使用第三方库比如 web 上的 get-pixels

1赞

GKNwKeYgxn
不需要readPixels 。HUE颜色,一个控制色相,X,Y 代表 明度/饱和度。

颜色不是取出来的,是计算出来的

    getMarkColor(x: number, y: number) {
        let colorWhite = Color.WHITE;
        let colorBlack = Color.BLACK;
        let chooseColor = this.currentChooseColor;
        let endColor = this.lerpVec3(colorWhite, chooseColor, x);
        endColor = this.lerpVec3(endColor, colorBlack, y);
        return endColor;
    }

    lerpVec3(a: Color, b: Color, t: number) {
        let outColor = new Color();
        Color.scale(outColor, a, (1 - t));

        let outColor2 = new Color();
        Color.scale(outColor2, b, t);

        let outColor3 = new Color();
        Color.add(outColor3, outColor, outColor2);
        return outColor3;
    }
1赞

这块的确是计算出来的,不是取出来的,刚好之前手动实现过一个web版本的拾色器,了解了下这块的细节逻辑,颜色的多种表示方式

我在官方案例的这个脚本里readPixels()的结果为什么都是0呢