Wie man Apples RealityKit zur Spieleentwicklung nutzt

Augmented Reality eignet sich auch für Games. Mit einem Praxisbeispiel zeigen wir, wie man mit Apples Code-Frameworks RealityKit ein kleines Spiel programmiert.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen
,
Lesezeit: 16 Min.
Von
  • Gero Gerber
Inhaltsverzeichnis

Ziel des Spiels ist es, einen virtuellen Basketball in einem ebenso wenig realen Korb zu versenken, den wir auf dem Boden in der echten Umgebung platzieren. Als Spielekonsole kommt ein iPhone oder iPad zum Einsatz, im Idealfall eines mit LiDAR-Scanner. Ob hochkant oder quer gehalten, bestimmt der Spieler. Mit einem Tap auf den Screen wirft der Spieler den Ball in Blickrichtung der Kamera. Trifft er den Korb, bestätigt ein Post-Effekt auf dem Bildschirm den Erfolg. Nach einer Weile verschwinden die herumliegenden Bälle mithilfe von Custom Shaders. Den vollständigen Code stellen wir Ihnen zum Download bereit.

Mehr zu iPhone und iOS 16

Da SwiftUI in der App-Entwicklung zunehmend an Bedeutung gewinnt, nutzen wir dieses Framework auch für das Spiel. Der von RealityKit bereitgestellte ARView ist zwar noch nicht SwiftUI-ready; Sie können aber UIKit-Views in SwiftUI einbinden.

kurz & knapp

  • Eigene Surface Shader ermöglichen die Anpassung von Materialien.
  • Mit Geometry Modifier kann man Vertices mittels Metal Shader auf der GPU modifizieren.
  • Eigene Post-Processing-Effekte lassen sich via Core Image, Metal Performance Shaders oder SpriteKit implementieren.
  • Anhand eigener Systeme im Entity Component System (ECS) kann man die Spiellogik in separate Module unterteilen.
struct GameView: UIViewRepresentable {
    ...
    func makeUIView(context: Context) -> ARView {
        ...
        let view = ARView()
        view.environment.sceneUnderstanding.options.insert([.physics, .occlusion, .receivesLighting])
        ...
        coachingOverlay.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        coachingOverlay.session = view.session
        coachingOverlay.goal = .horizontalPlane
        view.addSubview(coachingOverlay)

        return view
      }
    }

Mit UIViewRepresentable existiert ein Protokoll, das UIKit-Views bei Bedarf kapselt, um sie in SwiftUI nutzen zu können. Das Struct GameView implementiert das Protokoll UIViewRepresentable und erzeugt den ARView in der Methode makeUIView(context:). Nach dem Erzeugen wird die ARView-Instanz entsprechend konfiguriert und anschließend als Return-Value zurückgegeben. Zusätzlich existiert in GameView die Klasse Coordinator, die Änderungen am ARView nach SwiftUI weiterleitet. Der Coordinator implementiert häufig auch Delegate-Protokolle des gekapselten UIViews und konfiguriert den erzeugten ARView dahingehend, dass die mit dem (falls vorhandenen) LiDAR-Scanner erkannte reale Umgebung sowohl physikalisch mit den virtuellen Objekten interagiert als auch virtuelle Objekte via Occlusion verdeckt. Zusätzlich erhält der ARView noch einen ARCoachingOverlayView Subview, der den Benutzer mit On-Screen-Hinweisen dabei unterstützt, eine horizontale Ebene in der Umgebung zu erkennen.