using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading.Tasks; using UnityEditor.Rendering; using UnityEngine; using UnityEngine.UIElements; public class DepthTester : MonoBehaviour { public int FrameRes = 256; public float Offset = 0.02f; private RenderTexture texture; public Texture2D texture2D; private Camera camera; private float farPlane; private float nearPlane; private int id; private Task task; // Start is called before the first frame update void Start() { camera = GetComponent(); id = camera.GetInstanceID(); farPlane = camera.farClipPlane; nearPlane = camera.nearClipPlane; texture = BlendShaderController.CreateTextures(1, FrameRes, FrameRes, false)[0]; camera.targetTexture = texture; texture2D = new Texture2D(texture.width, texture.height, TextureFormat.RGBAFloat, false); task = DepthRenderPassFeature.DepthRenderPass.RequestDepthDataAsync(id); } private void OnDisable() { if (texture != null) { Destroy(texture); } if (texture2D != null) { Destroy(texture2D); } } private void Update() { lock(task) { if(task != null) { if(task.IsCompletedSuccessfully) { float[] depths = task.Result; int centerIndex = (FrameRes / 2) * FrameRes + (FrameRes / 2); float depth = depths[centerIndex]; Vector3 depthPos = transform.position + transform.right * Offset; Debug.DrawLine(depthPos, depthPos + transform.forward * depth, Color.green); Debug.Log($"chto to risuet: dist:{depth}; depthsCount: {depths.Length}"); task = DepthRenderPassFeature.DepthRenderPass.RequestDepthDataAsync(id); } else if(task.IsCanceled) { task = DepthRenderPassFeature.DepthRenderPass.RequestDepthDataAsync(id); } } } Vector3 raycastPos = transform.position - transform.right * Offset; float rayDistance = 0; if(Physics.Raycast(transform.position, transform.forward, out var hit, 100)) { rayDistance = hit.distance; Debug.DrawLine(raycastPos, raycastPos + transform.forward * rayDistance, Color.red); } } }