【问题标题】:OnMouseDown not work in Vuforia - Unity C#OnMouseDown 在 Vuforia 中不起作用 - Unity C#
【发布时间】:2019-09-06 14:57:24
【问题描述】:

我正在使用 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

【问题讨论】:

  • 我很确定你不能只拥有一个对撞机并使用OnMouseDown。很确定这是为 UI 可选/可交互元素制作的。您需要使用 raycast 来查看用户是否单击了 3D 对象。签出:docs.unity3d.com/ScriptReference/Camera.ScreenPointToRay.html
  • @user14492 他们的文档不同意您的观点:docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseDown.html“当用户在 GUIElement 或 Collider 上按下鼠标按钮时调用 OnMouseDown。”
  • 但是 OnMouseDown 只有在脚本被启用的情况下才会起作用,如果它被禁用那可能是你的问题。
  • 也许你可以在你点击它之前和之后在检查器上上传你的游戏对象的截图。
  • Also I see that the check of the script in the GameObject (Cube in this case) is not enabled, it doesn't even appear like the rest of the scripts when components are made. 听起来对象已被禁用 .. 如果是这种情况,显然脚本将不会运行,因为 Collider 也将被禁用

标签: c# unity3d augmented-reality vuforia onmousedown


【解决方案1】:

我刚刚发现:您总是将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)


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

  1. Text 组件上禁用RaycastTarget

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

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

  3. 我不知道究竟是为什么,但它只有在你使用 Perspective Camera 时才有效。 Vuforia 似乎在使用 Orthographic 时遇到了问题。这是可以理解的,因为对于这样的相机来说,不存在距离。所以宁愿把你的相机换成Perspective


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


顺便说一句

我认为它不适用于 Overlay,但我可以尝试。

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

【讨论】:

  • 我知道我不应该在 cmets 中感谢你,但不可能不承认你花时间帮助我,这是公认的。非常感谢! RayDebugger 是一个技巧,我将在下一个项目中考虑到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多