You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2D点击Point预制体时误加载场景问题求助

问题分析与修复方案

核心问题

  1. 逻辑判断语法错误:OnTriggerExit2D中误用赋值运算符=代替比较运算符==,导致只要Point离开触发器就强制触发场景加载,完全忽略是否点击过的判断。
  2. 状态重置顺序混乱:OnTriggerExit2D中两个if语句顺序颠倒,场景加载逻辑还未执行,就先重置了canClick等状态,导致触发失败的逻辑失效。
  3. 状态变量冗余:triggered与canClick功能重叠,导致Update中的判断逻辑容易出现冲突,引发误触发。

修复后的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class DestroyPoint : MonoBehaviour
{
    // 标记是否处于可点击Point的有效范围
    bool canClickPoint = false;
    Collider2D currentTargetPoint;

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 优先处理点击到Point的逻辑
            if (canClickPoint && currentTargetPoint != null)
            {
                Debug.Log("Point Destroyed");
                Destroy(currentTargetPoint.gameObject);
                currentTargetPoint = null;
                canClickPoint = false;
            }
            // 未点击到Point时触发场景加载
            else
            {
                Debug.Log("Game over");
                SceneManager.LoadScene("FishingSpot");
            }
        }
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Point"))
        {
            Debug.Log("Entered clickable area");
            canClickPoint = true;
            currentTargetPoint = other;
        }
    }

    void OnTriggerExit2D(Collider2D other)
    {
        if (other.CompareTag("Point"))
        {
            Debug.Log("Exited clickable area");
            // 仅当Point未被点击就离开时,触发场景加载
            if (canClickPoint && currentTargetPoint != null)
            {
                Debug.Log("Game Over - missed the point");
                SceneManager.LoadScene("FishingSpot");
            }
            // 统一重置状态
            canClickPoint = false;
            currentTargetPoint = null;
        }
    }
}

修改说明

  • 简化状态管理:移除冗余的triggered变量,仅用canClickPoint标记是否处于可点击范围,逻辑更清晰。
  • 修正判断逻辑:将OnTriggerExit2D中的赋值操作改为正确的比较逻辑,确保只有未点击就错过Point时才触发场景加载。
  • 调整逻辑顺序:Update中先处理点击成功的分支,再处理失败分支,避免状态冲突引发误触发。
  • 统一状态重置时机:在OnTriggerExit2D中先判断是否触发失败场景加载,再重置所有状态,保证逻辑执行顺序正确。

内容的提问来源于stack exchange,提问作者CreatoMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:35:24