2016/6/24
朝比奈むかで
!注意点
 既出の技術体系以前の開発事例なので、
近年の技術とは違う実装なのをご了承下さい
 わりと駆け足で進めますので、詳細について
DM・Twitter等で聞いてください
アジェンダ
 ゲームAIとは?
 2D対戦格闘のゲームAI事例
 3DアクションRPGのゲームAI事例
 まとめ
ゲームAIとは?
ゲームAIとは?
 ”AI“(Artificial Intelligence)とは?
人工的にコンピュータ上などで人間と同様の知能を実現
させようという試み、或いはそのための一連の基礎技術
 “ゲームAI”とは?
コンピュータゲームにおいてノンプレイヤーキャラ(NPC)
の振る舞いに知能があるかのように錯覚を生み出す技法
ゲームAIで重視されていること
 “ゲームAI”で重視されていること
1.ユーザーから見て知性が感じられるか?
2.ゲームプレイが心地よいか?
3.対戦形式でのプレイで人間側が公平に感じるか?
※チートは許容されているが、公平さを保てる調整は必要
 実際にはこれらをどう実現するの?
→企画意図をどう落とし込むか?の事例を2つ紹介
1.2D対戦格闘ゲームの事例
2.3DアクションRPGゲームの事例
2D対戦格闘のゲームAI事例
2D対戦格闘ゲームとは?
 2D対戦格闘ゲームとは?
アクションゲームの一種でプレイヤーが操作するキャラクターが
CPU、別のプレイヤーの操作するキャラクターと1対1で戦うゲーム
敵キャラクターを殴る蹴るするゲーム
 操作系
8方向キー(レバー)、4〜6ボタンを使用
レバーでキャラ移動・コマンド入力、ボタンで攻撃
 代表タイトル
ストリートファイターシリーズ、ギルティギアシリーズ
キングオブファイターシリーズ
事例紹介(タイトル)
 タイトル“A“(AC)
対戦格闘ゲーム(1on1、PvP/PvE)
→純粋なAI開発込みで約4ヶ月
 タイトル”B“(GBA)
対戦格闘ゲーム(3on3、PvP/PvE)
→純粋なAI開発込みで約3ヶ月
企画側の要望(1)
 企画側の要望
・プレイヤーに攻略のある遊びをさせたい
→CPU戦の攻略で、ユーザープレイ成長や対人戦のトレーニング
・どのキャラクターでもユーザーに勝つAIにしたい
→おもてなしは必要だが、難易度調整やバランスもあり、勝てるAIが前提
・キャラクターの特徴が表現できるような調整したい
→プレイヤー操作での攻撃性能は同じなので強さアピールになる
 これまた難易度の高い注文…
2D格闘ゲームのキャラにできること
 状態遷移はおおまかには以下のようになる
※厳密にはもっと分解度が高くて複雑
待機
移動
しゃがみ
ジャンプ
攻撃
SP攻撃
防御
ゲームAIの実装(2D対戦格闘ゲーム編)
 Finite State Machine(FSM)を使用する
→キャラクター動作と状態遷移が一致している
 2つの思考タイプで行動を決定
→”思考型”AIと“反射型”AI、2つの思考で行動を決定
 AIの行動は定義データで構成
→企画側での制御要望に合わせる為、学習型AIは断念
FSMによる状態遷移で行動
 キャラクター操作による状態は確定している
→キャラ特性はあるが、基本行動が同じ
 ユーザビリティの特性により状態遷移が自動である
→“攻撃”が完了すると、“待機”に自動的に戻る等
 ユーザーとAIの入力を共通化可能
→AIでの行動実行は、ユーザと同じ入力形式で共通化可能
強キック
ボタン
強キック
コマンド
攻撃状態へ
内容:強キック
ユーザー入力 AI入力
2つの思考タイプで行動を確定(1)
(1)“思考型”AIによる行動を確定
→ゲームを構成する要素を考慮した中期的に行動を思考する
 ゲーム中の状況を見て、行動の選択を検討する
→相手との体力差、残り時間、勝率におる行動の検討
 キャラ毎による行動分岐の導入
→キャラ特性として “固有の行動”の再現
→相手の状態を見て行動を変化させる
※右図は必殺技を必殺技でカウンターする行動を選択
2つの思考タイプで行動を確定(2)
(2)“反射型”AIによる危険度を基準に行動の確定
→自分と相手の状態を比較し、危険度から瞬間的な思考をする
 “危険度”は共通の基準で思考を行う
