从 Google VR 升级到 Google Cardboard XR 插件…限制标线距离并在编辑器中使用事件触发器组件

问题描述 投票:0回答:1

TL;博士

从 Google VR 升级到 Google Cardboard XR 插件后。寻找有关以下方面的文档/建议:

  1. 如何在编辑器中使用事件触发器组件而不是代码
  2. 如何限制用户通过标线指针与对象交互的距离

背景

  1. 我使用 Unity 编辑器 v2019 构建了我的应用程序。但是我无法编译 Android APK 31,而 Android APK 31 需要在 Google Play 上发布。有人告诉我这是因为我需要使用更高版本的编辑器
  2. 当我升级到 v2020+ 时,我在使用 Google VR 实现 VR 时遇到错误,主要围绕 Daydream
  3. 我被告知我需要迁移到新的 Google Cardboard XR 插件来解决此问题,我现在已经完成了
  4. 当我按照 Google Cardboard XR 插件的安装指南进行操作时,与我的实现方式相比,该设置似乎使用了不同的交互方式
  5. 按照设计,我只使用凝视和选择;没有按钮,没有控制器 - 这是前进的必备条件
  6. 我可以通过在代码中使用 public void OnPointerEnter() 和 public void OnPointerExit() 来完成这项工作
  7. 对于数百个活动对象,我真的不想重写所有脚本并从编辑器视图中删除事件触发器
  8. 至关重要的是,我可以控制对象“交互”时与相机的距离,以避免与远处/视野外的对象发生无意的交互

我目前的做法:

a.我设置了十字线指针的距离

b.将碰撞器附加到我想要激活的对象并使其成为触发器

c.将事件触发器添加到对象。我使用pointerEnter和pointerExit事件触发器

如果该对象位于相机/十字线指针的范围内,则它会变为活动状态并且我的脚本将运行。这通常首先检查用户是否仍然专注于该对象,例如1-3 秒(由我的脚本确定),然后执行脚本的其余部分 - 这可确保不会错误地选择对象。这非常适合我的需求,并且在我的应用程序中一致实现

结果:

当我尝试使用应用程序中的新插件运行此程序时,按照快速设置指南,我确实得到了预期的行为;十字线指针将状态从点更改为圆圈,但随后出现以下错误:

当我“看”交互对象时

调用EventTrigger类的OnPointerEnter函数失败 不带参数调用函数 OnPointerEnter,但该函数需要 1。 UnityEngine.GameObject:SendMessage(字符串) CardboardReticlePointer:Update ()(位于 ./Library/PackageCache/com.google.xr.cardboard@17e19f289a/Runtime/CardboardReticlePointer.cs:158) 调用EventTrigger类的OnPointerExit函数失败

当我“把目光从交互对象上移开”时

不带参数调用函数 OnPointerExit,但该函数需要 1。 UnityEngine.GameObject:SendMessage(字符串) CardboardReticlePointer:更新()(位于./Library/PackageCache/com.google.xr.cardboard@17e19f289a/Runtime/CardboardReticlePointer.cs:167)

我确实找到了这篇文章,但不知道它是否相关,因为我不理解解决方案,并且在没有一点帮助的情况下更改 Google 代码肯定感到不舒服

错误说函数需要 1 个参数,而实际上不需要参数

https://forum.unity.com/threads/calling-function-pickup-with-no-parameters-but-the-function-requires-1.702509/

所以请您帮忙解决以下问题:

如何在编辑器(而不是代码)中实现标线指针 + 碰撞器 + onPointerEnter/onPointerExit 事件处理程序来执行分配给该对象的脚本,而不必将数百个对象更改为不同的方法?

鉴于当我用代码替换编辑器中的事件触发器时它可以工作,我认为我只需要知道:

  1. 如何在编辑器中使用事件触发器组件而不是代码
  2. 如何限制用户与物体交互的距离

如果有任何不清楚或您需要更多信息,请告诉我

谢谢

android unity-game-engine google-cardboard unity-editor unity-xr
1个回答
0
投票

HelloCardboard 演示场景中包含的标线正在向光线击中的 UI 层中的对象发送“OnPointerEnter”和“OnPointerExit”消息,但 EventTrigger 不会响应。

您可以编写自己的超级简单的 MessageTrigger 类来响应从十字线发送的那些消息,并使用它来代替 EventTrigger 组件。这是一个包含这两个方法的 C# 脚本: void OnPointerEnter(),和 void OnPointerExit()

或者您可以使用PhysicsRaycaster,并扩展事件系统输入,使十字线与标准EventTrigger一起工作。

可以在此 Cardboard SDK 论坛主题中找到说明: https://github.com/googlevr/cardboard/issues/140

© www.soinside.com 2019 - 2024. All rights reserved.