RealityKit中子AnchorEntity忽略父锚点变换不继承位移问题如何解决
问题原因
RealityKit中AnchorEntity的核心设计是绑定到ARKit跟踪得到的世界空间坐标,它的变换优先级高于普通实体的层级继承规则:只要实例是AnchorEntity类型,无论被添加到哪个父节点下,默认都会使用自身关联的锚定变换,不会继承父节点的位移、旋转、缩放属性。
你代码中创建的bb、cc均为AnchorEntity类型,因此不会继承父锚点aa的y轴位移;而a、b、c是普通模型实体,会继承直接父节点的变换,所以挂载到aa下的a位置正常,挂载到bb、cc下的b、c会跟随bb、cc停留在世界坐标原点。
修复方案
最推荐的方案是将不需要独立世界锚定能力的子节点替换为普通Entity类型,普通实体默认会完整继承父节点的所有变换,修改后代码如下:
var a = getSphere(0.05, .white) var b = getSphere(0.04, UIColor.brown) var c = getSphere(0.03, UIColor.cyan) var aa = AnchorEntity() // 子层级不需要独立锚定,使用普通Entity即可 var bb = Entity() var cc = Entity() aa.transform.translation.y = -0.5 aa.addChild(bb) bb.addChild(cc) aa.addChild(a) bb.addChild(b) cc.addChild(c) scene.anchors.append(aa)
如果确实需要子节点具备独立锚定能力,不要将AnchorEntity作为其他节点的子级,直接将其添加到场景的anchors数组中单独管理即可。
内容的提问来源于stack exchange,提问作者Dariusz
相关产品推荐
相关产品推荐

