WWDC 2017 の SceneKit サンプル Fox 2 を調べる その8
Fox 2 の概要のおさらい
iOS、tvOS、macOS をサポートしており、MFi 認証が行われているゲームコントローラーをサポート。全体の振る舞いは Shared フォルダの GameController.swift で行われている。
実機で試せていないが、多分 Apple TV はゲームコントローラーしかサポートしていない可能性がある。
また、iOS のみヴァーチャルパッドを使用している。
シーンの構成について
シーンの構成は大きく分けると以下のものになっている
- プレイヤーキャラクターの Max
- 敵キャラクター2体
- 宝石や鍵など取得できるアイテム
- 床や岩場、動く橋、溶岩や溶岩などのパーティクル、仲間が閉じ込められている小屋などの背景
- 遠方のパーティクルや背景画像
- 各カメラとライト
- シーンに対してオーバーレイ表示される UI
以下コードに関する背景、キャラクター、アイテム、カメラについて見てゆく。
背景
前回リソースを見た際に、あったが本来の背景のジオメトリとは別に collision.scn でジオメトリで Physics Body が設定されており、物理シミュレーションの衝突判定を行なっている。
collision.scn には COLL_lava という名のノードがあり、こちらに Max が接触すると音声と尻尾が燃えるアニメーションが再生される。
また、背景にはノードの透明度が 0 となっている物理判定のジオメトリが小屋の鍵穴付近、カメラの視点が変わる各場所に設定されている。
プレイヤーキャラクター Max
歩く、ジャンプ、攻撃、止まった状態でアニメーションが設定されており、攻撃時はその状態を伝える命令がある。
上記のように、溶岩に触れると音声と尻尾が燃えるアニメーション(地上に戻ると消える)、特定の場所に行くと見えないジオメトリの Physics Body により、衝突判定とカメラが変更せれ視点が切り替わったり、アイテムの取得や仲間を助けるなど行われる。
敵に対しての攻撃は、物理シミュレーションではなく GameplayKit 機能内で互いの距離と攻撃状態で調べている。
敵キャラクター
2対おり、Max に近づくものと、遠ざかるものがいる。
「特定の動き、彷徨う、Max を追いかける・遠ざかる」複数の状態を繰り返す、攻撃を受けた時に音や爆発のアニメーションなど行う。 敵の振る舞いは GameplayKit の機能機能内で行われている。
アイテム
宝石と仲間が閉じ込められている小屋の鍵の2つがあり、共に Physics Body が設定されている。
宝石に接触すると Max の動作が止まり、鍵の出現とパーティクル表示、カメラの視点変更し元のカメラに戻る処理、宝石の消滅、UI での宝石の取得表示と内部での値加算処理が行われる。
鍵に接触すると、取得時のパーティクル表示、UI での鍵の取得表示と内部での値加算処理がされる。
カメラ
いくつかのカメラがシーンファイルで設定されており、GameController.swift で振る舞いを決めている。
Max が背景のシーンファイルにあるカメラ視点変更用の Physics Body に触れると対応した設定のカメラへ変更され視点が変わるようになっている。
画像のような透明なジオメトリに接触するとカメラ視点が変わる
GameplayKit の概要や UI 関連に関しては後ほど見ていこうと思う。
次回は、プロジェクト内での Swift ファイルの概要を見てゆく。