private void FixedUpdate() { if (_currentWaypointIndex < 0 || _currentWaypointIndex >= _waypoints.Length) { _currentWaypointIndex = 0; return; } PlatformWaypoint targetWaypoint = _waypoints[_currentWaypointIndex]; if ((targetWaypoint.transform.position - transform.position).sqrMagnitude < float.Epsilon) { _currentWaypointIndex = (_currentWaypointIndex + 1) % _waypoints.Length; targetWaypoint = _waypoints[_currentWaypointIndex]; } transform.LookAt(targetWaypoint.transform); float step = _speed * Time.fixedDeltaTime; transform.position = Vector3.MoveTowards(transform.position, targetWaypoint.transform.position, step); }
/// <summary> /// This function is called every fixed framerate frame, if the MonoBehaviour is enabled. /// </summary> void FixedUpdate() { if (crumbled) { if (currentRestoreTime > 0) { currentRestoreTime -= Time.fixedDeltaTime; if (currentRestoreTime <= 0) { Restore(); } } } else { if (currentCrumbleTime > 0) { currentCrumbleTime -= Time.fixedDeltaTime; if (currentCrumbleTime <= 0) { crumbled = true; animator.SetTrigger(ANIMATION_CRUMBLE); myCollider.enabled = false; if (restoreTime > 0) { currentRestoreTime = restoreTime; } } } if (currentWaypoint) { if (currentWaitTime > 0) { currentWaitTime -= Time.fixedDeltaTime; return; } Vector2 distance = currentWaypoint.transform.position - transform.position; if (distance.magnitude <= decelerationDistance) { if (distance.magnitude > 0) { speed -= Time.fixedDeltaTime * distance.normalized * maxSpeed * maxSpeed / (2 * decelerationDistance); } else { speed = Vector2.zero; } } else if (speed.magnitude < maxSpeed) { if (accelerationDistance > 0) { speed += Time.fixedDeltaTime * distance.normalized * maxSpeed * maxSpeed / (2 * accelerationDistance); } if (speed.magnitude > maxSpeed || accelerationDistance <= 0) { speed = distance.normalized * maxSpeed; } } Vector3 newPos = Vector2.MoveTowards(transform.position, currentWaypoint.transform.position, speed.magnitude * Time.fixedDeltaTime); Vector2 velocity = newPos - transform.position; if (speed.y > 0) { MoveObjects(velocity); transform.position = newPos; } else { transform.position = newPos; MoveObjects(velocity); } distance = currentWaypoint.transform.position - transform.position; if (distance.magnitude < 0.00001f) { speed = Vector2.zero; currentWaypoint = currentWaypoint.nextWaipoint; currentWaitTime = waitTime; } } } }