Как отредактировать альфа-канал текстуры с помощью кода, чтобы вырезать дыру в текстуре, закрывающей экран? - PullRequest
0 голосов
/ 13 июля 2020

Я рисую текстуру, покрывающую мой экран, и хотел бы «вырезать» прямоугольное angular отверстие в его альфа-канале с помощью кода (чтобы показать сцену за ним) - с переменными для настройки размер и положение отверстия. Как я могу это сделать?

Это код, который у меня есть, который покрывает весь экран текстурой:

 using UnityEngine;
 
 public class HoleInScreen : MonoBehaviour 
 {
     public Texture2D screenImage;
    
     void OnGUI()
     {
         GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), screenImage);
     }
 }

введите описание изображения здесь

1 Ответ

1 голос
/ 13 июля 2020

Предполагая, что ваша текстура поддерживает альфа-канал, вы можете просто

  • Используйте Texture2D.GetPixels, чтобы получить пиксели в соответствующем диапазоне
  • Установите значение альфа для все в 0
  • Используйте Texture2D.SetPixels, чтобы записать измененные пиксели

Что-то вроде

public void CutRectangleHole(Texture2D texture, Vector2Int bottomLeft, Vector2Int topRight)
{
    var size = topRight - bottomLeft;
    var pixels = texture.GetPixels(bottomLeft.x, bottomLeft.y, size.x, size.y, 0);
    for(int i = 0; i < pixels.Length; i++)
    {
        var color = pixels[i];
        color.a = 0;
        pixels[i] = color;
    }

    texture.SetPixels(bottomLeft.x, bottomLeft.y, size.x, size.y, pixels, 0);
    texture.Apply();
}

где bottomLeft - левая нижняя начальная точка отверстия, topRight - верхняя правая конечная точка отверстия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...