using System; using System.Collections.Generic; using UnityEngine; public class PathFollow : BaseBehaviour { public BoxCollider2D _boxCollider { get; private set; } public void Start() { if (this.Path == null) { UnityEngine.Debug.LogError("Path Cannot be null", base.gameObject); return; } if (base.transform.GetComponent() != null) { this._boxCollider = base.transform.GetComponent(); } this._currentPoint = this.Path.GetPathEnumerator(); this._currentPoint.MoveNext(); if (this._currentPoint.Current == null) { return; } base.transform.position = this._currentPoint.Current.position; } public void FixedUpdate() { if (this._currentPoint == null || this._currentPoint.Current == null) { return; } Vector3 position = base.transform.position; if (this.Type == PathFollow.FollowType.MoveTowards) { base.transform.position = Vector3.MoveTowards(base.transform.position, this._currentPoint.Current.position, Time.fixedDeltaTime * this.Speed); } else if (this.Type == PathFollow.FollowType.Lerp) { base.transform.position = Vector3.Lerp(base.transform.position, this._currentPoint.Current.position, Time.fixedDeltaTime * this.Speed); } float sqrMagnitude = (base.transform.position - this._currentPoint.Current.position).sqrMagnitude; if (sqrMagnitude < this.MaxDistanceToGoal * this.MaxDistanceToGoal) { this._currentPoint.MoveNext(); } Vector3 position2 = base.transform.position; this.CurrentSpeed = (position2 - position) / Time.fixedDeltaTime; } public PathFollow.FollowType Type; public PathDefinition Path; public float Speed = 1f; public float MaxDistanceToGoal = 0.1f; public Vector3 CurrentSpeed; private IEnumerator _currentPoint; public enum FollowType { MoveTowards, Lerp } }