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