Unity中立方体放大到指定值后自动缩小功能代码运行异常如何解决
问题解决方法
错误原因
- 缺少缩放方向的状态标记:当缩放值降低到7以下时,下一帧会立刻进入else分支重新放大,最终表现就是缩放值在6~7之间反复抖动
- if分支的for循环用法错误:Unity的
Update()方法每帧仅执行1次,单帧内的循环只会让本帧的缩放多减数倍Time.deltaTime,完全无法实现跨帧持续缩小的效果
修正方案
新增一个bool类型的成员变量记录当前缩放方向,去掉错误的for循环,按帧根据状态执行对应缩放逻辑即可,参考代码如下:
// 声明为类成员变量,不要写在Update方法内部 private bool isScalingUp = true; // 缩放速度参数,可直接在Inspector面板调整数值 public float scaleSpeed = 1f; private void Update() { if (isScalingUp) { // 执行放大逻辑 transform.localScale += Vector3.one * scaleSpeed * Time.deltaTime; // 放大到阈值后切换为缩小状态 if (transform.localScale.x >= 7) { isScalingUp = false; } } else { // 执行缩小逻辑 transform.localScale -= Vector3.one * scaleSpeed * Time.deltaTime; // 缩小到1后锁定数值,若需要循环缩放可放开注释切换回放大状态 if (transform.localScale.x <= 1) { transform.localScale = Vector3.one; // isScalingUp = true; } } }
逻辑说明
- 用成员变量保存缩放方向,不会因为缩放值暂时低于7就切换回放大逻辑,保证缩小过程可以持续执行到缩放值回到1
- 去掉了错误的单帧for循环,每帧仅执行一次缩放计算,符合Unity帧更新的执行规则
- 缩小到阈值时主动赋值为1,避免浮点运算精度误差导致最终缩放值和预期不一致
内容的提问来源于stack exchange,提问作者Themeiscool
相关产品推荐
相关产品推荐

