Поэтому я задал другой вопрос раньше и пришел к частичному решению. Мне удалось добавить жесты к ОДНОМУ из двух объектов модели в одной сцене, но не в другой. Потому что, когда вы печатаете сцену, две модели имеют одно и то же корневое имя, но только первая получает жесты.
Посмотрите на два куба здесь, я смог перетащить синий куб на передний план, но ничего не происходит, когда я пытаюсь перетащить зеленый куб
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
}
}
}
Смотрите связанный вопрос здесь





Нашел ответ, а не простое обходное решение, которое я искал, но тем не менее решение. Я хотел найти способ добавить жесты сразу ко всем сущностям модели в данной сцене, но, насколько я мог попробовать, это невозможно.
Группового решения пока не существует.
Поэтому мне пришлось разгруппировать объекты, назвать каждый отдельно, а затем объявить каждый отдельно.
Загрузка сцены
пусть 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
}
}
}
Нашел частичный ответ, и теперь я могу перемещать оба объекта. Однако весь смысл этого упражнения состоит в том, чтобы найти решение, которое затем можно применить к большему набору объектов (более 20 объектов) в одной сцене одновременно. Это означает, что если я перетаскиваю любой из объектов, связанных друг с другом, все объекты перемещаются одновременно. Я считаю, что ответ в этом случае заключается в создании родительского объекта в RealityKit, а затем в создании всех объектов дочерними элементами этого одного более крупного объекта. Я попробую это завтра!!!