Изменение пикселей текстуры спрайта приводит к гигантскому серому квадрату - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть спрайт 32x32, который я пытаюсь получить доступ к данным пикселей и изменить.

Для этого я просто беру текстуру спрайта, создаю новую текстуру на основе старой и затем изменяю значения пикселей новой текстуры. Затем я создаю новый спрайт с измененной текстурой и меняю параметр спрайта SpriteRenderer на новый спрайт.

Однако, когда я на самом деле запускаю свой сценарий, я получаю огромный серый квадрат, который в 10 раз больше исходного спрайта 32x32. Я очень новичок в единстве, поэтому я не уверен, почему это происходит. Любое понимание было бы замечательно.

    private Sprite sprite;
    private Texture2D texture;


    // Use this for initialization
    void Start ()
    {
        sprite = this.gameObject.GetComponent<SpriteRenderer>().sprite;
        texture = sprite.texture;
        Texture2D newTexture = modifyTexture(texture);

        SpriteRenderer sr = this.gameObject.GetComponent<SpriteRenderer>();
        sr.sprite = Sprite.Create(newTexture, new Rect(0, 0, newTexture.width, newTexture.height), new Vector2(0, 0), 10);
    }

    public Texture2D modifyTexture(Texture2D baseTexture)
    {
        Texture2D newTexture = new Texture2D(baseTexture.width, baseTexture.height);

        int x = 0;
        while(x < newTexture.width)
        {
            int y = 0;
            while(y < newTexture.height)
            {
                Color currentPixel = baseTexture.GetPixel(x,y);
                Color modifiedPixel = currentPixel;
                modifiedPixel.r = (float)(modifiedPixel.r + 0.10);
                modifiedPixel.b = (float)(modifiedPixel.b + 0.10);
                modifiedPixel.g = (float)(0.10);
                newTexture.SetPixel(x, y, modifiedPixel);
                y++;
            }
            x++;
        }

        Debug.Log(newTexture.GetPixel(5, 5).ToString());
        return newTexture;
    }

1 Ответ

0 голосов
/ 05 сентября 2018

После изменения пикселей текстуры необходимо вызвать функцию Apply, чтобы загрузить измененные пиксели на видеокарту.

public Texture2D modifyTexture(Texture2D baseTexture)
{
    Texture2D newTexture = new Texture2D(baseTexture.width, baseTexture.height);

    int x = 0;
    while (x < newTexture.width)
    {
        int y = 0;
        while (y < newTexture.height)
        {
            Color currentPixel = baseTexture.GetPixel(x, y);
            Color modifiedPixel = currentPixel;
            modifiedPixel.r = (float)(modifiedPixel.r + 0.10);
            modifiedPixel.b = (float)(modifiedPixel.b + 0.10);
            modifiedPixel.g = (float)(0.10);
            newTexture.SetPixel(x, y, modifiedPixel);
            y++;
        }
        x++;
    }
    //Upload changes to Graphics graphics card
    newTexture.Apply();

    Debug.Log(newTexture.GetPixel(5, 5).ToString());
    return newTexture;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...