Unity经典Stacker游戏冰淇淋物体移动时卡在屏幕边缘问题求助
问题排查与解决方法
根因分析
卡顿的核心原因是MoveBox方法的执行顺序逻辑存在漏洞:先判断边界反转速度,再执行位置移动,当单帧移动步长过大时,物体位置超出边界后反转速度,下一帧位置仍未回到边界范围内就会再次触发反转,导致速度反复切换方向,物体停在边缘不动。
修复方案
调整MoveBox的执行逻辑,先计算移动后的位置,再做边界校验和位置钳位,避免物体超界后反复触发速度反转,修改后的代码如下:
private float min_X = -2.48f, max_X = 2.48f; private float move_Speed = 60f; void Start() { GamePlayController.instance.currentBox = this; canMove = true; // 随机初始移动方向 if (Random.Range(0, 2) > 0) { move_Speed *= -1f; } } void MoveBox() { if (canMove) { Vector3 temp = transform.position; // 先计算当前帧移动后的位置 temp.x += move_Speed * Time.deltaTime; // 边界校验+位置钳位+方向反转 if (temp.x > max_X) { temp.x = max_X; move_Speed *= -1f; } else if (temp.x < min_X) { temp.x = min_X; move_Speed *= -1f; } // 最终赋值位置 transform.position = temp; } }
额外优化点:
- 若修改后仍存在卡滞,可适当调低
move_Speed数值,降低单帧移动步长 - 可根据冰淇淋物体的实际宽度,适当缩小
min_X/max_X的取值范围,预留碰撞冗余空间,避免物体碰撞体和屏幕边缘触发不必要的碰撞导致卡滞
内容的提问来源于stack exchange,提问作者Davinco
相关产品推荐
相关产品推荐

