WWDC 2017 の SceneKit サンプル Fox 2 を調べる その28
今回は GameController クラスのイニシャライズ関数を見てゆく。
コードのほとんどがこれまで紹介した関数を呼ぶ形となっている。
init(scnView: SCNView)
各プラットフォームで SCNView を受け取り、それに変更を加えてゆく。
init(scnView: SCNView) { super.init() ... }
中身を見てゆく
sceneRenderer
sceneRenderer に scnView を渡し、SCNSceneRenderer のデリゲートを設定し、 FPS など詳細を表示する showsStatistics はコメントアウトされている。
sceneRenderer = scnView sceneRenderer!.delegate = self //scnView.showsStatistics = true
最前面に表示されるオーバーレイに Overlay クラスへ画面サイズと controller 用に自身を渡す。
overlay = Overlay(size: scnView.bounds.size, controller: self) scnView.overlaySKScene = overlay
scene.scn をこれを使用する SCNView のシーンへ渡す。
self.scene = SCNScene(named: "Art.scnassets/scene.scn")
物理シミュレーション、コリジョン、キャラクター設定、敵キャラ、仲間、動く橋、パーティクルの設定を行う。
setupPhysics() setupCollisions() setupCharacter() setupEnemies() addFriends(3) setupPlatforms() setupParticleSystem()
ライトの設定。
ディレクショナルライトのノードを取得し、512x512 のシャドウマップを作成し、shadowCascade の設定をする。
let light = scene!.rootNode.childNode(withName: "DirectLight", recursively: true)!.light light!.shadowCascadeCount = 3 light!.shadowMapSize = CGSize(width: CGFloat(512), height: CGFloat(512)) light!.maximumShadowDistance = 20 light!.shadowCascadeSplittingFactor = 0.5
カメラとゲームコントローラーの設定をする
setupCamera() setupGameController()
このファイルで設定されている configureRenderingQuality 関数を呼ぶ。
tvOS での動作時で表示のクオリティを下げている。
configureRenderingQuality(scnView)
sceneRenderer のシーンにここで設定されているシーンを渡すことで、
プラットフォーム別の SCNView 側の scene と GameController の scene が同じものとなる。
sceneRenderer!.scene = self.scene
オーディオの設定、このシーンのカメラである cameraNode を SCNView の pointOfView に適応。
scene の physicsWorld の contactDelegate を設定している。
setupAudio() sceneRenderer!.pointOfView = self.cameraNode sceneRenderer!.scene!.physicsWorld.contactDelegate = self
次回は GameController クラスのその他の関数を見てゆく。