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

4si2a6ki  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(176)

TL;DR

从Google VR升级到Google Cardboard XR插件后。寻找以下方面的文档/建议:
1.如何在编辑器中使用事件触发器组件而不是代码
1.如何限制用户可以通过十字线指针与对象交互的距离

背景

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

我目前的做法:

a.我设置标线指针的距离
B.附加一个碰撞器到我想激活的对象上,并使其成为触发器
c.向对象添加事件触发器。我使用pointerEnter和pointerExit事件触发器
x1c 0d1x的数据
如果对象在摄像头/十字线指针的范围内,那么它将被激活,我的脚本将运行。这通常会首先检查用户是否在1-3秒内(由我的脚本确定)保持对对象的关注,然后执行脚本的其余部分-这确保了对象不会被错误地选择。这完全符合我的需求,并在我的应用程序中一致地实现

结果:

当我尝试在我的应用程序中使用新插件运行此插件时,按照快速设置指南,我确实得到了预期的行为;十字线指针将状态从点更改为圆,但我随后得到以下错误:
当我“看”互动对象时
无法调用EventTrigger类的OnPointerEnter函数调用OnPointerEnter函数时不带参数,但该函数需要1. UnityEngine。GameObject:SendMessage(string)CardboardReticlePointer:Update()(at ./Library/PackageCache/com.google.xr.cardboard@17e19f289a/sender/CardboardReticlePointer.cs:158)无法调用EventTrigger类的OnPointerExit函数
当我从交互对象“移开视线”时
调用函数OnPointerExit,不带参数,但该函数需要1. UnityEngine.GameObject:SendMessage(string)CardboardReticlePointer:Update()(at ./Library/PackageCache/com.google.xr.cardboard@17e19f289a/Address/CardboardReticlePointer.cs:167)
我确实找到了这篇文章,但不知道它是否相关,因为我不理解解决方案,而且在没有一点手把手的情况下更改Google代码肯定会感到不舒服
Error says function requires 1 parameter when it actually requires none
https://forum.unity.com/threads/calling-function-pickup-with-no-parameters-but-the-function-requires-1.702509/

请您提供以下帮助:

我如何在编辑器中实现十字线指针+碰撞器+ onPointerEnter/onPointerExit事件处理程序(不是代码)来执行分配给该对象的脚本,而不必将数百个对象更改为不同的方法?
考虑到它在我用代码替换编辑器中的事件触发器时有效,我认为我只需要知道:
1.如何在编辑器中使用事件触发器组件而不是代码
1.如何限制用户与对象交互的距离
如果有什么不清楚或需要更多信息,请告诉我。
谢谢

c9x0cxw0

c9x0cxw01#

HelloCardboard演示场景中包含的Reticle正在向光线击中的UI层中的对象发送“OnPointerEnter”和“OnPointerExit”消息,EventTrigger不会对此做出响应。
您可以编写自己的超级简单的MessageTrigger类来响应从标线发送的消息,并使用它来代替EventTrigger组件。这是一个C#脚本,具有以下两个方法:public void OnPointerEnter()public void OnPointerExit()
或者你可以使用PhysicsRaycaster,并扩展事件系统输入,使十字线与标准EventTrigger一起工作。
例如,可以在Cardboard SDK论坛线程中找到描述:https://github.com/googlevr/cardboard/issues/140

相关问题