using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; namespace Item { public class FlareBeacon : MonoBehaviour { [SerializeField] private float range = 1; [SerializeField] private float duration = 5f; [SerializeField] private NavMeshObstacle obstacle; private readonly List inRange = new(); private Item.FlareRegister register; public float Range => range; // Start is called before the first frame update private void Start() { register = Item.FlareRegister.instance; register.beacons.Add(this); transform.localEulerAngles = new Vector3(-89.98f, 0, 0); var r = new Ray(); r.direction = -transform.forward; r.origin = transform.position; RaycastHit hit; var rays = Physics.RaycastAll(r); foreach (var _hit in rays) { if (_hit.transform.gameObject.GetComponent() != null) continue; transform.position = _hit.point; break; } if (Physics.Raycast(r, out hit)) { // transform.position = hit.point; } if (obstacle != null) obstacle.radius = range / 10; } // Update is called once per frame private void Update() { } private void OnDrawGizmosSelected() { // Draw a yellow sphere at the transform's position Gizmos.color = Color.yellow; Gizmos.DrawWireSphere(transform.position, range); } private void OnTriggerEnter(Collider other) { inRange.Add(other.gameObject); } private void OnTriggerExit(Collider other) { inRange.Remove(other.gameObject); } } }