调试unity的material颜色时,需要用代码控制改变颜色。在取色板中取号颜色,拿着RGB的值赋值给material.color后发现material的颜色总是不对,后来对比了unity界面中material的取色板后发现赋值给GB通道的值是反的,如下图所示,取色板上RGB(0,203,255),代码中是RGB(0,255,203)。

查看了unity关于color的构造函数,输入参数是r,g,b,所以这里应该是有问题。material的b,g通道是反的。

        //
        // 摘要:
        //     Constructs a new Color with given r,g,b components and sets a to 1.
        //
        // 参数:
        //   r:
        //     Red component.
        //
        //   g:
        //     Green component.
        //
        //   b:
        //     Blue component.
        public Color(float r, float g, float b);
        //
        // 摘要:
        //     Constructs a new Color with given r,g,b,a components.
        //
        // 参数:
        //   r:
        //     Red component.
        //
        //   g:
        //     Green component.
        //
        //   b:
        //     Blue component.
        //
        //   a:
        //     Alpha component.
        public Color(float r, float g, float b, float a);

另外遇到的问题是material的属性color各通道范围与unity中Color类不同,material的属性color各通道数据范围是(0~1),但Color类中r,g,b通道数据范围是(0~255)。所以如果写成如下程序运行后材质颜色是不对的:

Color trajColor = new Color(0, 255, 203);
material.color = trajColor;

应该对Color的对象进行归一化,如下:

material.color = new Color(trajColor.r/255f, trajColor.b/255f, trajColor.g/255f, trajColor.a) ;

更多推荐