CollisionEvent不在Reality Kit场景中开火的原因?

发布于 2025-01-18 22:00:09 字数 1800 浏览 0 评论 0原文

Event subscription has been added to a sceneof an ARView in RealityKit:

arView.scene.subscribe(to: CollisionEvents.Began.self) { event in
    print("Some collision occured")
}

Entities are visually colliding in the 场景,但是CollisionEvent未触发。 Here are 2 example hierarchies of objects which are clearly colliding:

▿ 'backboard' : __RKPhysics, children: 1
...⟐物理莫丁component
...⟐变换
...⟐CollisionComponent
...⟐synchronizationComponent
...⟐物理体component
...▿'simpbld_root':modelentity
......⟐变换
...... modelcomponent
......⟐ SynchronizationComponent

With CollisionComponent:

collisionComponent(形状:[resealykit.shaperesource],模式:resealykit.collisioncomponent.mode.mode.mode.default,filter,filter:resealykit.collisionfilter(group:realialekit.collisiongroup(collisiongroup) )

▿ “球”:模型义 ...⟐变换
...⟐CollisionComponent
...⟐模型component
...⟐synchronizationComponent
...⟐ PhysicsBodyComponent

With CollisionComponent:

CollisionComponent(shapes: [RealityKit.ShapeResource], mode: RealityKit.CollisionComponent.Mode.default, filter: RealityKit.CollisionFilter(group: RealityKit.CollisionGroup(rawValue: 1), mask: RealityKit.CollisionGroup(rawValue: 4294967295) )

Named Entitieshave been added to the seen as part of an AnchorEntity:

let anchorEntity = AnchorEntity(anchor: anchor)
anchorEntity.addChild(backboardEntity)
anchorEntity.addChild(ballEntity)
arView.scene.anchors.append(anchorEntity)

Why are no CollisionEvents not fired?

Event subscription has been added to a sceneof an ARView in RealityKit:

arView.scene.subscribe(to: CollisionEvents.Began.self) { event in
    print("Some collision occured")
}

Entities are visually colliding in the scene but the CollisionEvent is not being fired. Here are 2 example hierarchies of objects which are clearly colliding:

▿ 'backboard' : __RKPhysics, children: 1
...⟐ PhysicsMotionComponent
...⟐ Transform
...⟐ CollisionComponent
...⟐ SynchronizationComponent
...⟐ PhysicsBodyComponent
...▿ 'simpBld_root' : ModelEntity
......⟐ Transform
......⟐ ModelComponent
......⟐ SynchronizationComponent

With CollisionComponent:

CollisionComponent(shapes: [RealityKit.ShapeResource], mode: RealityKit.CollisionComponent.Mode.default, filter: RealityKit.CollisionFilter(group: RealityKit.CollisionGroup(rawValue: 1), mask: RealityKit.CollisionGroup(rawValue: 1)))

▿ 'ball' : ModelEntity
...⟐ Transform
...⟐ CollisionComponent
...⟐ ModelComponent
...⟐ SynchronizationComponent
...⟐ PhysicsBodyComponent

With CollisionComponent:

CollisionComponent(shapes: [RealityKit.ShapeResource], mode: RealityKit.CollisionComponent.Mode.default, filter: RealityKit.CollisionFilter(group: RealityKit.CollisionGroup(rawValue: 1), mask: RealityKit.CollisionGroup(rawValue: 4294967295)))

Named Entitieshave been added to the seen as part of an AnchorEntity:

let anchorEntity = AnchorEntity(anchor: anchor)
anchorEntity.addChild(backboardEntity)
anchorEntity.addChild(ballEntity)
arView.scene.anchors.append(anchorEntity)

Why are no CollisionEvents not fired?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天气好吗我好吗 2025-01-25 22:00:09

该代码是不言自明的:

import RealityKit
import Combine

class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!
    var subscriptions: [Cancellable] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()            
        let modelOne = ModelEntity(mesh: .generateSphere(radius: 0.04)) 
                               as (Entity & HasCollision & HasPhysicsBody)
        let modelTwo = ModelEntity(mesh: .generateSphere(radius: 0.04)) 
                               as (Entity & HasCollision & HasPhysicsBody)
        
        modelOne.position.y = 0.75
        modelOne.physicsBody = .init()
        modelOne.physicsBody?.mode = .dynamic
        modelOne.generateCollisionShapes(recursive: false)            
        modelTwo.physicsBody = .init()
        modelTwo.physicsBody?.mode = .static
        modelTwo.generateCollisionShapes(recursive: false)
        
        let sub = arView.scene.subscribe(to: CollisionEvents.Began.self, 
                                on: modelOne) { _ in print("OCCURED!") }
        subscriptions.append(sub)
        
        let anchor = AnchorEntity()
        anchor.addChild(modelOne)
        anchor.addChild(modelTwo)
        arView.scene.anchors.append(anchor)
    }
}

This code is self-explanatory:

import RealityKit
import Combine

class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!
    var subscriptions: [Cancellable] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()            
        let modelOne = ModelEntity(mesh: .generateSphere(radius: 0.04)) 
                               as (Entity & HasCollision & HasPhysicsBody)
        let modelTwo = ModelEntity(mesh: .generateSphere(radius: 0.04)) 
                               as (Entity & HasCollision & HasPhysicsBody)
        
        modelOne.position.y = 0.75
        modelOne.physicsBody = .init()
        modelOne.physicsBody?.mode = .dynamic
        modelOne.generateCollisionShapes(recursive: false)            
        modelTwo.physicsBody = .init()
        modelTwo.physicsBody?.mode = .static
        modelTwo.generateCollisionShapes(recursive: false)
        
        let sub = arView.scene.subscribe(to: CollisionEvents.Began.self, 
                                on: modelOne) { _ in print("OCCURED!") }
        subscriptions.append(sub)
        
        let anchor = AnchorEntity()
        anchor.addChild(modelOne)
        anchor.addChild(modelTwo)
        arView.scene.anchors.append(anchor)
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文