Я пытаюсь обнаружить столкновения между двумя объектами RealityKit, но результаты неожиданны. < /p>
Я таким образом создал минимальный пример. В приложении iOS ниже настраиваются 3 объекта:
a poard < /code>, фиксированная коробка < /code> и движущаяся поле < /code>.
Плата и 1 -я поле не перемещаются, в то время как 2 -я поле движется в направлении 1 -й поле. В ящиках есть режим столкновения, установленный на .trigger .
Оба поля принадлежат одной и той же группе CollisionGroup , и их фильтр столкновений устанавливается в эту группу. Если обнаружено столкновение, столкновение регистрируется. Столкновение не зарегистрировано. Я ожидал, что столкновение между обеими полями будет обнаружено.collision began between board and Fixed box
collision began between Fixed box and board
collision began between board and Moving box
collision began between Moving box and board
< /code>
Очевидно, что столкновение может быть обнаружено, но столкновение между обоими коробками не является. Но почему? < /P>
Вот мой код: < /p>
//
// CollisionApp.swift
// Collision
//
// Created by Reinhard Männer on 31.03.25.
//
import SwiftUI
@main
struct CollisionApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
//
// CollisionManager.swift
// Collision
//
// Created by Reinhard Männer on 31.03.25.
//
import Combine
import Foundation
import RealityKit
class CollisionManager {
var movementTimer: Timer?
private var updateVehicleCollisionSubscription: Cancellable?
func startVehicleCollisionTrigger(scene: RealityKit.Scene) {
updateVehicleCollisionSubscription = scene.subscribe(to: CollisionEvents.Began.self) { event in
let a = event.entityA
let b = event.entityB
print("collision began between \(a.name) and \(b.name)")
}
}
func startMovement(entity: Entity) {
movementTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
if entity.position.x > 0 {
entity.position.x -= 0.02
} else {
timer.invalidate()
self.movementTimer = nil
}
}
}
}
//
// ContentView.swift
// Collision
//
// Created by Reinhard Männer on 31.03.25.
//
import RealityKit
import SwiftUI
struct ContentView: View {
let collisionManager = CollisionManager()
let boardHeight: Float = 0.1
let boxHeight: Float = 0.3
var body: some View {
var movingBox: Entity?
RealityView { content in
let board = makeBoard()
content.add(board)
let box1 = makeBox(name: "Fixed box")
board.addChild(box1)
movingBox = makeBox(name: "Moving box")
movingBox?.position.x = 0.8
board.addChild(movingBox!)
}
update: { content in
let scene = content.entities.first?.scene
collisionManager.startVehicleCollisionTrigger(scene: scene!)
collisionManager.startMovement(entity: movingBox!)
}
}
func makeBoard() -> ModelEntity {
let mesh = MeshResource.generateBox(width: 2.0, height: boardHeight, depth: 1.0)
var material = UnlitMaterial(); material.color.tint = .red
let boardEntity = ModelEntity(mesh: mesh, materials: [material])
boardEntity.name = "board"
boardEntity.generateCollisionShapes(recursive: false)
boardEntity.transform.translation = [0, 0, -3]
return boardEntity
}
func makeBox(name: String) -> ModelEntity {
let mesh = MeshResource.generateBox(width: 0.2, height: boxHeight, depth: 0.3)
var material = UnlitMaterial(); material.color.tint = .green
let boxEntity = ModelEntity(mesh: mesh, materials: [material])
boxEntity.name = name
// To put the box onto the board, move it up by half height of the board and half height of the box
let y_up = boardHeight/2.0 + boxHeight/2.0
boxEntity.position = SIMD3(0, y_up, 0)
// Allow to detect collisions between boxes only and to trigger code execution.
boxEntity.generateCollisionShapes(recursive: false)
boxEntity.collision!.mode = .trigger
let collisionGroup = CollisionGroup(rawValue: 1
Подробнее здесь: https://stackoverflow.com/questions/795 ... -detection
Не понимаю обнаружение столкновений IOS Realitykit ⇐ IOS
Программируем под IOS
-
Anonymous
1743502655
Anonymous
Я пытаюсь обнаружить столкновения между двумя объектами RealityKit, но результаты неожиданны. < /p>
Я таким образом создал минимальный пример. В приложении iOS ниже настраиваются 3 объекта:
a poard < /code>, фиксированная коробка < /code> и движущаяся поле < /code>.
Плата и 1 -я поле не перемещаются, в то время как 2 -я поле движется в направлении 1 -й поле. В ящиках есть режим столкновения, установленный на .trigger .
Оба поля принадлежат одной и той же группе CollisionGroup , и их фильтр столкновений устанавливается в эту группу. Если обнаружено столкновение, столкновение регистрируется. Столкновение не зарегистрировано. Я ожидал, что столкновение между обеими полями будет обнаружено.collision began between board and Fixed box
collision began between Fixed box and board
collision began between board and Moving box
collision began between Moving box and board
< /code>
Очевидно, что столкновение может быть обнаружено, но столкновение между обоими коробками не является. Но почему? < /P>
Вот мой код: < /p>
//
// CollisionApp.swift
// Collision
//
// Created by Reinhard Männer on 31.03.25.
//
import SwiftUI
@main
struct CollisionApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
//
// CollisionManager.swift
// Collision
//
// Created by Reinhard Männer on 31.03.25.
//
import Combine
import Foundation
import RealityKit
class CollisionManager {
var movementTimer: Timer?
private var updateVehicleCollisionSubscription: Cancellable?
func startVehicleCollisionTrigger(scene: RealityKit.Scene) {
updateVehicleCollisionSubscription = scene.subscribe(to: CollisionEvents.Began.self) { event in
let a = event.entityA
let b = event.entityB
print("collision began between \(a.name) and \(b.name)")
}
}
func startMovement(entity: Entity) {
movementTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
if entity.position.x > 0 {
entity.position.x -= 0.02
} else {
timer.invalidate()
self.movementTimer = nil
}
}
}
}
//
// ContentView.swift
// Collision
//
// Created by Reinhard Männer on 31.03.25.
//
import RealityKit
import SwiftUI
struct ContentView: View {
let collisionManager = CollisionManager()
let boardHeight: Float = 0.1
let boxHeight: Float = 0.3
var body: some View {
var movingBox: Entity?
RealityView { content in
let board = makeBoard()
content.add(board)
let box1 = makeBox(name: "Fixed box")
board.addChild(box1)
movingBox = makeBox(name: "Moving box")
movingBox?.position.x = 0.8
board.addChild(movingBox!)
}
update: { content in
let scene = content.entities.first?.scene
collisionManager.startVehicleCollisionTrigger(scene: scene!)
collisionManager.startMovement(entity: movingBox!)
}
}
func makeBoard() -> ModelEntity {
let mesh = MeshResource.generateBox(width: 2.0, height: boardHeight, depth: 1.0)
var material = UnlitMaterial(); material.color.tint = .red
let boardEntity = ModelEntity(mesh: mesh, materials: [material])
boardEntity.name = "board"
boardEntity.generateCollisionShapes(recursive: false)
boardEntity.transform.translation = [0, 0, -3]
return boardEntity
}
func makeBox(name: String) -> ModelEntity {
let mesh = MeshResource.generateBox(width: 0.2, height: boxHeight, depth: 0.3)
var material = UnlitMaterial(); material.color.tint = .green
let boxEntity = ModelEntity(mesh: mesh, materials: [material])
boxEntity.name = name
// To put the box onto the board, move it up by half height of the board and half height of the box
let y_up = boardHeight/2.0 + boxHeight/2.0
boxEntity.position = SIMD3(0, y_up, 0)
// Allow to detect collisions between boxes only and to trigger code execution.
boxEntity.generateCollisionShapes(recursive: false)
boxEntity.collision!.mode = .trigger
let collisionGroup = CollisionGroup(rawValue: 1
Подробнее здесь: [url]https://stackoverflow.com/questions/79546170/dont-understand-ios-realitykits-collision-detection[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия