RealityKit:如何获取用户点击的节点名称?
问题描述
我的节点与3D模型结构如图所示:
我需要实现的功能:在应用运行时点击模型,将被点击节点的名称打印到控制台。
目前我的代码只能获取到Entity,无法获取对应的节点:
@objc private func handleTap(sender: UITapGestureRecognizer) { let tapLocation: CGPoint = sender.location(in: arView) let result: [CollisionCastHit] = arView.hitTest(tapLocation) guard let hitTest: CollisionCastHit = result.first else { return } let entity: Entity = hitTest.entity }
解决方案
在RealityKit中,Entity就是场景里的节点对象,直接访问它的name属性就能获取节点名称。修改代码如下:
@objc private func handleTap(sender: UITapGestureRecognizer) { let tapLocation = sender.location(in: arView) guard let hitResult = arView.hitTest(tapLocation).first else { return } // 打印被点击节点名称,处理未命名情况 let nodeName = hitResult.entity.name ?? "未命名节点" print("被点击节点名称:\(nodeName)") }
如果你的模型存在嵌套层级,点击到的是父级实体,可以通过递归遍历子节点找到目标对象:
// 递归查找指定名称的子节点 func searchTargetNode(in entity: Entity, targetName: String) -> Entity? { if entity.name == targetName { return entity } for child in entity.children { if let target = searchTargetNode(in: child, targetName: targetName) { return target } } return nil }
调用示例:
if let targetNode = searchTargetNode(in: hitResult.entity, targetName: "你的目标节点名") { print("找到目标节点:\(targetNode.name!)") }
内容的提问来源于stack exchange,提问作者user13965197
相关产品推荐
相关产品推荐

