You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RealityKit:如何获取用户点击的节点名称?

问题描述

我的节点与3D模型结构如图所示:
节点与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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:35:18