dezhou_client/wb_unity_pro/Assets/Scripts/LuaHelper/LuaUIBtnScale.cs

102 lines
2.7 KiB
C#
Raw Normal View History

2025-12-17 21:08:27 +08:00
using UnityEngine;
using LuaInterface;
public class LuaUIBtnScale : MonoBehaviour
{
public float floStart = 1;
public float floEnd = 1;
public float floTime = 0;
public float duration = 1f; // 动画持续时间
bool booPlay;
public int distance = 1;
private LuaFunction finishCallback;
private bool isScalingDown; // 判断是缩小还是放大动画
void Update()
{
if (booPlay)
{
floTime += Time.deltaTime * distance;
// 计算当前进度 (0到1之间)
float progress = Mathf.Clamp01(floTime / duration);
// 插值计算当前缩放值
float currentScale;
if (isScalingDown)
{
currentScale = Mathf.Lerp(floStart, floEnd, progress);
}
else
{
currentScale = Mathf.Lerp(floStart, floEnd, progress);
}
// 应用缩放
transform.localScale = Vector3.one * currentScale;
// 结束条件判断
if ((distance > 0 && floTime >= duration) || (distance < 0 && floTime <= 0))
{
// 确保最终缩放值准确
transform.localScale = Vector3.one * (distance > 0 ? floEnd : floStart);
// 动画结束
booPlay = false;
floTime = distance > 0 ? duration : 0;
// 执行完成回调
if (finishCallback != null)
{
finishCallback.Call();
finishCallback.Dispose();
finishCallback = null;
}
}
}
}
public void AddPlay(LuaFunction funcFinish)
{
// 保存回调函数
finishCallback = funcFinish;
// 判断是缩小还是放大动画
isScalingDown = (floStart > floEnd);
// 根据动画方向设置初始时间
if (distance > 0)
{
floTime = 0; // 正向播放从0开始
}
else
{
floTime = duration; // 反向播放从duration开始
}
// 设置初始缩放
transform.localScale = Vector3.one * (distance > 0 ? floStart : floEnd);
booPlay = true;
}
// 提供一个简单的方法来播放缩放动画
public void PlayScale(float start, float end, float animDuration, LuaFunction callback)
{
floStart = start;
floEnd = end;
duration = animDuration;
AddPlay(callback);
}
// 在对象销毁时清理Lua函数
void OnDestroy()
{
if (finishCallback != null)
{
finishCallback.Dispose();
finishCallback = null;
}
}
}