using UnityEngine; using UnityEngine.Rendering; [ExecuteInEditMode] public class CopyMainCameraDepth : MonoBehaviour { public Material waterMat; public RenderTexture m_CamDepth; private CommandBuffer m_CmdDepthGrab; private Material m_DepthGrabMat; private int m_pixelWidth; private int m_pixelHeight; private void Start() { m_DepthGrabMat = new Material(Shader.Find("SkyMaster/iOS_Depth_Grab")); m_CmdDepthGrab = new CommandBuffer(); Camera.main.AddCommandBuffer(CameraEvent.BeforeImageEffectsOpaque, m_CmdDepthGrab); Camera.main.depthTextureMode |= DepthTextureMode.Depth; } private void Update() { if (m_CmdDepthGrab == null) { m_DepthGrabMat = new Material(Shader.Find("SkyMaster/iOS_Depth_Grab")); m_CmdDepthGrab = new CommandBuffer(); Camera.main.AddCommandBuffer(CameraEvent.BeforeImageEffectsOpaque, m_CmdDepthGrab); Camera.main.depthTextureMode |= DepthTextureMode.Depth; } if (m_CamDepth == null || !m_CamDepth.IsCreated() || Camera.main.pixelWidth != m_pixelWidth || Camera.main.pixelHeight != m_pixelHeight) { m_pixelWidth = Camera.main.pixelWidth; m_pixelHeight = Camera.main.pixelHeight; m_CamDepth = new RenderTexture(m_pixelWidth, m_pixelHeight, 0, RenderTextureFormat.RFloat); m_CamDepth.Create(); if (waterMat != null) { waterMat.SetTexture("_camDepthTex", m_CamDepth); } } m_CmdDepthGrab.Clear(); m_CmdDepthGrab.name = "Grab depth"; m_CmdDepthGrab.Blit(m_CamDepth, m_CamDepth, m_DepthGrabMat); } }