using UnityEngine; namespace OnlyScove.Scripts { public class EnvironmentScanner : MonoBehaviour { [SerializeField] private Vector3 forwardRayOffset = new Vector3(0, 2.5f, 0); [SerializeField] float forwardRayLength = 10f; [SerializeField] LayerMask obstacleLayer; [SerializeField] float heightRayLength; public ObstacleHitInfo ObstacleCheck() { var hitData = new ObstacleHitInfo(); var forwardOrigin = transform.position + forwardRayOffset; hitData.forwardHitFound = Physics.Raycast(transform.position + forwardRayOffset, transform.forward, out hitData.forwardHit, forwardRayLength, obstacleLayer ); Debug.DrawRay(forwardOrigin, transform.forward * forwardRayLength, (hitData.forwardHitFound) ? Color.red : Color.green); if (hitData.forwardHitFound) { var heightOrigin = hitData.forwardHit.point + Vector3.up * heightRayLength; hitData.heightHitFound = Physics.Raycast(heightOrigin, Vector3.down, out hitData.heightHit, heightRayLength, obstacleLayer); Debug.DrawRay(heightOrigin, Vector3.down * heightRayLength, (hitData.heightHitFound) ? Color.red : Color.green); } return hitData; } } } public struct ObstacleHitInfo { public RaycastHit forwardHit; public RaycastHit heightHit; public bool forwardHitFound; public bool heightHitFound; }