using UnityEngine; using UVC.Log; namespace UVC.Extension { /// /// RenderTexture È®Àå ¸Þ¼­µå¸¦ Á¦°øÇϴ Ŭ·¡½ºÀÔ´Ï´Ù. /// public static class RenderTextureEx { /// /// RenderTexture¸¦ Texture2D·Î º¯È¯ÇÕ´Ï´Ù. /// /// º¯È¯ÇÒ RenderTexture °´Ã¼ /// º¯È¯µÈ Texture2D °´Ã¼ /// /// »ç¿ë ¿¹½Ã: /// /// // RenderTexture »ý¼º /// RenderTexture renderTexture = new RenderTexture(256, 256, 24); /// /// // Ä«¸Þ¶ó¿¡¼­ renderTexture¿¡ ·»´õ¸µ /// Camera.main.targetTexture = renderTexture; /// Camera.main.Render(); /// /// // RenderTexture¸¦ Texture2D·Î º¯È¯ /// Texture2D texture2D = renderTexture.ToTexture2D(); /// /// // »ç¿ë ÈÄ Á¤¸® /// Camera.main.targetTexture = null; /// Camera.main.ResetAspect(); /// /// public static Texture2D ToTexture2D(this RenderTexture renderTexture) { Texture2D texture2D = new Texture2D(renderTexture.width, renderTexture.height); RenderTexture.active = renderTexture; texture2D.ReadPixels(new UnityEngine.Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0); texture2D.Apply(); return texture2D; } /// /// RenderTexture¸¦ ¹ÙÀÌÆ® ¹è¿­·Î º¯È¯ÇÕ´Ï´Ù. /// /// º¯È¯ÇÒ RenderTexture °´Ã¼ /// À̹ÌÁö Çü½Ä (±âº»°ª: PNG) /// ¹ÙÀÌÆ® ¹è¿­ /// /// »ç¿ë ¿¹½Ã: /// /// RenderTexture rt = new RenderTexture(256, 256, 24); /// byte[] bytes = rt.ToBytes(); /// File.WriteAllBytes("screenshot.png", bytes); /// /// public static byte[] ToBytes(this RenderTexture renderTexture, TextureFormat format = TextureFormat.RGBA32) { Texture2D texture2D = renderTexture.ToTexture2D(); byte[] bytes = texture2D.EncodeToPNG(); Object.Destroy(texture2D); return bytes; } /// /// RenderTexture¸¦ ÁöÁ¤µÈ °æ·Î¿¡ PNG ÆÄÀÏ·Î ÀúÀåÇÕ´Ï´Ù. /// /// ÀúÀåÇÒ RenderTexture °´Ã¼ /// ÀúÀåÇÒ ÆÄÀÏ °æ·Î /// ¼º°ø ¿©ºÎ /// /// »ç¿ë ¿¹½Ã: /// /// RenderTexture rt = new RenderTexture(256, 256, 24); /// Camera.main.targetTexture = rt; /// Camera.main.Render(); /// bool success = rt.SaveToPNG("Assets/Screenshots/screenshot.png"); /// Camera.main.targetTexture = null; /// /// public static bool SaveToPNG(this RenderTexture renderTexture, string filePath) { try { byte[] bytes = renderTexture.ToBytes(); System.IO.File.WriteAllBytes(filePath, bytes); return true; } catch (System.Exception e) { ULog.Error($"RenderTexture¸¦ PNG·Î ÀúÀåÇÏ´Â µ¥ ½ÇÆÐÇß½À´Ï´Ù: {e.Message}", e); return false; } } /// /// RenderTextureÀÇ Å©±â¸¦ Á¶Á¤ÇÕ´Ï´Ù. /// /// ¿øº» RenderTexture /// »õ ³Êºñ /// »õ ³ôÀÌ /// Å©±â°¡ Á¶Á¤µÈ »õ·Î¿î RenderTexture /// /// »ç¿ë ¿¹½Ã: /// /// RenderTexture originalRT = new RenderTexture(1024, 1024, 24); /// RenderTexture resizedRT = originalRT.Resize(512, 512); /// // »ç¿ë ÈÄ Á¤¸® /// resizedRT.Release(); /// originalRT.Release(); /// /// public static RenderTexture Resize(this RenderTexture renderTexture, int width, int height) { RenderTexture resized = new RenderTexture(width, height, renderTexture.depth); Graphics.Blit(renderTexture, resized); return resized; } } }