有没有更好的方法在Unity C#和NGUI中创建颜色选择器?

时间:2016-08-23 14:37:07

标签: c# unity3d

我在Unity中创建了一些艺术程序/游戏,但我需要为正在其中构建内容的艺术家创建一个颜色选择器。我正在使用NGUI UI系统,并且我已经创建了一个带有一组颜色的基本精灵,以及一个自定义颜色输入。

然而,实际上准确地选择其中一种颜色并不容易。 我现在这样做:

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 个答案:

答案 0 :(得分:0)

通常,我会优化一些东西,例如避免分配/读取while纹理只是为了获取单个像素,并在整个会话期间保持实时1x1纹理... 如果您的设备支持它,则还可以使用computebuffer来传递来自着色器的颜色值... 这就是您的代码的外观(我尚未测试过,只是稍微重写了一下代码)

https://angular-6-jwt-authentication-example-tsu2sm.stackblitz.io/user