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

Unity3D中OnTriggerEnter()调用.SetActive()不生效问题求助

根因分析

你代码中使用的OnTriggerEnter是Unity物理系统的触发回调,仅当带碰撞体+刚体的物理对象进入触发区域时才会执行。你使用射线(Raycast)射击立方体的行为不会触发该回调,因此状态切换逻辑完全没有运行。

解决方案

方案1:适配射线射击逻辑(推荐,和你现有射击逻辑兼容)

  1. 修改立方体挂载的脚本,将切换逻辑封装为公共方法,供射线命中时调用:
using UnityEngine;

public class OnRaycastHitSwitchTutorial : MonoBehaviour
{
    public GameObject TutorialOne;
    public GameObject TutorialTwo;

    void Start()
    {
        TutorialTwo.SetActive(false);
    }

    // 射线命中时调用此方法
    public void TriggerTutorialSwitch()
    {
        TutorialTwo.SetActive(true);
        TutorialOne.SetActive(false);
    }
}
  1. 找到你原有实现射线射击功能的代码,在射线命中判断处新增调用逻辑:
// 以下代码放在你射击触发的对应位置,例如鼠标左键按下的判断分支内
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out RaycastHit hitInfo))
{
    // 命中物体上如果挂载了教程切换脚本,就执行切换
    if (hitInfo.collider.TryGetComponent<OnRaycastHitSwitchTutorial>(out var switcher))
    {
        switcher.TriggerTutorialSwitch();
    }
}

方案2:适配物理触发逻辑(仅适用于你用实体子弹的场景)

如果你是用发射带碰撞体的实体子弹实现射击,需要检查以下配置:

  • 立方体的Collider组件需勾选Is Trigger属性
  • 实体子弹对象必须同时挂载Collider组件和Rigidbody组件
  • 立方体和子弹的层级没有在项目碰撞矩阵中设置为互相忽略

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:06:03