GameplayKit 名前空間
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。
クラス
GKAgent |
GKComponent移動でき、目標を持つ 。 |
GKAgent2D |
GKAgent移動が 2 つのディメンションに制限されている 。 |
GKAgent3D |
目標に対応する 3D エージェント。 |
GKAgentDelegate |
の状態と外部制約、目標、および表現の同期に関連するメソッドを GKAgent 提供するデリゲート オブジェクト。 |
GKAgentDelegate_Extensions |
プロトコルからGKAgentDelegateのすべてのメソッドをIGKAgentDelegateサポートする インターフェイスへの拡張メソッド。 |
GKARC4RandomSource |
ARC4 アルゴリズムに基づくランダム ジェネレーター。 多くの場合、良い選択です。 |
GKBehavior |
オブジェクトと重みの GKGoal コレクション。一緒に、まとまりのあるゲームの動作を定義します。 |
GKBillowNoiseSource |
GKCoherentNoiseSource出力が Perlin ノイズに似ていますが、より丸みのある特徴を持つ 。 |
GKCheckerboardNoiseSource |
GKNoiseSource出力が黒と白の四角形を交互に構成する 。 |
GKCircleObstacle |
GKObstacle場所と半径によって定義される 。 |
GKCoherentNoiseSource |
GKNoiseSource出力がスムーズかつ継続的に変化する 。 |
GKComponent |
Entity-Component アーキテクチャ内のオブジェクトを含む GKAgent コンポーネントの抽象スーパークラス (解説を参照)。 |
GKComponentSystem<TComponent> |
特定の GKComponent サブタイプのオブジェクトを保持し、それらを定期的に更新します。 |
GKCompositeBehavior |
他GKBehaviorのGKBehaviorオブジェクトを結合する 。 |
GKConstantNoiseSource |
GKNoiseSource出力が 1 つの値である 。 |
GKCylindersNoiseSource |
GKNoiseSource出力が同心円状の円柱シェルで構成される 。 木目のテクスチャに適しています。 |
GKDecisionNode |
内の GKDecisionTree要素。 |
GKDecisionTree |
質問、回答、アクションのツリー。 |
GKEntity |
Entity-Component アーキテクチャ内の多数の GKComponent オブジェクトで構成される型。 |
GKGameModel |
を使用して最適化できる方法でゲームプレイについて GKMinMaxStrategist説明します。 |
GKGameModel_Extensions |
プロトコルからGKGameModelのすべてのメソッドをIGKGameModelサポートする インターフェイスへの拡張メソッド。 |
GKGameModelPlayer_Extensions |
プロトコルからIGKGameModelPlayerのすべてのメソッドをIGKGameModelPlayerサポートする インターフェイスへの拡張メソッド。 |
GKGaussianDistribution |
GKRandomDistributionガウス (正規) 分布を生成する 。 |
GKGoal |
1 つ以上 GKAgent のオブジェクトの移動に影響します。 |
GKGraph |
ナビゲーションとパスファインディングに使用される数学的グラフ。 |
GKGraphNode |
内 GKGraphのノードの基本クラス。 |
GKGraphNode2D |
GKGraphNode 2D 浮動小数点位置を含む 。 |
GKGraphNode3D |
GKGraphNode 3 次元空間に存在する 。 |
GKGridGraph |
GKGraph移動が整数グリッドに制限されている 。 |
GKGridGraphNode |
GKGraphNode 2D 整数位置を含む 。 |
GKHybridStrategist |
IGKStrategist MinMax を介したモンテカルロ ツリー検索とローカル検索を組み合わせた 。 |
GKLinearCongruentialRandomSource |
高速 GKRandomSourceです。 下位ビットは、 GKARC4RandomSourceよりもランダムではありません。 |
GKMersenneTwisterRandomSource |
非常に良いランダム性を持つ低速 GKRandomSource 。 |
GKMeshGraph<NodeType> |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
GKMinMaxStrategist |
潜在的なゲーム状態を評価し、スコアを付け、相手を最小限に抑えながら独自のスコアを最大化しようとするゲーム AI。 |
GKMonteCarloStrategist |
決定論的な時間で最適に近いソリューションに到達するストラテジスト。 |
GKNoise |
GKNoiseSourceを使用して、無限の 3 次元ノイズ フィールドを手続き的に生成します。 |
GKNoiseMap |
オブジェクトの無限の 3 次元ノイズ フィールドから GKNoise 、有限の 2 次元の四角形をスライスします。 |
GKNoiseSource |
手続き型ノイズ ジェネレーターの抽象基本クラス。 |
GKNSPredicateRule |
GKRuleアクションを呼び出す必要があるかどうかを判断するために をNSPredicate使用する 。 |
GKObstacle |
オブジェクトが走査できない領域を GKAgent 表す抽象クラス。 |
GKObstacleGraph |
GKGraph表現用のスペースを満たすネットワークを生成し、スムーズで非効率的なパスを可能にする 。 |
GKObstacleGraph<NodeType> |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
GKOctree<ElementType> |
3 次元要素を効率的に整理するデータ構造。 |
GKOctreeNode |
内の GKOctree<ElementType>ノード。 オブジェクトが追加および削除されると、 によって GKOctree<ElementType> 自動的に管理されます。 |
GKPath |
の後に続くことができる 2D 多角形パスを GKAgent保持します。 |
GKPerlinNoiseSource |
GKCoherentNoiseSource改善された Perlin ノイズを生成する 。 |
GKPolygonObstacle |
GKObstacle任意に複雑な図形を持つ 。 |
GKQuadTree |
オブジェクトを 2 次元空間で効率的に整理するデータ構造。 |
GKQuadTreeNode |
四角形のノード。 |
GKRandomDistribution |
確率分布を定義します。 このクラスは、サブクラス化してGKShuffledDistribution異なる可能性を提供する一方GKGaussianDistributionで、均一な分布 (すべての値が等しい可能性が高い) を定義します。 |
GKRandomSource |
ゲームに適した擬似乱数ジェネレーターの基底クラス。 暗号化またはセキュリティ上の目的には使用しないでください。 |
GKRidgedNoiseSource |
GKCoherentNoiseSource出力が Perlin ノイズに似ていますが、境界が鋭い 。 |
GKRTree<ElementType> |
2 次元空間に配置されたオブジェクトを効率的に検索するためのデータ構造。 |
GKRule |
内の不連続ルール GKRuleSystemを表す述語とアクションを構成する 1 つの要素。 |
GKRuleSystem |
オブジェクトの GKRule コレクションを保持し、必要に応じてアクティブ化します。 |
GKScene |
GameplayKit オブジェクトを SpriteKit SKSceneに関連付けます。 |
GKSCNNodeComponent |
GKComponentでSCNNode動作する 。 |
GKShuffledDistribution |
GKRandomDistribution類似する値のシーケンスを作成する方法でコレクションをシャッフルする (ホット/コールド スジを最小限に抑える)。 |
GKSKNodeComponent |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
GKSphereObstacle |
GKObstacle通過不可能な球面ボリュームである 。 |
GKSpheresNoiseSource |
GKNoiseSource出力が同心円シェルで構成される 。 木目のテクスチャに適しています。 |
GKState |
内の不連続状態 GKStateMachineを表す抽象クラス。 |
GKStateMachine |
オブジェクトを GKState 保持し、それらの間の遷移を管理します。 |
GKVoronoiNoiseSource |
GKNoiseSource出力が、シード ポイントを囲むセルにスペースを分割する 。 結晶性テクスチャに適しています。 |
NSArray_GameplayKit |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
SCNNode_GameplayKit |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
SKNode_GameplayKit |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
構造体
GKBox |
軸揃えの四角形の 3 次元ボックス。 |
GKQuad |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
GKTriangle |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
インターフェイス
IGKAgentDelegate |
プロトコル GKAgentDelegateの必要なメソッド (存在する場合) を表すインターフェイス。 |
IGKGameModel |
現在のゲームの状態。 と組み合わせて GKMinMaxStrategist特に便利です。 |
IGKGameModelPlayer |
ゲームの一意に識別されたプレーヤー。 開発者は を実装 GetPlayerId(IGKGameModelPlayer)する必要があります。 |
IGKGameModelUpdate |
有効なゲームの移動。 有効な を有効な IGKGameModel 後続の状態に移行するために必要な最小限のデータ。 |
IGKRandom |
GameplayKit 擬似乱数ジェネレーターのインターフェイス。 |
IGKSceneRootNodeType |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
IGKStrategist |
ゲームストラテジスト (AI) のインターフェイス。 |
列挙型
GKMeshGraphTriangulationMode |
でノードを生成する方法のオプションを GKMeshGraph<NodeType>保持します。 |
GKRTreeSplitStrategy |
GameplayKit 名前空間は、パスファインディング、ルール エンジン、AI の相手など、ゲームをプレイする高度なメカニズムのクラスを提供します。 |
注釈
iOS 9 で導入された GameplayKit には、パスファインディング、ルール エンジン (あいまいとクラシックの両方)、事前構築済みの AI 相手などの高度なゲームプレイメカニズム用の GKMinMaxStrategistクラスが用意されています。
AI の相手
1928年にジョン・フォン・ノイマンによって最初に述べられたミニマックス定理は、有限の戦略を持つ2人のゼロサムゲームに、現在のプレーヤーの期待値を同時に最大化し、相手プレーヤーの期待値を最小限に抑える最適なプレイ(またはプレイ)があることを保持しています。 言い換えると、このようなゲームでは、"ベストムーブ"があります(もちろん、最良の動きであっても、ゲームの状態によっては損失や同点につながる可能性があります)。
GameplayKit は、minimax アルゴリズムをその GKMinMaxStrategist クラスと関連クラス (特に GKGameModel) に実装します。 GKMinMaxStrategistは、メモリを効率的に使用し、ターミナル ノードで検索ツリーを解析する minimax アルゴリズムの最適化されたバージョンですが、開発者はアルゴリズムにコストがかかることに注意する必要があります。minimax アルゴリズムの時間効率は、 b
はO(b^m)
単一の先読み "ply" の状態の数であり、m
検索される plies の数です (P:MonoTouch>GameplayKit.GKMinMaxStrategist.MaxLookAheadDepth)。 アルゴリズムの空間効率は です O(m)
。
minimax 定理は、Nim や Tic-Tac-Toe などの単純なものから、チェスや Go などの複雑なゲームまで、非常に多くのゲームに適用されます。 しかし、チェスやゴーなどのゲームは非常に多くの可能性のあるゲーム状態とプリを持っているので、最適な動きを計算する費用はすぐに天文学になります。 このような場合でも、 を GKMinMaxStrategist 使用して数百または数千の移動を評価し、開発者が特定のゲーム状態の強度または弱点の推定を正確にプログラムできる場合は、強い相手を生成します。
を GKMinMaxStrategist 開発者がサブクラス化する必要はありません。 代わりに、開発者は 3 つのインターフェイスを実装し、 に GKMinMaxStrategist渡します。
クラス | 目的 |
---|---|
IGKGameModel | 開発者は、ゲームをモデル化するためにこのインターフェイスを実装し、それが現在の状態です。 たとえば、ボード ゲームでは、これは通常、ボードとすべての部分とアクティブなプレーヤーへの参照になります。 さらに、 と共GKMinMaxStrategistに使用する場合、このクラスは、潜在的な移動 (*) を記述する関数を実装し、必要性 (IsWin、、IsLossGetScore) の観点から評価する必要があります。 |
IGKGameModelUpdate | このクラスは、ゲームの "移動" について説明し、現在の状態と有効な新しい状態の間を IGKGameModel 遷移するのに十分な情報を含みます。 このクラスの何千ものインスタンスが によって GKMinMaxStrategist必要になる可能性があるため、開発者はそれを軽量にするように注意する必要があります。 |
IGKGameModelPlayer | は GKMinMaxStrategist 、プレイヤーを区別するために M:GameplayKit.IGKGameModelPlayer.GetPlayerID*) の値に依存します。 |
の GKMinMaxStrategist キー メソッドは です GetBestMove。 このメソッドが呼び出されると、次の一連の呼び出しが発生します。
最初に IGKGameModelPlayer 、オブジェクトが取得されます。 次に、現在のゲームの状態から開始し、層の深さが より MaxLookAheadDepth小さい間、現在の状態から可能な法的な移動のセットは M:GameplayKit.GKMinMaxStrategist.GetGameModelUpdates* によって返されます。 次に、これらの各移動について、 が新しいメモリを割り当てる必要 GKMinMaxStrategist がある場合があります。割り当てられる場合は、 M:GameplayKit.GKMinMaxStrategist.Copy* が呼び出されます。 次に、 によって管理されている多くのGKGameModelオブジェクトの 1 つでGKMinMaxStrategist、 と * のSetGameModel呼び出しを使用して、潜在的な移動が実行されます。
GKMinMaxStrategist次に、 を呼び出し、最初に、IsWinおよび を呼び出して、潜在的な各移動を評価しますIsLoss。 これらのメソッドのいずれかが を返す true
場合、ゲームの GKMinMaxStrategist 状態はターミナル ノードとしてマークされ、後でさらに調査されることはありません。 ただし、どちらのメソッドも を返 true
していない場合は、 M:GameplayKit.GKGameModel_Extensions.Score* が呼び出されます。
開発者は、(-16777216) と (+16777216) MaxScore の間MinScoreの値を返すために、M:GameplayKit.GKGameModel_Extensions.Score* メソッドを記述する必要があります。 値が大きいほど、 に適したゲームの状態を表します GetActivePlayer。 ゲーム ツリー全体を検索IsWinIsLossMaxLookAheadDepthtrue
できる単純なゲームでは、* メソッドは単に 0 を返すことができます。これは、 が勝敗の動きに基づいて最適な動きを計算できるためGKMinMaxStrategistです。 ただし、これは非常に簡単なゲームの場合にのみ当てはまる可能性が高く、一般に、パフォーマンスの高い M:GameplayKit.GKGameModel_Updates.Score* 関数を作成するには、ゲームプレイとプログラミングの両方の専門知識が必要です。 プログラミングの観点から、 M:GameplayKit.GKGameModel_Updates.Score* メソッドは、ゲーム ツリーの検索中に何度も呼び出され、効率的で正確である必要があります。
開発者は、 と GKMinMaxStrategist の多くのコピーとIGKGameModel多数IGKGameModelUpdateのIGKGameModelPlayerオブジェクトを割り当てることがあることに注意する必要があります。 開発者は、参照、等値ではなく値に依存し、グローバルまたは静的な状態を操作するこれらのオブジェクトに関しては注意を払う必要があります。