Reality Kit: где в объекте .rcproject хранятся "поведения", созданные в реальном композиторе?
Ситуация
Я делаю приложение AR в xcode (11.3.1). Я добавил объекты (например, куб) в сцену, используя композитор реальности, и добавил поведения (например, касание, переворачивание и просмотр камеры) этим объектам, также используя композитор реальности. Сохранил это, переключился наViewController.swift
В ViewController я загружаю Experience.rcproject
и получить доступ к умолчанию Box
сцена написанием var box = try! Experience.loadBox()
. Все работает как положено.
Затем я печатаю различные объекты в иерархии, чтобы понять, как они устроены. Так что я, например, напишуprint(box)
и увидеть все сущности и компоненты, как они описаны здесь
Проблема
Я вижу такие вещи как Transform
для должности и т. д. и ModelComponent
для сетки, материалов и т. д., и все это имеет смысл, но я не вижу, где хранятся поведения внутри объекта, который.rcproject становится внутри swift.
Например, если я добавил look at camera
в реальном композиторе, я предполагаю, что к этому объекту будет прикреплено что-то вроде "рекламного щита", но я не вижу никакой разницы между объектами, к которым применено поведение, и теми, которые не имеют..
Другой пример: добавив tap and flip
к объекту, я ожидал бы найти некоторую информацию об анимации где-то внутри объекта, но опять же я не вижу ее прикрепленной к объекту. Я также не вижу никакой информации об анимации или компонентах поведения где-либо в пределах объекта сцены.
Кто-нибудь знает, где я могу получить к ним доступ? Кажется, что-то подbox
называется actions
но печать, которая просто возвращает Experience.Box.Actions
без дополнительной информации.
Я ищу не в том месте? Или они не выставлены?
1 ответ
Распечатать Entity
чтобы получить путь, содержащий компоненты:
let boxAnchor = try! Experience.loadBox()
let entity = boxAnchor.steelBox!
print(entity as Any)
print(entity.components[PhysicsBodyComponent] as Any)
https://st ackru.com/images/88c49846375ecc9b352e22ce20e7e05ab52fd111.jpg
Затем примените новые значения:
var physicsComponent: PhysicsBodyComponent = entity.components[PhysicsBodyComponent]!
physicsComponent.mode = .dynamic
boxAnchor.steelBox?.components.set(physicsComponent)
arView.scene.anchors.append(boxAnchor)