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

Unity OpenXR项目中Canvas初始隐藏逻辑失效问题排查

Unity VR场景Canvas显示异常问题排查与解决

问题描述

使用Unity 2021.3.11f1 + OpenXR开发VR应用,需求为:

  • 场景启动时隐藏Canvas
  • 仅当指定3D物体的X坐标小于45时,Canvas才显示

编写的脚本代码如下:

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

public class OptionsBox : MonoBehaviour
{
    public GameObject canvas;
    public GameObject playerObj;

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

    void Update()
    {
        if (playerObj.transform.position.x < 45){
            canvas.SetActive(true);
        }
    }
}

将脚本挂载到新建的空GameObject后,运行场景时Canvas始终处于显示状态,寻求问题原因及解决方法。

问题排查与解决方法

  • 检查引用变量是否正确赋值
    打开挂载脚本的空GameObject的Inspector面板,确认canvas和playerObj两个公共变量已经拖入了场景中对应的对象。如果未赋值,Start()方法里的隐藏逻辑不会执行,Canvas会保持默认激活状态。

  • 补充反向状态控制逻辑
    当前脚本仅处理了"X坐标小于45时显示Canvas"的情况,缺少"X坐标≥45时隐藏Canvas"的逻辑。如果场景启动时目标物体的X坐标本来就小于45,Update()会立刻激活Canvas;且一旦Canvas被激活后,即使后续X坐标超过45,也不会自动隐藏。修改Update()方法为:

    void Update()
    {
        // 直接根据坐标条件设置Canvas的激活状态
        canvas.SetActive(playerObj.transform.position.x < 45);
    }
    
  • 确认脚本载体及Canvas的初始状态

    • 确保挂载脚本的空GameObject处于激活状态,且脚本组件未被禁用,否则Start()和Update()方法不会执行。
    • 可提前在Inspector面板中手动设置Canvas为未激活状态,作为双重保障。
  • 验证坐标参考系是否正确
    确认目标物体的坐标是世界坐标还是局部坐标:

    • 使用transform.position.x获取的是世界坐标
    • 如果目标物体有父物体,需要使用transform.localPosition.x获取局部坐标
      根据场景的坐标系统需求,选择正确的坐标属性进行判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:25:25