본문 바로가기

Unity/제로부터 구현

AssetPreview.GetAssetPreview() 로 얻은 텍스쳐 배경 투명하게 만들어서 저장하기

728x90

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