using UnityEngine; using UnityEngine.Events; using System; using System.Collections; public enum Restrain2D { None, X, Y, } public class Move2D : MoveRoot { #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; InPause = false; if (Local) { if (InDestination_) { Vector3 position = Destination; if (Restrain2D == Restrain2D.X) { position.x = Target.localPosition.x; } else if (Restrain2D == Restrain2D.Y) { position.y = Target.localPosition.y; } Target.localPosition = position; } } else { if (InDestination_) { Vector3 position = Destination; if (Restrain2D == Restrain2D.X) { position.x = Target.position.x; } else if (Restrain2D == Restrain2D.Y) { position.y = Target.position.y; } Target.position = position; } } } } public bool Local; public float Timer; public float Duration; public Vector3 Delta; public Vector3 Origin; public Vector3 Destination; public Transform Target; public Restrain2D Restrain2D = Restrain2D.None; public CurveFunctionV Func; #endregion public Move2D(Transform target) { Target = target; } public override bool DoForward() { Timer += Time.deltaTime; if (Timer > Duration) { Timer = 0; if (Local) { Target.localPosition = Destination; } else { Target.position = Destination; } if (OnForwardFinish != null) { OnForwardFinish.Invoke(); } return true; } else { if (Local) { Vector3 position = Func(Timer, Duration, Origin, Delta); if (Restrain2D == Restrain2D.X) { position.x = Target.localPosition.x; } else if (Restrain2D == Restrain2D.Y) { position.y = Target.localPosition.y; } Target.localPosition = position; } else { Vector3 position = Func(Timer, Duration, Origin, Delta); if (Restrain2D == Restrain2D.X) { position.x = Target.position.x; } else if (Restrain2D == Restrain2D.Y) { position.y = Target.position.y; } Target.position = position; } return false; } } public override bool DoBackward() { throw new Exception(); } 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 = AnimManager.CurveFuncDicV[curve]; if (OnForwardStart != null) { OnForwardStart.Invoke(); } AnimManager.MoveForList.Remove(this); AnimManager.MoveForList.Add(this); } }