WWDC 2017 の SceneKit サンプル Fox 2 を調べる その10
GameplayKit フレームワークとは何か?
多分、iOS SDK でもっともマイナーなフレームワーク。
以下、公式の一部を抜粋してザックリ翻訳。
GameplayKit は、iOS、OS X、および tvOS でゲームを構築するための基本的なツールやその技術の集まりです。GameplayKit は、最小限の労力でモジュラー型のスケーラブルなゲームアーキテクチャを設計するためのツールを提供します。
書かれているように、SceneKit や他フレームワークとは異なり、Swift Standard Library や Foundation のような機能を持ったクラスの集まり。
そのため、ゲーム用と説明には書かれているが、このフレームワーク自体 Metal、OpenGL(ES)、SpriteKit、SceneKit だけではなく、普通のアプリの中でも使用することができる。
GameplayKit にはどのような機能があるのか
WWDC 2016 のプレゼン資料から拝借
- Ramdom Source
- Procedural Generation
- Spatial Partitioning
- Pathfinding
- Agents
- Entities and Components
- State Machines
- Game AI
- Rule System
Ramdom Source
乱数に関する機能。
GKRandomSource は、乱数を生成し、ARC4、LinearCongruential、MersenneTwister などのアルゴリズムを使用したサブクラスではさらに複雑なものを使用できる。
また、GKRandomDistribution では一様な分布、ガウス分布、同じ値が出ない乱数を生成する。
Procedural Generation
パーリンノイズ、ボロノイノイズ、チェッカーボードなどのノイズが生成できる機能。
これらを使用したり、パラメーターを合成することで、テクスチャや2Dゲームのマップの生成などに使用することができる。
ノイズに対してパラメーターを掛け合わすとその結果に合わせたテクスチャーが作成できる。
Spatial Partitioning
SpriteKit で 2D 平面の上で指定したノードで区画分けができる機能。
キャラクターをグルーピングしている範囲を調べることができる。
Pathfinding
経路探索を行つ機能。
障害物を設定することでそれに考慮した経路探索をすることも可能。
画像では自由な経路探索を行うが、ボンバーマンのようなグリッドで進むようなものも可能。
Agents
目的のものをゴールと設定し、振る舞いを設定することで、自動的にゴールへ近づいたり、離れたり、周囲をさまよったりするエージェントを作成する機能。
パスで動きを決めたり、複数設定、複数設定時の重みなど設定可能。
Entities and Components
キャクターなど Entity に設定し、振る舞いなどを Component で作成、Component System 上で振る舞いの管理をするという機能。 Entity に対して Component 設定するものであるため、振る舞いの流用ができる。
State Machines
現在の状態と状態遷移、状態遷移の方法を管理する。
Game AI
Minmax と Monte Carlo での思考方法、Decision Tree を使用した2つの分岐の設定と分岐の学習とその結果を返す AI のような機能。
Core ML の補助や AI のカスタム設定が可能。
Core ML の図解で出てくる GameplayKit はこれに相当する。
Minmax: オセロなどルールが決まっているもの使用できる。
Monte Carlo: 選択肢をランダムでサンプリングされ、間違った際は順路を戻り、最適な順路を探す。
複雑な選択肢から推測しなければいけないゲームなどに使用できる。
Decision Tree: 敵キャラクターの行動の流れなどの決定木を作成できる。 いくつかのパラメータを渡し、その最適解の決定木を自動的に生成することも可能。
Rule System
パラメーターを使用してファジーな揺れ幅のあるゲームなどのルールを作成する。
Fox 2 では Entities and Components と Agents しか使われていないが、GameplayKit ではゲームなどをつくる際に便利な機能が用意されている。
次は、Swift のコードを見てゆく。