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
相关产品推荐
相关产品推荐

