RaycastData RaycastAtAngle(float angle) { Vector3 direction = MMMaths.DirectionFromAngle(angle, 0f); RaycastHit hit; if (Physics.Raycast(Center, direction, out hit, VisionRadius, ObstacleMask)) { return(new RaycastData(true, hit.point, hit.distance, angle)); } else { return(new RaycastData(false, Center + direction * VisionRadius, VisionRadius, angle)); } }
protected virtual void OnSceneGUI() { // draws a circle around the character to represent the cone of vision's radius _coneOfVision = (MMConeOfVision)target; Handles.color = Color.yellow; Handles.DrawWireArc(_coneOfVision.Center, Vector3.up, Vector3.forward, 360f, _coneOfVision.VisionRadius); // draws two lines to mark the vision angle Vector3 visionAngleLeft = MMMaths.DirectionFromAngle(-_coneOfVision.VisionAngle / 2f, _coneOfVision.EulerAngles.y); Vector3 visionAngleRight = MMMaths.DirectionFromAngle(_coneOfVision.VisionAngle / 2f, _coneOfVision.EulerAngles.y); Handles.DrawLine(_coneOfVision.Center, _coneOfVision.Center + visionAngleLeft * _coneOfVision.VisionRadius); Handles.DrawLine(_coneOfVision.Center, _coneOfVision.Center + visionAngleRight * _coneOfVision.VisionRadius); foreach (Transform visibleTarget in _coneOfVision.VisibleTargets) { Handles.color = MMColors.Orange; Handles.DrawLine(_coneOfVision.Center, visibleTarget.position); } }
RaycastData RaycastAtAngle(float angle) { _direction = MMMaths.DirectionFromAngle(angle, 0f); if (Physics.Raycast(Center, _direction, out _raycastAtAngleHit, VisionRadius, ObstacleMask)) { _returnRaycastData.Hit = true; _returnRaycastData.Point = _raycastAtAngleHit.point; _returnRaycastData.Distance = _raycastAtAngleHit.distance; _returnRaycastData.Angle = angle; } else { _returnRaycastData.Hit = false; _returnRaycastData.Point = Center + _direction * VisionRadius; _returnRaycastData.Distance = VisionRadius; _returnRaycastData.Angle = angle; } return(_returnRaycastData); }