Reality Kit: Где в реальности хранятся «поведения» composer, хранящиеся в объекте .rcproject? - PullRequest
1 голос
/ 31 января 2020

Ситуация

Я делаю приложение AR в xcode (11.3.1). Я добавил объекты (например, куб) в сцену, используя реальность composer, и добавил поведение (то есть коснитесь, переверните и посмотрите на камеру) к этим объектам, также используя реальность composer. Сохранено, переключено на ViewController.swift

В ViewController я загружаю Experience.rcproject и получаю доступ к сцене Box по умолчанию, записывая var box = try! Experience.loadBox(). Все работает как положено.

Затем я печатаю различные объекты в иерархии, чтобы понять, как они устроены. Так, например, я напишу print(box) и увижу все сущности и компоненты, как они описаны здесь

Проблема

Я вижу такие вещи, как Transform для позиции и c. и ModelComponent для меня sh, материалы et c. и все это имеет смысл, но я не могу видеть, где поведение хранится в объекте, который .rcproject становится внутри swift.

Например, если бы я добавил look at camera поведение в реальности composer, я бы предположил, что к этому объекту будет прикреплен компонент типа "рекламный щит", но я не вижу любая разница между объектами, к которым применено поведение, и объектами, у которых нет ..

Другой пример: добавив tap and flip к объекту, я ожидал бы найти некоторую информацию об анимации где-то внутри объекта, но опять же я не вижу его прикрепленным к объекту. Также я не вижу никакой информации об анимации или компонентах поведения где-либо внутри объекта сцены.

Знает ли кто-нибудь, где я могу получить к ним доступ? Кажется, что-то под box называется actions, но печать, которая просто возвращает Experience.Box.Actions без дополнительной информации.

Я смотрю не в том месте? Или они не выставлены?

1 Ответ

1 голос
/ 31 января 2020

Печать Entity, чтобы получить путь, содержащий компоненты:

let boxAnchor = try! Experience.loadBox()
let entity = boxAnchor.steelBox!

print(entity as Any)
print(entity.components[PhysicsBodyComponent] as Any)

enter image description here

Затем примените новые значения:

var physicsComponent: PhysicsBodyComponent = entity.components[PhysicsBodyComponent]!

physicsComponent.mode = .dynamic

boxAnchor.steelBox?.components.set(physicsComponent)
arView.scene.anchors.append(boxAnchor)
...