Как взаимодействовать с 3D-объектами в RealityKit

Проблемы с взаимодействием трехмерных объектов. Я нашел некоторые бета-функции RealityKit, такие как PhysicsBodyComponent, applyImpulse, addForce, applyAngularImpulse и т. Д.

Я пытался добавить физические характеристики к объекту "ваза" и придавал импульс объекту на случай касания или чего-то в этом роде.

Это действительно странно, после выполнения команд физические характеристики добавляются нормально, и в то же время импульсы и сила не добавляются в объект (см. Ниже при выводе отладки).

Вывод отладочной печати:

Something 1 Необязательный (RealityKit.PhysicsBodyComponent(режим: RealityKit.PhysicsBodyMode.dynamic, massProperties: RealityKit.PhysicsMassProperties(масса: 0,2, инерция: SIMD3(0,1, 0,1, 0,1), centerOfMass: (положение: SIMD3 0,0) (0,0, 0,0, 0,0, 0,0, 0,0, 0,0), ориентация: simd_quatf(действительное значение: 1,0, изображение: SIMD3(0,0, 0,0, 0,0)))), материал: RealityKit.PhysicsMaterialResource, isTranslationLocked: (x: false, y: false, z: false), isRotationLocked: (x: false, y: false, z: false), isContinuousCollisionDetectionEnabled: false, телепорт: false, userForce: SIMD3(0.0, 0.0, 0.0), userTorque: SIMD3(0.0, 0.0, 0.0), userLinearImpulse: SIMD3(0.0, 0.0, 0.0), userAngularImpulse: SIMD3(0.0, 0.0, 0.0)))

Something 5 Необязательный (RealityKit.PhysicsBodyComponent(режим: RealityKit.PhysicsBodyMode.dynamic, massProperties: RealityKit.PhysicsMassProperties(масса: 0,2, инерция: SIMD3(0,1, 0,1, 0,1), centerOfMass: (положение: SIMD3 0,0) (0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0), ориентация: simd_quatf(действительный: 1.0, imag: SIMD3(0.0, 0.0, >0.0)))), материал: RealityKit.PhysicsMaterialResource, isTranslationLocked: (x: false, y: false, z: false), isRotationLocked: (x: false, y: false, z: false), isContinuousCollisionDetectionEnabled: false, телепорт: false, userForce: SIMD3(0.0, 0.0, 0.0), userTorque: SIMD3(0.0, 0.0, 0.0), userLinearImpulse: SIMD3(0.0, 0.0, 0.0), userAngularImpulse: SIMD3(0.0, 0.0, 0.0)))

Как мы видим, функции не добавляют импульсы и силу к объекту "ваза". Может я что-то не так делаю.

1 ответ

Я не думаю, что вы должны создавать экземпляры ModelEntity непосредственно. Я думаю, что это внутренний компонент Entity класс, представляющий только сетку. Вы увеличиваете взаимодействия / анимации непосредственно с компонентами в RealityKit, Они применяются ко всему объекту сущности. Я думаю, что это похоже на то, как если вы создаете представление Metal, вам нужно, чтобы оно поддерживалось слоем Core Animation, чтобы получить доступ к взаимодействиям с пользователем.

Если вы посмотрите на образец приложения SwiftStrike, то он не создаёт непосредственно экземпляр ModelEntity что заставляет меня верить, что это не лучшая практика для создания тех, кто вне Entity объект.

Я верю, что вы добавите свою вазу в проект через Reality Composer. Вы можете применить материалы и столкновения там. Вы также можете добавить поведение, например, реагирование на прикосновения. Затем вы можете получить доступ к вазе через файл reality composer в Xcode и добавить компоненты к сущности вазы, которые преобразуют ее положение. Все объекты имеют компонент преобразования, который описан здесь.

RealityKit кажется, что он был разработан, чтобы абстрагировать как можно больше кода от программиста, поэтому большая часть базовой архитектуры на самом деле не раскрывается и не документируется. Это также не организовано так, как я бы это организовал, но я не очень знаком с шаблоном проектирования Entity-Component.

Если вам не нравится, как устроен RealityKit, у вас также есть возможность использовать SceneKit в качестве средства визуализации. Это не отвлекает значительную часть функциональности и позволяет использовать команды Core Animation непосредственно для объектов.

Другие вопросы по тегам