→短期間に自分に不利益な状況を察知する
→逆に相手の攻撃間合いでなければ無反応
やべぇ当たる!
当たらんし平気やな
危険度:高い 危険度:低い
2つの思考タイプで行動を確定(2)
(2)“反射型”AIによる危険度を基準に行動の確定
→“反射型”AIが必要とされる状況の一例
ユーザー AI ユーザー AI
必殺技を発射! 思考型AI:
ジャンプで回避!
回避状態・継続
飛び込まれた!
どうするか?
2つの思考タイプで行動を確定(2)
(2)“反射型”AIによる危険度を基準に行動の確定
→“反射型”AIが必要とされる状況の一例
ユーザー AI
飛び込まれた!
どうするか?
ユーザー AI
回避状態・継続
2つの思考タイプで行動を確定(2)
(2)“反射型”AIによる危険度を基準に行動の確定
→“反射型”AIが必要とされる状況の一例
ユーザー AI
飛び込まれた!
どうするか?
ユーザー AI
回避状態・継続
ユーザー選択肢
1.攻撃・SP攻撃
2.移動・防御
3.何もしない
2つの思考タイプで行動を確定(2)
(2)“反射型”AIによる危険度を基準に行動の確定
→“反射型”AIが必要とされる状況の一例
ユーザー AI
飛び込まれた!
どうするか?
ユーザー AI
回避状態・継続 回避状態継続中で
次の瞬間の対応が
間に合わない!?
ユーザー選択肢
1.攻撃・SP攻撃
2.移動・防御
3.何もしない
2つの思考タイプで行動を確定(2)
(2)“反射型”AIによる危険度を基準に行動の確定
→“反射型”AIが必要とされる状況の一例
ユーザー AI
飛び込まれた!
どうするか?
ユーザー AI
回避状態・継続 回避状態継続中で
次の瞬間の対応が
間に合わない!?
このような場合に
“反射型”AIで
選択肢が増やせるユーザー選択肢
1.攻撃・SP攻撃
2.移動・防御
3.何もしない
2つの思考タイプで行動を確定(2)
(2)“反射型”AIによる危険度を基準に行動の確定
→“反射型”AIが必要とされる状況の一例
ユーザー AI
飛び込まれた!
どうするか?
ユーザー AI
回避状態・継続
反射型AI:予測
1.空中防御
2.弱キック
3.何もしない
ユーザー選択肢
1.攻撃・SP攻撃
2.移動・防御
3.何もしない
2つの思考タイプで行動を確定(3)
 “思考型”AIと“反射型”AI、プレイヤーの感情に近い
→脳内プランニング達成と、プレイヤーの脊髄反射の両面
→変化し続ける状況もある程度対応が可能になる
 AIが選択するプランニングが行動を反映する
→基本は“思考型”、割り込み的に“反射型”AIが動作する
→ 実際行う行動は後述“AI行動のデータ”化にて解説
“思考型”
“反射型”
“思考型”
“反射型” “反射型”
“思考型” “思考型”
時間の流れ
AIの行動はデータで構成(1)
 “思考型”AI、“反射型”AIの行動は、パックデータ化
→プレイヤー操作のような動きはコマンド・データ化
 行動データは全キャラ共通・キャラ固有で用意
Pack1 Pack2 単体も1つ
として用意
一連の流れ
データにする
・待機状態を維持
・間合いを詰める
・ダッシュ後にバックステップ
・飛び道具を飛び道具で消す
・攻撃ヒット後に挑発をする
・遠間に牽制の技を出す
キャラ共通 キャラ固有
AIの行動はデータで構成(2)
 “思考型”“反射型”AIが判断する空間情報の作成
①自分と相手との距離を “レンジ”として認識
②相手の状態(State)を細かく分解設定する
行動情報 情報粒度
動きの状態(State) 24〜64種類
X軸方向の距離レンジ 12ー24分割
Y軸方向の距離レンジ 5ー6分割
“思考型”“反射型”も自分と相手の
位置関係と状態が判別できるようにする
AIの行動はデータで構成(3)
 “思考型”“反射型”AIが攻撃回避の予測データ作成
(実機での予測データを自動的に作成する)
→デバッグ機能として全自動の攻撃判定を行いデータ化、
データファイルはそのままバイナリィファイルへ変換。
予測データ 情報粒度
攻撃ヒットの予測 計算済みデータで保持
飛び道具ヒットの予
測
リアルタイムで計算
投げ技の間合い 計算済みデータで保持
実機の結果
をデータ化
レンジ毎に
データ化
AIの行動はデータで構成(4)
 “思考型”“反射型”AIの行動データを企画側が定義
