using UnityEngine; namespace Superlazy.UI { public class SLUIMove : SLUIOnOffTransition { public float onDuration = 0.3f; public float offDuration = 0.3f; public Vector3 offset; private RectTransform rectTrasform; private float currentTime; private Vector3 defaultPosition; protected override void Validate() { rectTrasform = GetComponent(); } protected override void Init() { defaultPosition = rectTrasform.anchoredPosition3D - offset; var newOffset = Vector3.zero; if (currentState == false) { currentTime = 0; } else { newOffset = offset; currentTime = 1; } rectTrasform.anchoredPosition3D = newOffset + defaultPosition; } protected override bool OnUpdate(bool forceUpdate = false) { var result = false; if (currentState) { if (onDuration == 0) { currentTime = 1; } else { currentTime += Time.unscaledDeltaTime / onDuration; } if (currentTime >= 1.0f) { currentTime = 1.0f; result = true; } } else { if (offDuration == 0) { currentTime = 0; } else { currentTime -= Time.unscaledDeltaTime / offDuration; } if (currentTime <= 0.0f) { currentTime = 0.0f; result = true; } } var ease = 1 - Mathf.Pow(1 - currentTime, 4); // * currentTime; // 0~1 var newOffset = Vector3.Lerp(Vector3.zero, offset, ease); rectTrasform.anchoredPosition3D = newOffset + defaultPosition; return result; } protected override void ForceDisable() { currentTime = 0.0f; rectTrasform.anchoredPosition3D = defaultPosition; } } }