SceneKit が開発していると Scene の部分を別ファイルに分離したいときがあります。
あまり情報がなく、海外の Stack Overflow などを調べていると、Don’t subclass などと書かれている記事もありますが、サブクラス化できました。
SceneView という iOS 14 から追加されたものを使います。
SceneView – A SwiftUI view for displaying 3D SceneKit content.
https://developer.apple.com/documentation/scenekit/sceneview
実行すると以下のような黄色い球が出ます。
それではよい SceneKit 開発ライフを!
ContentView.swift
import SwiftUI
import SceneKit
struct ContentView: View {
var body: some View {
SceneView(scene: GameScene())
}
}
GameScene.swift
import SceneKit
class GameScene: SCNScene {
override init() {
super.init()
self.background.contents = UIColor.black
let testGeo = SCNSphere(radius: 1)
let testNode = SCNNode(geometry: testGeo)
testGeo.firstMaterial?.diffuse.contents = UIColor.yellow
self.rootNode.addChildNode(testNode)
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 0, 10)
self.rootNode.addChildNode(cameraNode)
let omniLight = SCNNode()
omniLight.light = SCNLight()
omniLight.light?.type = .omni
omniLight.position = SCNVector3(10, 10, 10)
self.rootNode.addChildNode(omniLight)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
SwiftUIを学ぶのにおすすめの本
SwiftUI 徹底入門
SwiftUIではじめるiPhoneアプリプログラミング入門
iOS/macOS UIフレームワーク SwiftUIプログラミング
コメント