View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Todos los videos
  • Información

Más videos

  • Información
  • Resumen
  • Código
  • Novedades de RealityKit

    Da rienda suelta a tu creatividad con las nuevas funcionalidades de RealityKit para crear contenido 3D enriquecido para iOS, iPadOS, macOS, tvOS y visionOS. Descubre cómo puedes acceder a los datos de ARKit directamente a través de RealityKit. Explora cómo puedes interactuar con tu contenido 3D de forma más natural usando la funcionalidad de manipulación de objetos. Conoce algunas API nuevas para comprensión de escenas, combinación de entornos, creación de instancias y más, todo en una muestra interactiva.

    Capítulos

    • 0:00 - Introducción
    • 3:19 - Actualizaciones de anclaje
    • 6:52 - ManipulationComponent
    • 10:01 - Comprensión de escenas
    • 11:18 - EnvironmentBlendingComponent
    • 12:26 - MeshInstancesComponent
    • 16:28 - Medios envolventes
    • 21:43 - Accesorios y más

    Recursos

    • Integrating virtual objects with your environment
    • Presenting images in RealityKit
    • Playing immersive media with RealityKit
      • Video HD
      • Video SD

    Videos relacionados

    WWDC25

    • Admite reproducción de video envolvente en apps de visionOS
    • Explora la entrada de accesorios espaciales en visionOS
    • Mejor juntos: SwiftUI y RealityKit
  • Buscar este video…
    • 4:33 - Set up SpatialTrackingSession

      // Set up SpatialTrackingSession
      @State var spatialTrackingSession = SpatialTrackingSession()
      
      RealityView { content in
                   
          let configuration = SpatialTrackingSession.Configuration(
              tracking: [.plane]
          )
      		// Run the configuration
          if let unavailableCapabilities = await spatialTrackingSession.run(configuration) {
              // Handle errors
          }
      }
    • 4:34 - Set up PlaneAnchor

      // Set up PlaneAnchor
      RealityView { content in
      
      		// Set up the SpatialTrackingSession
      
          // Add a PlaneAnchor
          let planeAnchor = AnchorEntity(.plane(.horizontal,
                                                classification: .table,
                                                minimumBounds: [0.15, 0.15]))
          content.add(planeAnchor)
      }
    • 5:48 - Handle DidAnchor event

      // Handle DidAnchor event
      
      		didAnchor = content.subscribe(to: AnchorStateEvents.DidAnchor.self) { event in
      
      		guard let anchorComponent =
                 event.entity.components[ARKitAnchorComponent.self] else { return }
      
      
      		guard let planeAnchor = anchorComponent.anchor as? PlaneAnchor else { return }
      
      		let worldSpaceFromExtent =
          planeAnchor.originFromAnchorTransform *
          planeAnchor.geometry.extent.anchorFromExtentTransform
      
          gameRoot.transform = Transform(matrix: worldSpaceFromExtent)
      
          // Add game objects to gameRoot 
      }
    • 7:38 - Set up ManipulationComponent

      // Set up ManipulationComponent
      extension Entity {
          static func loadModelAndSetUp(modelName: String,
                                        in bundle: Bundle) async throws -> Entity {
      
              let entity = // Load model and assign PhysicsBodyComponent
              let shapes = // Generate convex shape that fits the entity model
      
              // Initialize manipulation
              ManipulationComponent.configureEntity(entity, collisionShapes: [shapes])
              var manipulationComponent = ManipulationComponent()
              manipulationComponent.releaseBehavior = .stay
              entity.components.set(manipulationComponent)
      
              // Continue entity set up
          }
      }
    • 9:28 - Subscribe to willBegin ManipulationEvent

      // Subscribe to ManipulationEvents
      
      // Update the PhysicsBodyComponent to support movement
      willBegin = content.subscribe(to: ManipulationEvents.WillBegin.self) { event in
          if var physicsBody = event.entity.components[PhysicsBodyComponent.self] {
              physicsBody.mode = .kinematic
              event.entity.components.set(physicsBody)
          }
      }
    • 9:29 - Subscribe to willEnd ManipulationEvent

      // Subscribe to ManipulationEvents
                      
      // Update the PhysicsBodyComponent to be a dynamic object
      willEnd = content.subscribe(to: ManipulationEvents.WillEnd.self) { event in
          if var physicsBody = event.entity.components[PhysicsBodyComponent.self] {
              physicsBody.mode = .dynamic
              event.entity.components.set(physicsBody)
          }
      }
    • 10:52 - Set up Scene understanding mesh collision and physics​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

      // Set up Scene understanding mesh collision/physics
      
      let configuration = SpatialTrackingSession.Configuration(
          tracking: [.plane],
          sceneUnderstanding: [.collision, .physics]
      )
    • 11:56 - Set up EnvironmentBlendingComponent

      // Set up EnvironmentBlendingComponent
      
      entity.components.set(
          EnvironmentBlendingComponent(preferredBlendingMode: .occluded(by: .surroundings))​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
      )
    • 14:20 - Set up MeshInstancesComponent

      // Set up MeshInstancesComponent entity
      
      let entity = try await ModelEntity(named:"PebbleStriped.usdz")
      var meshInstancesComponent = MeshInstancesComponent()
      let instances = try LowLevelInstanceData(instanceCount: 20)
      meshInstancesComponent[partIndex: 0] = instances
          
      instances.withMutableTransforms { transforms in
          for i in 0..<20 { 
              let scale: Float = .random(in:0.018...0.025)
              let angle: Float = .random(in:0..<2) * .pi
              let position = randomPoint(in: inArea, with: scene)
              let transform = Transform(scale: .init(repeating: scale),
                                        rotation: .init(angle: angle,axis: [0, 1, 0]),
                                        translation: position)
              transforms[i] = transform.matrix
          }
      }
              
      entity.components.set(meshInstancesComponent)
    • 17:36 - Load and display a 2D photo

      // Load and display a 2D photo
          
      guard let url = Bundle.main.url(forResource: "my2DPhoto", withExtension: "heic") else {a​​​​​​​​​​​​​​​​​​​​​​​​​​
          return
      }
      
      let component = try await ImagePresentationComponent(contentsOf: url)
      
      let entity = Entity()
      entity.components.set(component)
    • 17:57 - Load and display a spatial photo with windowed presentation

      // Load and display a spatial photo with windowed presentation
          
      guard let url = Bundle.main.url(forResource: "mySpatialPhoto", withExtension: "heic") else {
          return
      }
      
      var component = try await ImagePresentationComponent(contentsOf: url)
      
      // Discover if the component supports windowed spatial photo presentation.
      if component.availableViewingModes.contains(.spatialStereo) {
          component.desiredViewingMode = .spatialStereo
      }
      
      entity.components.set(component)
    • 18:22 - Load and display a spatial photo with immserive presentation

      // Load and display a spatial photo with immersive presentation
          
      guard let url = Bundle.main.url(forResource: "mySpatialPhoto", withExtension: "heic") else {
          return
      }
      
      var component = try await ImagePresentationComponent(contentsOf: url)
      
      // Discover if the component supports immersive spatial photo presentation.
      if component.availableViewingModes.contains(.spatialStereoImmersive) {
          component.desiredViewingMode = .spatialStereoImmersive
      }
      
      entity.components.set(component)
    • 18:56 - Load a spatial photo and use it to generate and present a spatial scene

      // Load a spatial photo and use it to generate and present a spatial scene
          
      guard let url = Bundle.main.url(forResource: "mySpatialPhoto", withExtension: "heic") else {
          return
      }
      
      let spatial3DImage = try await ImagePresentationComponent.Spatial3DImage(contentsOf: url)
      var component = ImagePresentationComponent(spatial3DImage: spatial3DImage)
      
      try await spatial3DImage.generate()
      
      // Discover if the component supports windowed spatial scene presentation.
      if component.availableViewingModes.contains(.spatial3D) {
          component.desiredViewingMode = .spatial3D
      }
      
      entity.components.set(component)
    • 20:06 - Generating a spatial scene as needed

      // Load a spatial photo and use it to generate and present a spatial scene
          
      guard let url = Bundle.main.url(forResource: "mySpatialPhoto", withExtension: "heic") else {
          return
      }
      
      let spatial3DImage = try await ImagePresentationComponent.Spatial3DImage(contentsOf: url)
      var component = ImagePresentationComponent(spatial3DImage: spatial3DImage)
      
      component.desiredViewingMode = .spatial3D // (or .spatial3DImmersive)
      
      entity.components.set(component)
      
      try await spatial3DImage.generate()
    • 23:35 - Load entity from Data object​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

      // Load entity from Data object
          
      if let (data, response) = try? await URLSession.shared.data(from: url) {
          if let entity = try? await Entity(from: data) {
              content.add(entity)
          }
      }
    • 0:00 - Introducción
    • La estructura RealityKit, presentada en 2019, permite a los desarrolladores crear apps y juegos 3D inmersivos en varias plataformas de Apple, incluidas visionOS, iOS, iPadOS, macOS y ahora tvOS. A partir de los comentarios, la última actualización presenta varias características nuevas, como el acceso directo a los datos de ARKit, el ManipulationComponent para agregar interacciones a entidades 3D, el EnvironmentBlendingComponent para una oclusión perfecta en el mundo real y el MeshInstancesComponent para una representación eficiente de múltiples modelos 3D. Estas características se demuestran a través de la creación de un juego de rompecabezas espacial donde los jugadores interactúan con objetos para abrir un cofre, mostrando cómo RealityKit mejora la combinación de experiencias del mundo virtual y real.

    • 3:19 - Actualizaciones de anclaje
    • Con esta nueva API, puedes acceder directamente a los datos de ARKit a través de RealityKit, mejorando el poder de AnchorEntities. Al crear una SpatialTrackingSession con seguimiento de planos activado, puedes configurar AnchorEntities para filtrar superficies específicas del mundo real, como tablas con dimensiones mínimas. Cuando el sistema detecta una superficie coincidente, activa un AnchorStateEvent, que proporciona datos de ARKit, como transformaciones y extensiones. Estos datos se pueden utilizar luego para posicionar entidades con precisión en la superficie anclada, garantizando que estén centradas y alineadas con el espectador.

    • 6:52 - ManipulationComponent
    • En el espacio inmersivo, los objetos del juego aparecen en superficies adecuadas. El ManipulationComponent de RealityKit permite a las personas tomar, rotar e intercambiar manos con estas entidades 3D. Al llamar a la funcionalidad configureEntity, se agregan automáticamente los componentes necesarios. Para evitar que los objetos se restablezcan después de la liberación, establece la propiedad “releaseBehavior” en “stay”. Un PhysicsBodyComponent agregado hace que los objetos caigan al suelo. La API ManipulationEvents se utiliza para activar y desactivar la gravedad; la gravedad se activa cuando alguien suelta un objeto (evento WillEnd) y se desactiva cuando lo recoge (evento WillBegin), lo que permite interacciones realistas y, al mismo tiempo, mantiene el control durante la manipulación.

    • 10:01 - Comprensión de escenas
    • En visionOS, con la API Scene Understanding de RealityKit, puedes integrar el entorno del mundo real en la simulación física de un juego. Al utilizar la API SpatialTrackingSession, puedes generar una malla del entorno. Para que los objetos del juego colisionen con esta malla del mundo real, es necesario configurar SceneUnderstandingFlags para colisión y física en la configuración SpatialTrackingSession antes de iniciar la sesión. Esta actualización permite que los objetos del juego interactúen de forma realista con el entorno físico, como dejarlos caer sobre mesas o suelos.

    • 11:18 - EnvironmentBlendingComponent
    • Con la última actualización de RealityKit, puedes usar EnvironmentBlendingComponent en tus apps espaciales inmersivas para ocluir entidades virtuales con el entorno del mundo real. Al agregar este componente y configurar el modo de fusión, las entidades pueden ser ocluidas de manera realista por objetos estáticos del mundo real y crear una experiencia más fluida. Sin embargo, es importante tener en cuenta que estas entidades siempre se dibujan detrás de otros objetos virtuales en la escena y no serán ocluidas por objetos dinámicos en movimiento, como personas o mascotas.

    • 12:26 - MeshInstancesComponent
    • La última actualización de RealityKit también presenta MeshInstancesComponent, que mejora la eficiencia de renderizado y te permite dibujar una sola malla varias veces dentro de una entidad. Este nuevo componente reemplaza la necesidad de clonar entidades, reduciendo significativamente el uso de memoria y procesamiento. Al utilizar MeshInstancesComponent, puedes proporcionar una lista de transformaciones para cada instancia de malla, lo que permite apariencias únicas a través de CustomMaterials en plataformas compatibles. Este método mejora el rendimiento al optimizar la transferencia de datos del GPU. Al utilizar este componente para áreas grandes, para una selección adecuada, divídelo en entidades más pequeñas. Hay una demostración de cómo inicializar y rellenar MeshInstancesComponent con transformaciones aleatorias, creando un área jugable con decoraciones. Juntas, estas API, a saber, AnchorStateEvent, ManipulationComponent, sceneUnderstanding flags y EnvironmentBlendingComponent, permiten experiencias de realidad aumentada interactivas que combinan el mundo real.

    • 16:28 - Medios envolventes
    • RealityKit está recibiendo actualizaciones importantes este año, mejorando su compatibilidad con medios inmersivos. Con un nuevo componente, ImagePresentationComponent, puedes mostrar tres tipos de imágenes: imágenes 2D tradicionales, fotografías espaciales y escenas espaciales. Las escenas espaciales son una adición notable; son imágenes 3D generadas a partir de fotos 2D, creando un efecto similar a un diorama con paralaje de movimiento, lo que hace que las imágenes estáticas sean más atractivas. Para presentar escenas espaciales, se generan a partir de una imagen 2D o una fotografía espacial utilizando la clase Spatial3DImage y, luego, se configura el modo de visualización deseado. VideoPlayerComponent también se actualiza para admitir varios formatos de video inmersivo, incluidos videos espaciales, videos de Apple Projected Media Profile como videos de 180° y 360°, y Apple Immersive Video. Puedes reproducir estos videos en diferentes modos de visualización y puedes configurar ajustes de comodidad para los videos de Apple Projected Media Profile.

    • 21:43 - Accesorios y más
    • La actualización de RealityKit de este año mejora significativamente el desarrollo de apps 3D. Las actualizaciones clave incluyen lo siguiente: Accesorios espaciales: RealityKit ahora admite el seguimiento de accesorios espaciales en seis grados de libertad con respuestas hápticas, lo que permite interacciones más inmersivas en espacios compartidos y completos. Integración con SwiftUI: Los nuevos componentes, como ViewAttachmentComponent, PresentationComponent y GestureComponent, simplifican la adición de vistas SwiftUI, presentaciones modales y gestos a las entidades. Actualizaciones de entidades: Un nuevo método de unión de entidades simplifica la unión de mallas a esqueletos animados, y un inicializador permite cargar entidades desde objetos de datos en memoria, lo que admite la transmisión de escenas en línea y USD. Compatibilidad con texturas y efectos de desplazamiento: RealityKit ahora admite texturas codificadas AVIF para tamaños de archivo más pequeños sin comprometer la calidad. HoverEffectComponent se actualiza con GroupID, lo que permite un mayor control sobre las activaciones de efectos al pasar el mouse. Efectos de posprocesamiento: RealityViews ahora admite efectos de posprocesamiento, lo que te permite agregar efectos personalizados como bloom usando Metal Performance Shaders, CIFilter o sombreadores personalizados en iOS, iPadOS, macOS y tvOS.

Developer Footer

  • Videos
  • WWDC25
  • Novedades de RealityKit
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines