Apple Engine

Apple, iPhone, iOS, その周辺のことについて

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 クラスのその他の関数を見てゆく。