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

Unity 360虚拟漫游切换站点按钮无法点击问题求助

360虚拟漫游站点切换按钮无法点击问题排查

我正在制作360虚拟漫游项目,目标是实现点击按钮切换到下一个站点,但按钮无法触发切换操作。以下是项目截图及TourManager脚本代码,目前不清楚该从何处着手排查问题。

项目截图

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

public class TourManager : MonoBehaviour
{
    // 站点列表
    public GameObject[] objSites;
    // 主菜单
    public GameObject canvasMainMenu;
    // 相机是否可移动
    public bool isCameraMove = false;

    // Start在第一帧更新前调用
    void Start()
    {
        ReturnToMenu();
    }

    // Update每一帧更新时调用
    void Update()
    {
        if(isCameraMove) 
        { 
        
            if(Input.GetKeyDown(KeyCode.Escape))
            {
                ReturnToMenu();
            }

            if (Input.GetMouseButtonDown(0)) 
            { 
                 RaycastHit hit;
                 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

                if (Physics.Raycast(ray, out hit, 100.0f))
                {
                    if(hit.transform.gameObject.tag == "Sound")
                    {
                        hit.transform.gameObject.GetComponent<MediaAudio>().PlayAudio();
                    }
                    else if (hit.transform.gameObject.tag == "Image")
                    {
                        hit.transform.gameObject.GetComponent<MediaImage>().ShowImage();
                    }
                    else if (hit.transform.gameObject.tag == "NextSite")
                    {
                        LoadSite(hit.transform.gameObject.GetComponent<NextSite>().GetSiteToLoad());
                    }
                }
            
            }   
        }
    }

    public void LoadSite(int siteNumber)
    {
        // 显示站点
        objSites[siteNumber].SetActive(true);
        // 隐藏其他站点
        {
            // 隐藏所有站点
            for (int i = 0; i < objSites.Length; i++)
            {
                objSites[i].SetActive(false);

            }
            // 显示目标站点
            objSites[siteNumber].SetActive(true);
            Debug.Log($"找到站点 {objSites[siteNumber].name},编号 {siteNumber}");
            canvasMainMenu.SetActive(true);
            // 启用相机控制
            isCameraMove = true;
        }
        canvasMainMenu.SetActive(true);
        // 启用相机控制
        isCameraMove = true;
        GetComponent<CameraController>().ResetCamera();
    }

    public void ReturnToMenu()
    {
        
        // 显示菜单
        canvasMainMenu.SetActive(true);
        // 隐藏所有站点
        for (int i = 0; i < objSites.Length; i++)
        {
            objSites[i].SetActive(false);

        }

        // 禁用相机控制
        isCameraMove = false; 

    }

    public void ReturnToSite()
    { 
        isCameraMove = true;
    }
    
    public void OpenMedia()
    {
        isCameraMove = false;
    }

}
排查方向
  • 检查按钮标签:确认按钮对象的Tag是否设置为NextSite,注意大小写完全匹配。
  • 验证碰撞体:按钮必须带有Collider组件(如SphereCollider/BoxCollider),且不要勾选Is Trigger(除非射线检测专门处理触发事件)。
  • 检查NextSite组件:确保按钮挂载了NextSite脚本,且GetSiteToLoad()返回的编号在objSites数组的有效索引范围内(0到数组长度-1)。
  • 确认isCameraMove状态:只有该值为true时,鼠标点击的射线检测才会执行,当前需处于漫游状态而非菜单状态。
  • 调试射线检测:在Update的射线检测代码中添加Debug.DrawRay(ray.origin, ray.direction * 100, Color.red);,运行时查看射线是否命中按钮。
  • 检查相机设置:主相机的Tag必须设为MainCamera,否则Camera.main无法正确获取相机对象,导致射线生成失败。
  • 清理代码冗余:LoadSite方法内存在重复逻辑(多次设置canvasMainMenu和isCameraMove),虽不直接影响点击触发,但可能引发其他异常,建议优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:10:18