ProjectDDD/Packages/SLUnity/SLUI/SLUIMove.cs
2025-06-25 11:33:17 +09:00

91 lines
2.3 KiB
C#

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<RectTransform>();
}
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;
}
}
}