Search code examples
scenekitswiftuixcode11

SwiftUI - how to add a Scenekit Scene


How can I add a Scenekit Scene to a SwiftUI view?

I tried the following Hello World, using the standard Ship Scene example...

import SwiftUI
import SceneKit


struct SwiftUIView : View {
    var body: some View {

       ship()

        Text("hello World")


    }

But it didn't work: enter image description here


Solution

  • You don't need use UIViewRepresentable anymore. Here's an update code for SwiftUI

    import SwiftUI
    import SceneKit
    
    struct ContentView: View {
        var scene: SCNScene? {
            SCNScene(named: "Models.scnassets/Avatar.scn")
        }
    
        var cameraNode: SCNNode? {
            let cameraNode = SCNNode()
            cameraNode.camera = SCNCamera()
            cameraNode.position = SCNVector3(x: 0, y: 0, z: 2)
            return cameraNode
        }
    
        var body: some View {
            SceneView(
                scene: scene,
                pointOfView: cameraNode,
                options: [
                    .allowsCameraControl,
                    .autoenablesDefaultLighting,
                    .temporalAntialiasingEnabled
                ]
            )
        }
    }
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }