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