-
Develop your first immersive app
Find out how you can build immersive apps for visionOS using Xcode and Reality Composer Pro. We'll show you how to get started with a new visionOS project, use Xcode Previews for your SwiftUI development, and take advantage of RealityKit and RealityView to render 3D content.
Chapitres
- 0:00 - Introduction
- 1:06 - Create an Xcode project
- 8:57 - Simulator
- 12:12 - Xcode Previews
- 13:34 - Reality Composer Pro
- 20:18 - Create an immersive scene
- 25:28 - Target gestures to entities
- 30:16 - Wrap-up
Ressources
Vidéos connexes
WWDC23
- Build spatial experiences with RealityKit
- Get started with building apps for spatial computing
- Go beyond the window with SwiftUI
- Meet ARKit for spatial computing
- Meet Reality Composer Pro
- Meet UIKit for spatial computing
- Take SwiftUI to the next dimension
- Work with Reality Composer Pro content in Xcode
-
Rechercher dans cette vidéo…
-
-
6:54 - Glass background effect
VStack { Toggle("Enlarge RealityView Content", isOn: $enlarge) .toggleStyle(.button) } .padding() .glassBackgroundEffect() -
7:28 - RealityView
RealityView { content in // Add the initial RealityKit content if let scene = try? await Entity(named: "Scene", in: realityKitContentBundle) { content.add(scene) } } update: { content in // Update the RealityKit content when SwiftUI state changes if let scene = content.entities.first { let uniformScale: Float = enlarge ? 1.4 : 1.0 scene.transform.scale = [uniformScale, uniformScale, uniformScale] } } .gesture(TapGesture().targetedToAnyEntity().onEnded { _ in enlarge.toggle() }) -
20:31 - ImmersiveView
// MyFirstImmersiveApp.swift @main struct MyFirstImmersiveApp: App { var body: some Scene { WindowGroup { ContentView() }.windowStyle(.volumetric) ImmersiveSpace(id: "ImmersiveSpace") { ImmersiveView() } } } -
22:58 - Size that fits
#Preview { ImmersiveView() .previewLayout(.sizeThatFits) } -
23:48 - openImmersiveSpace
struct ContentView: View { @Environment(\.openImmersiveSpace) var openImmersiveSpace var body: some View { Button("Open") { Task { await openImmersiveSpace(id: "ImmersiveSpace") } } } } -
25:48 - Entity targeting
import SwiftUI import RealityKit struct ContentView: View { var body: some View { RealityView { content in // For entity targeting to work, entities must have a CollisionComponent // and an InputTargetComponent! } .gesture(TapGesture().targetedToAnyEntity().onEnded { value in print("Tapped entity \(value.entity)!") }) } } -
28:56 - Move animation
.gesture(TapGesture().targetedToAnyEntity().onEnded { value in var transform = value.entity.transform transform.translation += SIMD3(0.1, 0, -0.1) value.entity.move( to: transform, relativeTo: nil, duration: 3, timingFunction: .easeInOut ) })
-