c# - OnMouseDown 在 Vuforia 中不起作用 - Unity C#
问题描述
我正在使用 Vuforia 在 Unity 中测试 AR,但我无法让事件OnMouseDown()
正常工作。
碰巧我第一次点击播放它有效,但只有一次。我已经检查过对撞机是否已激活并且位置正确。我还看到游戏对象(在这种情况下为立方体)中的脚本检查未启用,在制作组件时它甚至不像其他脚本那样出现。
这是代码:
using System.Collections.Generic;
using UnityEngine;
public class Click : MonoBehaviour
{
void OnMouseDown()
{
Debug.Log("CLICK!!!");
}
}
我在控制台中没有任何错误消息或警告。
这是存储库,分支develop
:
https ://github.com/emicalvacho/MapaMentalAR.git
解决方案
我刚刚发现:您总是将Hola
文本悬停在对象上..而不是立方体。它阻挡了光线投射!
我是如何发现的:我编写了一个简单的脚本来找出当前悬停的内容:
public class RayDebugger : MonoBehaviour
{
private void OnGUI()
{
GUI.color = Color.green;
var hovering = EventSystem.current.IsPointerOverGameObject();
var isHovering = hovering ? "Yes" : "No";
GUI.Label(new Rect(100, 100, 200, 200), $"Is hovering something? - {isHovering}");
if (!hovering) return;
var pointer = new PointerEventData(EventSystem.current) { position = Input.mousePosition };
var raycastResults = new List<RaycastResult>();
EventSystem.current.RaycastAll(pointer, raycastResults);
if (raycastResults.Count > 0)
{
GUI.Label(new Rect(100, 200, 200, 200), $"Currently Hovered: {raycastResults[0]}");
}
}
}
如您所见,它始终是您的“Hola”Text
组件:
(是的,我只是使用了“动态图像”目标:D)
您可以通过几个步骤解决此问题:
RaycastTarget
在组件上禁用Text
:这样它就不会干扰指针光线投射
要获得 3D 对撞机,您
Camera
应该PhysicsRaycaster
附加一个组件:我不知道为什么,但它只有在你使用Perspective
Camera
时才有效。不知何故,Vuforia 似乎在使用Orthographic相机时遇到了问题。这是可以理解的,因为对于这样的相机,不存在距离。所以宁愿把你的相机换成Perspective
现在我可以添加并单击立方体:
顺便提一句
我认为它不适用于 Overlay,但我可以尝试。
正如信息框所说,没有Camera
引用(在您的场景中就是这种情况) a 的ScreenSpace - Camera
行为等于 a ScreenSpace - Overlay
。
推荐阅读
- javascript - 如何设置弹出窗口的超时时间?
- django - Django ORM 从 ISO 时间和分数按天排序
- amazon-web-services - Airflow Emr Dag 成功但集群未启动
- c# - 前台线程退出后后台线程执行事件?
- java - 如果 URL 中提供了某些参数,如何仅显示页面?
- c# - Azure AD 身份验证令牌未通过 Web api 授权
- python - 有没有办法在 SpaCy 上使用 nlp.pipe() 和 pandas 获得相似度分数?
- node.js - 从 Node.js Lambda 函数自动生成 Swagger 文件
- python - 在文件中由 \r 分割,而不是在 python 中由 \n 分割
- sql - 在 AWS CLI 中启动 Athena 查询执行失败,但在 AWS 管理控制台中成功