Reality Kit автоматически генерирует рамку коллизий, появляющуюся под моделью.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Reality Kit автоматически генерирует рамку коллизий, появляющуюся под моделью.

Сообщение Anonymous »


Я пытаюсь загрузить настроенную 3D-модель в Reality Kit. Мне удалось загрузить его, но автоматически созданный бокс коллизий находится под моделью. И я пытаюсь переместить модель при нажатии кнопки. Как я могу это сделать в Reality Kit. Можно ли в реалити-ките переместить 3D-модель по обнаруженной плоскости


Изображение


Вот мой код
импортировать SwiftUI импортировать RealityKit импорт Комбинат структура ContentView: Просмотр { @State Private var yOffset: Float = 0,0 @State var btnPressed = ложь var body: some View { VStack{ ARViewContainer(yOffset: $yOffset) Кнопка { btnPressed.toggle() yOffset += 0,1 // arView.arView.debugOptions = btnPressed? [] : [.showPhysics,.showFeaturePoints,.showAnchorOrigins] } этикетка: { Текст("Показать отладку") } } } } структура ARViewContainer: UIViewRepresentable { @Binding var yOffset: Float пусть arView = ARView (кадр: .ноль) func makeUIView (контекст: Контекст) -> ARView { arView.addGestureRecouncer(UITapGestureRecouncer(цель: context.coordinator, action:#selector(context.coordinator.handleTap))) context.coordinator.arview = arView // let boxMesh = MeshResource.generateBox(size: 0.05) // let boxMaterial = SimpleMaterial(color: UIColor.red, isMetallic: true) // let boxEntity = ModelEntity(mesh: boxMesh, материалы: [boxMaterial]) // boxEntity.generateCollisionShapes(рекурсивно: true) // пусть planeAnchor = AnchorEntity(plane: .horizontal) // planeAnchor.addChild(boxEntity) // arView.scene.addAnchor(planeAnchor) вернуть arView } func updateUIView(_ uiView: ARView, context: Context) { if let modelEntity = uiView.scene.anchors.compactMap({$0 as? ModelEntity }).first { modelEntity.position.y += yOffset } } func makeCoordinator() -> ARCordinator { вернуть ARCoordinator() } } #Предварительный просмотр { КонтентПросмотр() } класс ARCordinator: NSObject{ вар arview: ARView? var Cancellable: AnyCancellable? @objc func handleTap (_ распознаватель: UITapGestureRecouncer) { если позволить arview{ пусть TapLocation = распознаватель.местоположение (в: arview) arview.debugOptions = [.showPhysics] // если let TappedEntity = arview.entity(at: TapLocation) как? МодельEntity{ // TappedEntity.model?.materials = [SimpleMaterial(color: UIColor.purple, isMetallic: true)] // } пусть результаты = arview.raycast (от: TapLocation, разрешение: .estimatedPlane, выравнивание: .horizontal) если пусть hitResult = results.first{ // пусть якореEntity = AnchorEntity(raycastResult: hitResult) // let boxMesh = MeshResource.generateBox(size: 0.2) // let boxMaterial = SimpleMaterial(color: UIColor.red, isMetallic: true) // let boxEntity = ModelEntity(mesh: boxMesh, материалы: [boxMaterial]) // anchorEntity.addChild(boxEntity) // boxEntity.generateCollisionShapes(рекурсивно: true) // arview.installGestures(.all, for: boxEntity) пусть якореEntity = AnchorEntity (raycastResult: hitResult) отменяемый = ModelEntity.loadModelAsync(с именем: "Evangelion_-_Eva_01_Rigged") .sink { [self] приводит к результат переключения{ случай .законченный: печать("Завершено") можно отменить?.cancel() перерыв случай .failure(пусть ошибка): печать (ошибка) перерыв } } getValue: { modelEnity в modelEnity.generateCollisionShapes(рекурсивно: true) anchorEntity.addChild(modelEnity) arview.installGestures(.all, для: modelEnity) arview.scene.addAnchor(anchorEntity) } } } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»