→“思考型”AIが行動実行する為の“パックデータ”を設定する
定義1 定義2 定義3 定義4
Pack3
0
Pack1
2
Pack22 Pack44
定義1 定義2 定義3 定義4
Pack5
2
Pack5
3
Pack62 Pack63
定義1 定義2 定義3 定義4
Pack1
0
Pack1
8
Pack9 Pack4
思考するAIの全体図
 データ予測・キャラ特性を踏まえた“思考型”を中心に
行動し、“反射型”AIが判断の曖昧さを解消
“思考型” “反射型”
予測データ
ユーザー AI
空間情報
行動データ
Pack Pack
行動データ
Pack Pack
レンジ
HP 時間
ゲーム進
行
難易度攻撃範囲
キャラスペック
パラメータ
ヒットフレーム
2D対戦格闘のゲームAI・まとめ
 “思考型”“反射型”AIは企画が制御可能な仕様になった
→ “思考型”AIの挙動を理解し、データで調整可能
 “勝つAI”にする為にユーザ操作まで到達せず
→キャラによってはBOT的であるという意見も
 AIというシステムの構築を楽しめた
→学習思考を導入で改善できた事も多く、反省点が多かった
→回避したかった状況や、遊びの幅を広げられなかった等々
3DアクションRPGのゲームAI
3DアクションRPGとは?
 3DアクションRPGゲームとは?
アクションゲームの一種でプレイヤーが操作するキャラクターが
高さ・奥行きのある立体的なマップ(レベル)を自由に動きまわり、
遭遇する敵を倒したり、マップのギミックを解き明かすゲーム。
探索&成長要素のあるアクションゲーム
 代表タイトル
ゼルダの伝説シリーズ、Demon’s Soulシリーズ、
アサシンズクリードシリーズ等
事例紹介(タイトル)
 タイトル“C”(PS2/2002)
フィールド系アクションRPG
 プレイヤーは地上を自由に駆けまわり、
両手に別々の装備と攻撃が可能。
また乗り物にまたがり、空と海にも行ける
 エネミー24種類(色違いなし)
→開発期間約4ヶ月
実装目標と企画側の要望
 実装目標
広く高低差のあるフィールド空間(水中・空中含む)で、
PvEを実現するエネミーを実装すること
 企画側の目標
・某伝説64みたいな遊ぶをさせたい
・エネミー種類が多く、それらを組み合わせたい
・プレイヤーは違う種類の両手それぞれの装備に対応したい
 それなりに難易度の高い要望…
ゲームAIの実装(3D-ARPG編)
 カテゴリ別の状態遷移で設計
→共通となるベース状態に“地上”“空中”“水中”ごとで変化
 戦闘エリア内の特殊地形対応
→AIに必要な情報は、レベルエディタで埋め込み・作成する
 AIは2つ用意して役割分担
→“思考型AI”に加えてもう1つ用意。詳細は後ほど
カテゴリ別の思考パターン
 カテゴリ別の状態遷移で設計
→状態遷移は共通化
 各状態内での遷移の内容が変化
ダメージ
移動攻撃
待機
ダメージ
移動
ジャンプ
攻撃
防御
待機
ダメージ
飛行移動攻撃
待機
地上 空中
空中へ移動
基本
戦闘エリア内の特殊地形対応(1)
 こんな感じ地形が各所にある
→水中と地上同居、円形な地形も
戦闘エリア内の特殊地形対応(2)
 立体交差アリ、地形内別エリアが存在
→右図のような感じ
 コリジョン検索の手法で対処したいが
レベル配置OBJのあって不可能
 レベルエディタには配置情報があるので
コリジョン+OBJのデータをエリア情報
として取り込む
※右図は上側エリアの俯瞰図
床
壁 水
床
床
壁 壁
天井
戦闘エリア
床水
エリアの境界
OBJの参照IDや
物体の大きさも含める
AIは2つ用意して役割分担(1)
 当初は“思考型”AIのみで進めていた
→カテゴリごとに機能分離し、単体での挙動は問題はなかった
 実際に戦闘エリアに配置して動かすと問題が…
→同時攻撃や連携はあまり上手ではなく、処理も重い
 配置や組み合わせだけでは対応できないとクレーム
→企画からAI同士の連携や処理速度改善が来た
→自分でもプレイ、動きには問題ないが違和感がある
 何故こうなったか?を企画と一緒に分析
