102 lines
2.7 KiB
C#
102 lines
2.7 KiB
C#
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;
|
|
}
|
|
}
|
|
} |