本文已参与[新人创作礼]活动,一起开启掘金创作之路。
修改纹理颜色是在三维引擎中很常见的操作之一,在Unity中我们也可以通过修改纹理颜色达到各种变换的效果。
具体怎么改呢,直接上代码:
//设置像素
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
texture.SetPixel(i, j, new UnityEngine.Color(1, 0, 0));
}
}
texture.Apply();
sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0, 0));
imagePreviewer.sprite = sprite;
这里核心的方法是texture.SetPixel方法,真的是“像素级”的修改。SetPixel需要设置3个参数,分别是坐标x,坐标y和颜色值。 具体可以参照API文档: docs.unity3d.com/cn/2017.2/S…
从API文档中还可以看到有GetPixel等方法。其中有意思的是,还有个SetPixels的方法,就是可以批量直接改了。 具体可以参照API文档: docs.unity3d.com/cn/2017.2/S… 从API文档中可以看到,它支持的第一个参数的描述是: 要指定的像素颜色数组(一幅展平为 1D 数组的 2D 图像)。 那就可以直接怼一个图像过来了,目测还挺方便的。
但是,但是,但是,重要的问题讲三遍!!!不管用SetPixel还是使用SetPixel,都不要忘记一个操作: texture.Apply();
只有执行了Apply从操作,设置像素才能生效!!! 我就是忽略了这一步,一直没成功,百思不得其解,反复看了几遍文档才醒悟过来,真是痛彻心扉。
文档中是对Apply这么描述的 (见:docs.unity3d.com/cn/2017.2/S… 实际应用任何先前的 SetPixel 和 SetPixels 更改。
机翻的中文比较恶心,实际上它的意思是将更改的像素上传到显卡。
另外,在SetPixel里面也提到: 上传是一项成本很高的操作,因此您想要在 Apply 调用之间尽可能多地更改像素。
所以最好是一次性修改,修改完之后再一次性Apply.
以上就是对Unity里面修改纹理颜色的总结和踩坑记录。如果对您有帮助,希望点个赞,谢谢。