【问题标题】:How to get coordinates of click on rawImage in Unity using Hololens?如何使用 Hololens 在 Unity 中获取点击 rawImage 的坐标?
【发布时间】:2019-02-14 13:31:44
【问题描述】:

所以现在我有一个这样的层次结构: 立方体画布RawImage

我想获取我点击 rawimage 的坐标,但我现在不知道从哪里开始。

  1. 在 HoloToolkit 中有一个 GazeManager,其中执行光线投射并且有属性 HitPosition。所以通过使用 GazeManager.Instance.HitPosition 我应该得到世界中的点击位置。但是我如何从这个到画布上的坐标?
  2. 如果我使用 IInputClickHandler,我可以触发 OnInputClicked(InputClickedEventData eventData)。但是从 eventData 我不会得到有关点击的信息。
  3. 我找到了this,但无法将其转移到我的需求中。因为他的 eventData 有更多的选择。
  4. 我想从 rawimage、画布或立方体获得点击不会有任何区别,因为它们的大小都相同。

【问题讨论】:

    标签: unity3d augmented-reality hololens mrtk


    【解决方案1】:

    也许你需要改变你的方法,我可以看到一些解决方案。

    1. 将您的CanvasOverlay 更改为World SpaceRaycast 点击以获得正常位置,而不是Canvas 位置。

    2. 如果Overlay中有Canvas,我认为Input.mousePositionRectTransform.position成正比,所以有你的位置。

    对于两者,您可以使用IPointerClickHandler 来检测对任何 UI 元素的点击。

    【讨论】:

    • 我的 canvas 已经在 worldspace 上。好的,我尝试了 OnPointerClick 并通过以下方式获取位置:public void OnPointerClick(PointerEventData eventData){Vector3 hitPosition = transform.InverseTransformPoint(GazeManager.Instance.HitPosition);Vector2 clickedPos = new Vector2(hitPosition.x, hitPosition.y);Client.SetClick((int)Math.Ceiling(clickedPos.x), (int)Math.Ceiling(clickedPos.y));} 要获得正确的坐标,我需要本地坐标,对吗?所以我使用 InverseTransformPoint();
    • 我还有一个问题。也许你知道如何解决这个问题。我仍然有这个层次结构:Cube → Canvas → RawImage。我的画布接受光线投射,它有 Graphic Raycaster 并且 RawImage 也接受光线投射。所以问题是当我在全息透镜上运行它时,光标似乎没有与立方体对齐,它就像上面 1 厘米。就像立方体前面有一堵看不见的墙一样。如果我在画布上停用Graphic Raycaste,我的光标可以正常工作,但我无法触发我的OnInputClicked-Event
    • 第一条评论我无法评论,因为我不知道 GazeManager 返回值,但对于第二条评论,您可以更改方法并为您想要获取的区域使用普通 Collider事件,正常的 Raycast 启动将 100% 获得该事件。
    • 我停用了立方体、画布和 rawimage 上的所有光线投射材料。然后我在 rawimage 中添加了一个盒子碰撞器,设置了宽度和高度(与我的图像/视频相同的分辨率),它工作正常。
    • 我遇到的下一个问题是坐标不正确 -> 所以我查找了我的枢轴/零点 -> 枢轴在中心 -> 根据我的需要将其设置为左上角将 y 坐标乘以负数,所以我有一个倒置坐标系
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多