OnMouseDown 在 Vuforia 中不起作用 - Unity C#
OnMouseDown not work in 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
组件:
(是的,我只是使用了一个 "dynamic image" 目标 :D )
您可以通过几个步骤解决此问题:
在 Text
组件上禁用 RaycastTarget
:
这样它就不会干扰指针光线投射
要获得 3D 对撞机,您的 Camera
应该附加一个 PhysicsRaycaster
组件:
我不知道为什么,但只有当你使用 Perspective Camera
时它才有效。 Vuforia 在某种程度上似乎在使用 Orthographic 时遇到了麻烦......可以理解,因为对于这样的相机来说,不存在距离。所以宁愿把你的相机切换到 Perspective
现在我可以添加并点击立方体了:
顺便说一句
I don't think it worked with Overlay, but I can try.
正如信息框所说,没有引用 Camera
(在您的场景中就是这种情况),ScreenSpace - Camera
的行为等于 ScreenSpace - Overlay
。
我正在使用 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
组件:
(是的,我只是使用了一个 "dynamic image" 目标 :D )
您可以通过几个步骤解决此问题:
在
Text
组件上禁用RaycastTarget
:这样它就不会干扰指针光线投射
要获得 3D 对撞机,您的
Camera
应该附加一个PhysicsRaycaster
组件:我不知道为什么,但只有当你使用 Perspective
Camera
时它才有效。 Vuforia 在某种程度上似乎在使用 Orthographic 时遇到了麻烦......可以理解,因为对于这样的相机来说,不存在距离。所以宁愿把你的相机切换到Perspective
现在我可以添加并点击立方体了:
顺便说一句
I don't think it worked with Overlay, but I can try.
正如信息框所说,没有引用 Camera
(在您的场景中就是这种情况),ScreenSpace - Camera
的行为等于 ScreenSpace - Overlay
。