using System.Collections; using System.Collections.Generic; using UnityEngine; public class RenderTextureCreator : MonoBehaviour { [SerializeField] Vector2 m_Size; [SerializeField] Camera m_TargetCamera; [SerializeField] bool m_Reuse = false; static Dictionary m_RenderTexDict = new Dictionary(); private void Awake() { if (m_TargetCamera != null && m_TargetCamera.targetTexture == null) { RenderTexture rt; if (m_Reuse && GetRenderTexture(m_Size, out rt)) { m_TargetCamera.targetTexture = rt; return; } rt = new RenderTexture(Mathf.RoundToInt(m_Size.x), Mathf.RoundToInt(m_Size.y), 16); switch (Application.platform) { case RuntimePlatform.OSXEditor: case RuntimePlatform.WindowsEditor: case RuntimePlatform.WindowsPlayer: rt.format = RenderTextureFormat.ARGB32; break; default: rt.format = RenderTextureFormat.ARGB4444; break; } rt.useMipMap = false; rt.wrapMode = TextureWrapMode.Clamp; rt.filterMode = FilterMode.Bilinear; m_TargetCamera.targetTexture = rt; if (!m_RenderTexDict.ContainsKey(m_Size)) { m_RenderTexDict.Add(m_Size, rt); } } } public static bool GetRenderTexture(Vector2 _Size, out RenderTexture _tex) { return m_RenderTexDict.TryGetValue(_Size, out _tex); } }