Hey @niklas_prahl
The Spatial Personas feature is not available in the Simulator. What you're seeing is just a person's photo/avatar, which can be set in the Contacts app. Currently, seat placement in TabletopKit is not working correctly in the Simulator—so to get accurate results, you need to test on a real device.
Testing with Spatial Personas
To properly test Spatial Personas, you need two physical Vision Pro devices with two users who have already set up their Spatial Personas. Additionally, both devices must run the same app version with identical bundle and team identifiers. Here are two ways to achieve this:
Using Xcode: Connect both Vision Pros to the same Mac and build the app under the same development team.
Using TestFlight: Upload the app to TestFlight (internal testing) and install it on both devices.
This ensures that both devices are running the exact same build, which is essential for SharePlay sessions.
Shared Immersive Space & TabletopKit
I've previously attempted to integrate a shared immersive space into a TabletopKit app. However, it seems that Spatial Personas are not currently interactive within TabletopKit when using a custom immersive space.
If your goal is better control over Spatial Persona interactions, I recommend using the Group Activities framework instead, as it may provide more flexibility in handling shared experiences.
Hope this helps! Let me know if you need further clarification.
Post
Replies
Boosts
Views
Activity
The same problem occurs for us as well. We have three images in the ARKit resource group, but visionOS can only detect one of them if only one is visible in the frame.
You can achieve something similar using the ornament modifier in visionOS. The benefit to this solution will be that it won't be lagging like in the @Vision Pro Engineer's solution, since GeometryReader is not updated regulary. Here's an example:
import SwiftUI
import RealityKit
import RealityKitContent
struct ContentView: View {
var body: some View {
Text("Hello, world!")
.ornament(attachmentAnchor: .scene(.back)) {
Model3D(named: "Scene", bundle: realityKitContentBundle)
.frame(depth: -1300)
}
}
}
You can find more about the ornament modifier in the Apple documentation.
We have provided one of the possible solutions that we have found in this thread:
Synchronizing Physics in TableTopKit
One potential solution we explored involves creating a dummy GameEquipment of a different type, adding it to the scene, and overriding the default implementation of GameRenderer's onUpdate() function to handle synchronization.
extension GameRenderer {
func onUpdate(timeInterval: Double, snapshot: TableSnapshot, visualState: TableVisualState) {
self.startInteractionOnProxy()
}
public func startInteractionOnProxy(){
guard let game = game else { return }
let proxyEquipments: [ProxyEquipment] = game.tabletopGame.equipment(of: ProxyEquipment.self)
if let proxy = proxyEquipments.first {
_ = game.tabletopGame.startInteraction(onEquipmentID: proxy.id)
}
}
}
While this approach works to some extent, it has certain drawbacks and limitations, particularly in terms of performance and architectural complexity. It’s the closest we’ve come to achieving the desired synchronization, but we believe there might be a more robust and efficient way to accomplish this.
We would still greatly appreciate any guidance from Apple engineers on a more suitable solution to synchronize physical properties in EntityEquipment effectively.
Second Failed Approach
I also tried adding PhysicsBodyComponent and CollisionComponent to EntityEquipment's Entity. This approach provides proper physics collisions and custom shapes. However, the main issue is that the position of EntityEquipment itself does not synchronize with the Entity's physics body, resulting in two separate instances of one object.
From Swift Student Challenge Terms and Conditions
Class schedules or other current proof of enrollment is accepted in all languages.
Full Swift Student Challenge Terms and Conditions
From Swift Student Challenge Terms and Conditions:
Your creation should not rely on a network connection and any resources used in your app playground should be included locally in the ZIP file. Submissions will be judged offline.
Full Swift Student Challenge Terms and Conditions