在 Reality 套件和 VisionOS 中对眼睛悬停做出反应

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

我知道所有 swiftUI 视图和按钮都可以对用户在 VisionOS 中查看的位置做出反应,但我想对 RealityKit 中的实体做同样的事情,以便用户知道他们在看什么。我可以看到,在从商店下载的一些游戏中,3d 按钮似乎有反应并发光,我只是不确定他们是如何做到的。这些是附加的 swiftUI 视图还是有办法注册实体以获得焦点?

focus realitykit visionos
2个回答
3
投票

创建实体时,只需向其添加

HoverEffectComponent
即可。该实体还必须同时具有
CollisionComponent
InputTargetComponent

let collisionShape = ShapeResource.generateBox(width: w, height: h, depth: d)
entity.components.set(HoverEffectComponent())
entity.components.set(InputTargetComponent())
entity.components.set(CollisionComponent(shapes:[collisionShape], isStatic: true))

您无需添加手势即可实现此功能。但只有当这 3 个组件存在时它才有效。

我在尝试自己解决这个问题时发现了你的问题。答案就在这段视频中,值得完整观看: https://developer.apple.com/videos/play/wwdc2023/10080/


0
投票

添加@Jakobs 答案。当您使用场景并拥有复杂的模型时,您可能希望整个实体悬停/可单击,而不是创建 CollisionShape。要实现此目的,请使用

generateCollisionShapes
函数和
recursive: true
。这样整个 CollisionShape 将成为整个 Entity。

let entity = rootEntity.findEntity(named: "SomeName")!
entity.components.set(HoverEffectComponent())
entity.components.set(InputTargetComponent())
entity.generateCollisionShapes(recursive: true)
© www.soinside.com 2019 - 2024. All rights reserved.