using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class Boat : MonoBehaviour { private NavMeshAgent agent; private LineRenderer lineRenderer; private GameObject spot; private Coroutine draw; public Vector3 target { get; set; } public delegate void LandedEventHandler(); public event LandedEventHandler OnLanded; private void Awake() { agent = GetComponent(); lineRenderer = GetComponent(); lineRenderer.startWidth = 0.1f; lineRenderer.endWidth = 0.1f; lineRenderer.material.color = Color.yellow; lineRenderer.enabled = false; spot = Instantiate(DataManager.Inst.mouseSpot); } private void Start() { agent.SetDestination(target); spot.gameObject.SetActive(true); spot.transform.position = target; if (draw != null) StopCoroutine(draw); draw = StartCoroutine(DrawPath()); } private void Update() { if (!(agent.remainingDistance < 0.1f && !agent.pathPending)) return; spot.gameObject.SetActive(false); lineRenderer.enabled = false; if (draw != null) StopCoroutine(draw); OnLanded?.Invoke(); Destroy(gameObject); } private IEnumerator DrawPath() { lineRenderer.enabled = true; yield return null; while (true) { var count = agent.path.corners.Length; lineRenderer.positionCount = count; for (var i = 0; i < count; i++) { lineRenderer.SetPosition(i, agent.path.corners[i] + new Vector3(0,1,0)); } yield return null; } } }