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; } } }