Unity布尔值为真时调用函数及碰撞5秒物体上升仅生效一次求解
问题根因
- 逻辑仅能触发一次的核心原因是
isCreated变量第一次位移执行后被设置为true,全程没有重置逻辑,后续再满足碰撞时长条件也无法进入位移代码块。 - 额外冗余问题:Unity的
OnGUI是引擎自带的生命周期回调,会自动每帧调用多次,你在Update中手动调用属于多余操作,反而会增加额外开销。 - 你当前的位移逻辑完全不需要放在
OnGUI中执行,没有任何GUI渲染相关的操作,属于逻辑放错了位置。
修复代码
如果需求是每次持续碰撞满5秒,物体就向上移动2米,碰撞结束后重置状态等待下次触发,可以直接简化代码如下:
public float elapsedTime = 0f; bool hasMoved = false; void OnTriggerStay(Collider other) { elapsedTime += Time.deltaTime; // 满足时长且还未执行过本次碰撞的位移逻辑时才执行 if (elapsedTime >= 5.0f && !hasMoved) { Vector3 newPos = transform.position; newPos.y += 2f; transform.position = newPos; hasMoved = true; } } void OnTriggerExit(Collider other) { // 退出碰撞时重置所有状态,下次碰撞可以正常触发 elapsedTime = 0f; hasMoved = false; }
如果需求是碰撞结束后物体要回到初始位置,只需要在OnTriggerExit中加对应的位置重置逻辑即可。
内容的提问来源于stack exchange,提问作者MaD
相关产品推荐
相关产品推荐

