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

Unity与Vuforia中地面平面3D物体隐藏功能失效求助

解决Unity+Vuforia中调用SetActive(false)无法隐藏地面平面物体的问题

可能的原因及解决步骤

1. 确认obj变量已正确绑定

  • 在Unity Inspector面板中,找到挂载ARController脚本的GameObject,检查obj字段是否已经拖拽绑定了场景中要隐藏的3D物体。
  • 如果未绑定,obj会为null,调用SetActive(false)不会有任何反应,同时控制台会抛出NullReferenceException错误,优先查看控制台是否有此类报错。

2. 检查按钮点击事件绑定是否正确

  • 选中UI按钮,在Inspector的On Click ()事件列表中:
    • 确认已添加挂载ARController脚本的GameObject;
    • 确认选择的方法是ARController->hideIT(),而非其他错误方法或对象。

3. 注意Vuforia地面平面物体的动态生成特性

  • 若你的3D物体是通过Vuforia的Ground Plane功能(比如PlaneFinder)动态实例化的,直接绑定预制体到obj字段无效,因为代码操作的是预制体而非场景中实际生成的实例。
  • 修正代码,动态获取生成的物体实例:
    using UnityEngine;
    using UnityEngine.UI;
    using Vuforia;
    
    public class ARController : MonoBehaviour, IInteractiveHitTestListener
    {
        public GameObject objPrefab; // 拖拽绑定你的3D物体预制体
        private GameObject spawnedObj; // 保存实际生成的物体实例
    
        void Start()
        {
            PlaneFinder planeFinder = FindObjectOfType<PlaneFinder>();
            if (planeFinder != null)
            {
                planeFinder.RegisterListener(this);
            }
        }
    
        // 监听地面平面点击,生成物体
        public void OnInteractiveHitFound(HitTestResult result)
        {
            if (spawnedObj == null) // 避免重复生成
            {
                spawnedObj = Instantiate(objPrefab, result.Position, result.Rotation);
            }
        }
    
        public void hideIT()
        {
            if (spawnedObj != null)
            {
                spawnedObj.SetActive(false);
            }
        }
    }
    

4. 排查父物体的状态影响

  • 若要隐藏的物体是某个父物体的子物体,检查父物体是否被设置为active=false,或者是否有其他脚本在强制修改子物体的激活状态。这种情况下单独设置子物体的SetActive可能会被覆盖,可尝试直接操作父物体或排查相关脚本逻辑。

5. 查看控制台报错信息

  • 打开Unity控制台(Window->General->Console),检查是否有MissingReferenceException(物体已被销毁)或其他相关报错,这些信息能直接定位问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:23:23