есть ли лучший способ выбрать размещенные 3D-модели в ARKit
Нет, вы правы.Используйте SCNSceneRenderer.hitTest(_:, options:)
при поиске содержимого SceneKit и ARSCNView.hitTest(_:types:)
при поиске реальных объектов, распознаваемых ARKit.
Что здесь не так, так это то, что categoryBitMask
, ну, в общем, битовая маска.5 имеет двоичное представление 101
.Затем SceneKit сравнивает каждый бит с битами ваших объектов и, если любой из них совпадает, он включает объект в результаты.
Поэтому, когда каждый другой объект имеет категорию по умолчанию 1
, онвключен в результат, потому что 101
и 001
имеют соответствующий бит.
Можно использовать протокол OptionSet
.
struct BodyType: OptionSet {
let rawValue: Int
static let `default` = BodyType(rawValue: 1)
static let userInteraction = BodyType(rawValue: 4)
static let model: BodyType = [.default, .userInteraction]
}
Ваша модель получает опцию model
, но при тестировании хитов вы используете только .userInteraction
.