Иерархия в RealityKit / Reality Composer
Думаю, это скорее «теоретический» вопрос, чем практический. Сначала я должен сказать, что редактирование Experience
файла, содержащего сцены с якорями и сущностями, не является хорошей идеей.
В RealityKit и Reality Composer существует вполне определенная иерархия на случай, если вы создали один объект в сцене по умолчанию:
Scene –> AnchorEntity -> ModelEntity
|
Physics
|
Animation
|
Audio
Если вы поместили две 3D-модели в сцену, они имеют одну и ту же привязку:
Scene –> AnchorEntity – – – -> – – – – – – – – ->
| |
ModelEntity01 ModelEntity02
| |
Physics Physics
| |
Animation Animation
| |
Audio Audio
AnchorEntity
в RealityKit определяет, какие свойства конфигурации World Tracking
выполняются в текущем ARSession
: horizontal
/ vertical
обнаружение плоскости и / или image detection
, и / или body detection
, et c.
Давайте посмотрим на эти параметры:
AnchorEntity(.plane(.horizontal, classification: .floor, minimumBounds: [1, 1]))
AnchorEntity(.plane(.vertical, classification: .wall, minimumBounds: [0.5, 0.5]))
AnchorEntity(.image(group: "Group", name: "model"))
Объединение двух сцен из реальности Composer
Для этого поста я подготовил две сцены в реальности Composer - первая сцена (ConeAndBox
) с обнаружение в горизонтальной плоскости и вторая сцена (Sphere
) с обнаружением в вертикальной плоскости. Если вы объедините эти сцены в RealityKit в одну большую сцену, вы получите два типа обнаружения плоскости - горизонтальную и вертикальную.
Two cone and box are pinned to one anchor in this scene.
In RealityKit I can combine these scenes into one scene.
// Plane Detection with a Horizontal anchor
let coneAndBoxAnchor = try! Experience.loadConeAndBox()
coneAndBoxAnchor.children[0].anchor?.scale = [7, 7, 7]
coneAndBoxAnchor.goldenCone!.position.y = -0.1 //.children[0].children[0].children[0]
arView.scene.anchors.append(coneAndBoxAnchor)
coneAndBoxAnchor.name = "mySCENE"
coneAndBoxAnchor.children[0].name = "myANCHOR"
coneAndBoxAnchor.children[0].children[0].name = "myENTITIES"
print(coneAndBoxAnchor)
// Plane Detection with a Vertical anchor
let sphereAnchor = try! Experience.loadSphere()
sphereAnchor.steelSphere!.scale = [7, 7, 7]
arView.scene.anchors.append(sphereAnchor)
print(sphereAnchor)
In Xcode's console you can see ConeAndBox
scene hierarchy with names given in RealityKit:
And you can see Sphere
scene hierarchy with no names given:
ЭТОТ ПОЧТ и ЭТОТ ПОЧТ .
PS
Дополнительный код, показывающий, как загружать сцены из ExperienceX.rcproject
:
import ARKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
// RC generated "loadGround()" method automatically
let groundArrowAnchor = try! ExperienceX.loadGround()
groundArrowAnchor.arrowFloor!.scale = [2,2,2]
arView.scene.anchors.append(groundArrowAnchor)
print(groundArrowAnchor)
}
}
введите описание изображения здесь