“思考型AI”単体での問題点
 共通ロジックがパフォーマンスを低下させた
→エネミーが共通情報を独自に集めるx配置数(これが重い)
 各AI同士を連携手続きの難易度が高い
→連携時に互いに参照する情報が多くなる傾向があった
 プレイヤーを任意で攻撃し、頭の悪いBOTに見える
→3体以上が同時攻撃とか印象が悪く、見た目もよくない
 他のエネミー担当と相談し、機能分散した別AIを用意
→“司令型AI”というものを作ろう、ということに
“司令型AI”とは?
 “司令型AI”とは?
・パフォーマンス改善の為、共通処理を代行
・AI間の情報伝達や意思疎通のパイプ役
・ゲーム画面に表示なし、戦闘エリアごとに存在
 各AIの状態を報告、行動の調整を行う
→一斉攻撃する敵の数を調整
→移動先衝突、団子状態を回避す
 ex)プレイヤーの装備変更の通知
→状態遷移に影響する情報をエネミーに通知
司令型AI
思考型AI 思考型AI 思考型AI
自分の状態や
連携状況を報告
司令型AI
プレイヤー情報、
共通処理の代行、
AI連携の確認と指示
AIは2つ用意して役割分担(2)
 各状態ごと処理が簡潔に
→プレイヤー状態変化した時に1回で十分
→AIが知りたい情報は“司令型”AIに問い合わせるだけで済む
 エリア内でのAI同士の連携・調停が簡単に
→地上・空中のAIがどの順番に攻撃・回避する
→一度に何体まで同時に攻撃可能
 状態内の行動が個性的になった
ex)プレイヤー装備によっては逃げまわる
ex)仲間が攻撃している時に専用モーションを再生
 あれ?AIがプレイヤーの脅威じゃなくない?
司令型AI
思考型AI 思考型AI
司令型AI プレイヤー
連携の同期や
タイミング指示
調停済みで
実行するだけ
“勝つ必要ないAI”について
 相手に勝つ必要がない=“おもてなしAI”
→気持よく倒されるエネミーである
→プレイヤーがミスすると、ダメージになる
 エネミー行動表現の補助、特徴を活かすAIづくり
→”思考型AI“は個々行動を上手く表現
→”司令型AI“は戦闘中のAIの立ち回りや緩急づけ
 AIとして未熟な部分も課題に
→“司令型”と“思考型”遷移の調整が難しかった
→カメラ外から攻撃を抑制が難しい等の課題
3D ARPGゲームのAI・まとめ
 今回紹介した”司令型AI“は他プロジェクトでも活躍
→パフォーマンスや情報管理手法は流用しやすかった
 立体交差のある3DゲームのAIは大変勉強になった
→後にも先にも、このプロジェクトだけだった
 課題として思考の分散、学習を検討する契機になった
→学習思考を導入で改善できた事も多く、反省点が多かった
→回避したかった状況や、遊びの幅を広げられなかった等々
今回のまとめ
 比較のため2つの開発タイトルのAIを紹介
→“ユーザーに勝つためのAI”、“勝たないAI”
 企画意図を反映し、調整可能なAI制作は面白い
→最近の技術を取り込めば、もっとシンプルにできそう
 皆さんが”AI”づくりの足掛かりになれば幸いです
→”AI“って何種類か作り方がわかり、敷居が低くなる筈…
ゲームAI・実装事例の紹介

ゲームAI・実装事例の紹介

Editor's Notes

  • #5 まず最初に、ユーザビリティについてお話します
  • #6 
  • #7 ※おさらい ・AIとは? 人工的にコンピュータ上などで人間と同様の知能を実現させようという試み、或いはそのための一連の基礎技術 ゲームAI ・
  • #8 まず最初に、ユーザビリティについてお話します
  • #9 と、その前に2D格闘ゲームについて簡単に説明しておきたいと思います。
  • #10 
  • #11 キャラクターで勝つ
  • #13 
  • #14 
  • #15 
  • #16 
  • #17 
  • #18 
  • #19 
  • #20 
  • #21 
  • #22 
  • #23 
  • #24 
  • #25 
  • #26 
  • #27 
  • #28 
  • #29 
  • #30 まず最初に、ユーザビリティについてお話します
  • #31 と、その前に2D格闘ゲームについて簡単に説明しておきたいと思います。
  • #32 
  • #33 
  • #34 
  • #35 
  • #36 
  • #37 
  • #38 
  • #39 
  • #40 
  • #41 
  • #42 
  • #43