Как выполнить действие при наведении курсора на объекты модели в XCode для разработки VisionOS?

Я новичок в разработке приложений для экосистемы Apple. В настоящее время я работаю над приложением VisionOS, и мне бы хотелось, чтобы объекты модели выделялись при фокусировке на глазах и возвращались в нормальное состояние, когда они не в фокусе, что-то вроде 3D-кнопки. Последнее, что я хочу реализовать, это то, что при фокусировке/расфокусировке я хочу, чтобы он также вызывал некоторые функции.

Мне удалось выделить отдельный объект в фокусе, однако действие обратного вызова при фокусе/несфокусировании еще предстоит решить.

Следующий код — моя попытка решить проблему:

var body: some View {
        ZStack {
            RealityView { content in
                // Loop through LightIDs enum and create model entities
                for lightID in LightIDs.allCases {
                    let model = ModelEntity(
                        mesh: .generateSphere(radius: uniformedScale),
                        materials: [SimpleMaterial(color: .red, isMetallic: false)]
                    )
                    
                    let x = Float.random(in: -1.0 ... 1.0)
                    model.position = SIMD3(x, 1.0, -2.0)
                    
                    model.name = lightID.rawValue
                    model.components.set(InputTargetComponent())
                    model.components.set(HoverEffectComponent())
                    model.components.set(CollisionComponent(shapes: [.generateSphere(radius: uniformedScale)]))
                    content.add(model)
                    
//                    model.onHover { hover in <-- error ModelEntity has no member onHover
//                        if hover {
//                             print("Mouse hover: \(model.name)")
//                             // do something else here
//                        }
//                    }
                }
            }
        }
}

Если кто-нибудь имеет какое-либо представление по этому вопросу, мы будем очень признательны.

Не можете, VisionOS не позволяет разработчикам знать, на что смотрит пользователь.

lorem ipsum 23.05.2024 18:02
Стоит ли изучать 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
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы не можете выполнить действие, когда пользователь «наводит курсор» на элемент пользовательского интерфейса (смотрит на него), поскольку информация отслеживания глаз недоступна приложениям. Из Обзор конфиденциальности Apple Vision Pro:

Информация о том, куда вы смотрите, не передается приложениям, поскольку контент, который мы просматриваем, и то, как долго мы смотрим на это, может раскрыть наш мыслительный процесс. VisionOS обрабатывает глаза движения на системном уровне и не сообщает, куда вы смотрите, или ваши зрительный ввод с помощью приложений или веб-сайтов, прежде чем вы начнете работать с контентом. Как результат, приложения и веб-сайты знают, какой контент вы выбираете, только когда вы касаетесь пальцами вместе, а не то, на что вы смотрите, но не выбираете.

И:

Как приложения реагируют на то, куда вы смотрите

Мы знаем, что вам важно знать, какой контент вы собираетесь нажать прежде чем нажать. В результате вы можете сказать, что собираетесь выбрать в Apple. Vision Pro, не сообщая приложениям, куда вы смотрите.

VisionOS автоматически выделяет кнопки, на которые вы смотрите, без приложения разработчикам нужно знать, куда вы смотрите. Например, если вы смотрите на кнопку в приложении, VisionOS может предоставить некоторую визуальную индикацию, например, сделать кнопка светится. Только когда вы выбираете кнопку, глядя на нее и нажимая ваши пальцы вместе, то, куда вы смотрите, будет передано в приложение. Визуальные эффекты, реагирующие на то, куда вы смотрите, например светящаяся кнопка, визуализируется вне процесса из приложения. В результате приложения, которые вы используете, не рендеринг эффектов, которые вы видите, когда смотрите на контент — VisionOS визуализирует их анимации, потому что приложения, которые вы используете, не знают, на что вы смотрите, пока вы делаете выбор.

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