////////////////////////////////////////////////////////////////////////// // UNITY ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Update private void Update() { if (m_Movement.HasPath == false) { return; } float traveledDistance = (m_Movement.PrevPosition - transform.position).sqrMagnitude; // CHECK if (traveledDistance >= m_Movement.NextNodeDistance) { m_Movement.Path[m_Movement.NodeIdx].OnNodeReached(this); m_Movement.NodeIdx++; // Arrived if (m_Movement.NodeIdx == m_Movement.PathLength || m_Movement.Path[m_Movement.NodeIdx] == null) { if (m_Movement.Action != null) { m_Movement.Action(); } m_Movement.Reset(); return; } m_Movement.NextNodeDistance = (m_Movement.Path[m_Movement.NodeIdx].Position - transform.position).sqrMagnitude; m_MovementStartPosition = m_Movement.PrevPosition = transform.position; } // go to node Vector3 targetDirection = (m_Movement.Path[m_Movement.NodeIdx].Position - transform.position).normalized; transform.position += (targetDirection * m_Speed) * Time.deltaTime; }