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!!!");
    }
}

我在控制台中没有任何错误消息或警告。

这是存储库,分支 develophttps://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 )


您可以通过几个步骤解决此问题:

  1. Text 组件上禁用 RaycastTarget:

    这样它就不会干扰指针光线投射

  2. 要获得 3D 对撞机,您的 Camera 应该附加一个 PhysicsRaycaster 组件:

  3. 我不知道为什么,但只有当你使用 Perspective Camera 时它才有效。 Vuforia 在某种程度上似乎在使用 Orthographic 时遇到了麻烦......可以理解,因为对于这样的相机来说,不存在距离。所以宁愿把你的相机切换到 Perspective


现在我可以添加并点击立方体了:


顺便说一句

I don't think it worked with Overlay, but I can try.

正如信息框所说,没有引用 Camera(在您的场景中就是这种情况),ScreenSpace - Camera 的行为等于 ScreenSpace - Overlay