我在Unity中创建了一个艺术程序/游戏,但是我需要为在其中构建东西的艺术家创建一个颜色选择器。我使用NGUI UI系统,并且我已经创建了一个基本的sprite,上面有一组颜色,沿着一个自定义颜色输入。
然而,要准确地选择其中一种颜色并不容易,我现在是这样做的:
IEnumerator CaptureTempArea()
{
yield return new WaitForEndOfFrame();
tex = new Texture2D(Screen.width, Screen.height);
tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
tex.Apply();
Vector2 pos = UICamera.lastEventPosition;
int x = (int)pos.x;
int y = (int)pos.y;
Color color = tex.GetPixel(x, y);
Debug.Log(ColorToHex(color));
Debug.Log(tex.GetRawTextureData().Length / 1000);
Destroy(tex);
tex = null;
}
然而,必须有一个更好的方法来捕获-只是-特定的区域。这确实准确地得到颜色,但是,它也产生了一个图像-即使是临时的-这是任何地方从2到8 MB的大小之前,它被清除的缓冲区。给定特定的UI系统,有没有一个更好的方法来创建一个颜色拾取器,或一个将使用更少的内存?
1条答案
按热度按时间yhived7q1#
总的来说,我会优化一些东西,比如避免分配/阅读while纹理只是为了获得一个像素,并在整个会话中保持一个活跃的1x 1纹理...如果你的设备支持它,你也可以使用computebuffer从着色器传递颜色值...这是你的代码应该看起来像(我还没有测试它,只是重写了你的代码)