Добавление жестов ко ВСЕМ сущностям модели в одной сцене Reality Composer, а не только в одной?

Поэтому я задал другой вопрос раньше и пришел к частичному решению. Мне удалось добавить жесты к ОДНОМУ из двух объектов модели в одной сцене, но не в другой. Потому что, когда вы печатаете сцену, две модели имеют одно и то же корневое имя, но только первая получает жесты.

Посмотрите на два куба здесь, я смог перетащить синий куб на передний план, но ничего не происходит, когда я пытаюсь перетащить зеленый куб

import UIKit
import RealityKit
import SwiftUI

class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!
    //private var myEntity: Entity?
    typealias GstReady = Entity & HasCollision
    //typealias ModelPack = ModelEntity & HasCollision


 
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let boxAnchor = try! Experience.loadBox()
        arView.scene.anchors.append(boxAnchor)
        
        let cubesAnchor = try! Experience.loadCubes()
        arView.scene.anchors.append(cubesAnchor)
        
        
        if let entity = cubesAnchor.findEntity(named: "simpBld_root") as? GstReady {
            entity.generateCollisionShapes(recursive: false)
                  arView.installGestures([.all], for: entity)
              }

        
        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0){
            //self.arView.scene.anchors.removeAll()
            let coneAnchor = try! Experience.loadCone()
            self.arView.scene.anchors.append(coneAnchor)
            
            print(cubesAnchor)
            
        }
        
        func handleTapOnEntity(_ entity: Entity?){
            guard let entity = entity else { return }
            
            //self.myEntity = entity
            //self.myEntity?.isEnabled = false
            
            
            
        }
        
        
        
        
    }
    
    
    
    
}

Смотрите связанный вопрос здесь

Нашел частичный ответ, и теперь я могу перемещать оба объекта. Однако весь смысл этого упражнения состоит в том, чтобы найти решение, которое затем можно применить к большему набору объектов (более 20 объектов) в одной сцене одновременно. Это означает, что если я перетаскиваю любой из объектов, связанных друг с другом, все объекты перемещаются одновременно. Я считаю, что ответ в этом случае заключается в создании родительского объекта в RealityKit, а затем в создании всех объектов дочерними элементами этого одного более крупного объекта. Я попробую это завтра!!!

Manuela 30.04.2023 03:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нашел ответ, а не простое обходное решение, которое я искал, но тем не менее решение. Я хотел найти способ добавить жесты сразу ко всем сущностям модели в данной сцене, но, насколько я мог попробовать, это невозможно.

Группового решения пока не существует.

Поэтому мне пришлось разгруппировать объекты, назвать каждый отдельно, а затем объявить каждый отдельно.

Загрузка сцены

пусть cubesAnchor = попробуйте! Опыт.loadCubes() arView.scene.anchors.append(cubesAnchor)

Генерация форм столкновения для сцены

    cubesAnchor.generateCollisionShapes(recursive: true)

Добавление Entity и HasCollision к каждому объекту в сцене

        let greenCubesGest = cubesAnchor.greenCube as? Entity & HasCollision
        arView.installGestures(for: greenCubesGest!)
        let blueCubesGest = cubesAnchor.blueCube as? Entity & HasCollision
        arView.installGestures(for: blueCubesGest!)

Полный код ниже.

import UIKit
import RealityKit
import SwiftUI

class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!


 
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let boxAnchor = try! Experience.loadBox()
        arView.scene.anchors.append(boxAnchor)
        
        let cubesAnchor = try! Experience.loadCubes()
        arView.scene.anchors.append(cubesAnchor)
        cubesAnchor.generateCollisionShapes(recursive: true)
        let greenCubesGest = cubesAnchor.greenCube as? Entity & HasCollision
        arView.installGestures(for: greenCubesGest!)
        let blueCubesGest = cubesAnchor.blueCube as? Entity & HasCollision
        arView.installGestures(for: blueCubesGest!)
        
        /**
         cubesAnchor.generateCollisionShapes(recursive: true)
         let allCubes= cubesAnchor.group as? Entity & HasCollision
         arView.installGestures(for: allCubes!)
         */
        /**
        
       
        if let entity = cubesAnchor.findEntity(named: "simpBld_root") as? GstReady {
            entity.generateCollisionShapes(recursive: false)
                  arView.installGestures([.all], for: entity)
              }

         */
        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0){
            //self.arView.scene.anchors.removeAll()
            let coneAnchor = try! Experience.loadCone()
            self.arView.scene.anchors.append(coneAnchor)
            
            print(cubesAnchor)
            
        }
        
        func handleTapOnEntity(_ entity: Entity?){
            guard let entity = entity else { return }
            
            //self.myEntity = entity
            //self.myEntity?.isEnabled = false
            
            
            
        }
        
        
        
        
    }
    
    
    
    
}

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