如何在 RealityKit 中旋转实体而不复制它?

use*_*842 1 augmented-reality swift arkit realitykit reality-composer

我正在使用以下代码旋转从 Reality Composer 加载的实体。我希望球体会简单地旋转。但是,我留下了新的旋转实体和旧实体。以为这会很简单。

我该怎么做才能只旋转实体而不复制它?

ball?.transform.rotation = simd_quatf(angle: GLKMathDegreesToRadians(90), 
                                       axis: SIMD3(x: 0, y: 1, z: 0.5))
Run Code Online (Sandbox Code Playgroud)

ARG*_*Geo 5

旋转球时可能会出现两个问题:

  • 在 Reality Composer 场景中偶尔会创建两个球,并且您可以旋转两个球的父实体(节点)

  • 您的应用程序中有一个错误(所以我们在这里不考虑它......)


通常,RealityKit 中旋转和缩放模型的代码如下所示:

let ballAnchor: Experience.Ball = try! Experience.loadBall()

ballAnchor.ball?.orientation = simd_quatf(angle: Float.pi/4, 
                                           axis: [0, 1, 0])

ballAnchor.ball?.scale = [9, 9, 9]

arView.scene.anchors.append(ballAnchor)
Run Code Online (Sandbox Code Playgroud)

其中 aBall是符合协议的公共类,并且包含实际的RealityKit.HasAnchoring对象。ballRealityKit.Entity

因此,如果您想更改球对象的 X 轴位置,只需使用:

ballAnchor.ball?.position.x = 0.5
Run Code Online (Sandbox Code Playgroud)

但不是这样的:

ball?.position.x = 0.5
Run Code Online (Sandbox Code Playgroud)