Apple Engine

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

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その10

f:id:x67x6fx74x6f:20180427191114p:plain

 

GameplayKit フレームワークとは何か?

多分、iOS SDK でもっともマイナーなフレームワーク。
以下、公式の一部を抜粋してザックリ翻訳。

GameplayKit は、iOS、OS X、および tvOS でゲームを構築するための基本的なツールやその技術の集まりです。GameplayKit は、最小限の労力でモジュラー型のスケーラブルなゲームアーキテクチャを設計するためのツールを提供します。

 

書かれているように、SceneKit や他フレームワークとは異なり、Swift Standard Library や Foundation のような機能を持ったクラスの集まり。
そのため、ゲーム用と説明には書かれているが、このフレームワーク自体 Metal、OpenGL(ES)、SpriteKit、SceneKit だけではなく、普通のアプリの中でも使用することができる。

 

GameplayKit にはどのような機能があるのか

WWDC 2016 のプレゼン資料から拝借

f:id:x67x6fx74x6f:20180427191206p:plain

  • 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ゲームのマップの生成などに使用することができる。

f:id:x67x6fx74x6f:20180427191359p:plain

 

ノイズに対してパラメーターを掛け合わすとその結果に合わせたテクスチャーが作成できる。

f:id:x67x6fx74x6f:20180427191306p:plain f:id:x67x6fx74x6f:20180427191317p:plain  

Spatial Partitioning

SpriteKit で 2D 平面の上で指定したノードで区画分けができる機能。
キャラクターをグルーピングしている範囲を調べることができる。

f:id:x67x6fx74x6f:20180427191529p:plain

 

Pathfinding

経路探索を行つ機能。
障害物を設定することでそれに考慮した経路探索をすることも可能。

画像では自由な経路探索を行うが、ボンバーマンのようなグリッドで進むようなものも可能。

f:id:x67x6fx74x6f:20180427191551p:plain

 

Agents

目的のものをゴールと設定し、振る舞いを設定することで、自動的にゴールへ近づいたり、離れたり、周囲をさまよったりするエージェントを作成する機能。
パスで動きを決めたり、複数設定、複数設定時の重みなど設定可能。

f:id:x67x6fx74x6f:20180427191650p:plain

 

Entities and Components

キャクターなど Entity に設定し、振る舞いなどを Component で作成、Component System 上で振る舞いの管理をするという機能。 Entity に対して Component 設定するものであるため、振る舞いの流用ができる。

f:id:x67x6fx74x6f:20180427191828p:plain

 

State Machines

現在の状態と状態遷移、状態遷移の方法を管理する。

f:id:x67x6fx74x6f:20180427191856p:plain

 

Game AI

Minmax と Monte Carlo での思考方法、Decision Tree を使用した2つの分岐の設定と分岐の学習とその結果を返す AI のような機能。
Core ML の補助や AI のカスタム設定が可能。

Core ML の図解で出てくる GameplayKit はこれに相当する。

 

Minmax: オセロなどルールが決まっているもの使用できる。

f:id:x67x6fx74x6f:20180427191936p:plain

 

Monte Carlo: 選択肢をランダムでサンプリングされ、間違った際は順路を戻り、最適な順路を探す。
複雑な選択肢から推測しなければいけないゲームなどに使用できる。

f:id:x67x6fx74x6f:20180427191946p:plain

 

Decision Tree: 敵キャラクターの行動の流れなどの決定木を作成できる。 いくつかのパラメータを渡し、その最適解の決定木を自動的に生成することも可能。

f:id:x67x6fx74x6f:20180427191952p:plain

 

Rule System

パラメーターを使用してファジーな揺れ幅のあるゲームなどのルールを作成する。

f:id:x67x6fx74x6f:20180427192613p:plain

 

Fox 2 では Entities and Components と Agents しか使われていないが、GameplayKit ではゲームなどをつくる際に便利な機能が用意されている。

次は、Swift のコードを見てゆく。