-
AssetPreview.GetAssetPreview() 로 얻은 텍스쳐 배경 투명하게 만들어서 저장하기Unity/제로부터 구현 2024. 4. 27. 16:59728x90
AssetPreview.GetAssetPreview() 란?
AssetPreview.GetAssetPreview() 는 오브젝트의 프리뷰 이미지를 아주 간단하게 텍스쳐로 가져올 수 있는 Unity Editor에서만 사용 가능한 함수 입니다.
기본적으로 AssetPreview.GetAssetPreview() 로 얻은 텍스쳐는 회색 배경의 불투명한 이미지를 만들어 줍니다.
하지만 AssetPreview.GetAssetPreview() 로 얻은 이미지의 배경이 불투명하면 다른 오브젝트나 UI에 넣어 사용할때 불투명한 배경이 굉장히 다른 오브젝트나 UI의 그림을 방해하기 때문에 AssetPreview.GetAssetPreview()로 얻은 텍스쳐의 배경을 투명하게 만들어 볼 것 입니다.
1. AssetPreview.GetAssetPreview()로 오브젝트의 프리뷰 이미지를 텍스트로 만들기
Texture2D texture = AssetPreview.GetAssetPreview(obj);
2. TextureFormat.RGBA32의 텍스쳐를 하나 새로 만듭니다
Texture2D transparentTexture = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);
3. GetPixels() 로 텍스쳐의 픽셀을 가져온뒤 픽셀의 0번째 색과 같은 색은 알파값을 0으로 만들어 줍니다.
Color[] pixels = texture.GetPixels(); Color backgroundColor = pixels[0]; for (int i = 0; i < pixels.Length; i++) { if (pixels[i] == backgroundColor) pixels[i].a = 0; }
*주의, 만약 오브젝트에 Color backgroundColor = pixels[0]와 같은 색이 있으면 배경 뿐만 아니라 오브젝트안에 같은 색도 투명해 집니다.
5. 변경한 픽셀을 SetPixels() 하고 Apply() 해줍니다.
transparentTexture.SetPixels(pixels); transparentTexture.Apply();
6. 마무리
byte[] bytes = transparentTexture.EncodeToPNG(); File.WriteAllBytes(path, bytes);
728x90'Unity > 제로부터 구현' 카테고리의 다른 글
비동기 데이터 저장 (0) 2024.07.25 Pentagon Balance UI 제작하기 (0) 2024.06.07 MiniMap (2D) (0) 2024.01.21 Cinemachine 을 사용한 카메라 이동 범위 제한 (2D) (0) 2024.01.16 플레이어의 정보를 로컬 저장소에 저장하기 (PlayerPrebs) (0) 2023.12.24