using UnityEngine; using UnityEngine.Events; using System; using System.Collections; public class Move2D : Move { #region 变量 public override bool InDestination { get { if (Local) { if (Target.localPosition.Equal(Destination)) { _InDestination = true; } else { _InDestination = false; } } else { if (Target.position.Equal(Destination)) { _InDestination = true; } else { _InDestination = false; } } return _InDestination; } set { _InDestination = value; if (Local) { if (_InDestination) { Target.localPosition = Destination; } } else { if (_InDestination) { Target.position = Destination; } } } } public bool Local; public float Timer; public float Duration; public Vector3 Delta; public Vector3 Origin; public Vector3 Destination; public Transform Target; public CurveFunctionV Func; #endregion public Move2D(Transform target) { Target = target; } public override bool Do() { Timer += Time.fixedDeltaTime; if (Timer > Duration) { Timer = 0; if (Local) { Target.localPosition = Destination; } else { Target.position = Destination; } if (OnForwardFinish != null) { OnForwardFinish.Invoke(); } return true; } else { if (Local) { Target.localPosition = Func(Timer, Duration, Origin, Delta); } else { Target.position = Func(Timer, Duration, Origin, Delta); } return false; } } public void StartMove(Vector3 destination, float duration, bool local, Curve curve) { Timer = 0; InDestination = false; destination.z = Target.position.z; Local = local; if (Local) { Delta = destination - Target.localPosition; Origin = Target.localPosition; } else { Delta = destination - Target.position; Origin = Target.position; } Duration = duration; Destination = destination; Func = ManaAnim.CurveFuncDicV[curve]; if (OnForwardStart != null) { OnForwardStart.Invoke(); } ManaAnim.MoveList.Remove(this); ManaAnim.MoveList.Add(this); } }