MUGENメモ ( フォント環境:MS ゴシック 標準 サイズ10 )  AIの為の 格闘ゲームの基本に関する話 byADI 19:53 2009/09/16 基本記述おわり 21:13 2009/09/16 修正 12:27 2009/09/22 AIの為の 〜 16:00 2009/12/20 低空ダッシュ 22:12 2010/05/25  ※私は、格闘ゲームなどアクションが苦手です。  AIは人の手によって作られるものである。  格闘ゲームの基本を知らなければ、強いAIはなかなか作れるものではない。  これらは主に性能だけの圧倒ができない場合。 ■格闘ゲーム  技、ガード、移動と言ったものを駆使し、   相手からのダメージを最小限に、相手へダメージを最大限にする。  それが勝つための基本です。  その為、不用意に攻撃を受けない、無闇な攻撃をしないと言った事が必要になる。  格闘ゲームの得意な人は、得てしてそうした「意識」を持っている。  そしてどうすればそれが可能かを、考え実行できる。  その中で私が分かり、AIに考慮可能なものを書き記す。  もう一度言うが格闘ゲームの「基本」であり、それをするのならば   「分かっていないと恥ずかしい事」と言っていいようなことである。 ( ※私にも分かってないときがありました。 ) ■基本  まずキャラクターの性能を知る事。  技性能・コンボ性能、リーチ・隙・判定の強弱、   特殊システムや移動速度、移動による硬直などの隙。  反撃方法や、ゲージ回収率とゲージ技の性能比など。  これは、自分でキャラを一通り操作して調べるといい。  むしろ、自分で操作せずにAIを作るのは難しい。  選択肢は技や動作の数だけあるが、どれが使えるかは使ってみることが一番早い。  できればその過程で、動作などの設計図を作ってしまえれば作業がはかどるだろう。  そして、動作の中私が重要視すべきだと思う3つを上げると   「前後の隙」「ガード・反撃」「立ち回り」  そこに判定の強さや、ゲージ効率などを合わせて考えるといいだろう。 ■前後の隙  前の隙、発生までのフレーム数もそうだが、   後の隙の「反撃確定・確定反撃」も考慮すべき点である。 ( 大雑把に言うと、反撃が確定する、確定した反撃(をする・とる)、と言う意味 )    近接状態であれば、小足などに代表される「リーチは短いが素早い攻撃」  素早さはあるが、そういった技の優れている部分は「後の隙の無さ」   「ガードされても反撃確定がない」という点で、反撃確定が無いどころか、   当たれば大抵キャンセルが可能で小足×n→必殺技などもできる所。  例えば昇竜技は地上ガードで反撃確定であり、対地は直撃が確定していなければ禁物の技。 ( 内容を説明すると、大抵の昇竜は発生後着地まで無防備、かつ着地にも硬直があり、   直撃なら相手の立て直しまで隙も無いが、ガードはあればガードヒットの硬直だけ。   対空であればヒットバックの距離次第だが、対地ならばほぼ近接で隙だらけになる。 )  そういったガードでの反撃確定は、攻撃動作として重大な問題である為、   「考えない」という選択肢は無い。( 私考えないでダメだったから。 )  いくら中距離から届く攻撃であっても隙が大きい場合、乱用は禁物である。  反撃確定を調べる時は、相手キャラの-3,ステートに、 [State -3, Test Guard to Attack] Type = ChangeState Value = *最短攻撃or暴れ攻撃* TriggerAll = Ctrl Trigger1 = PrevStateNo = [130,159];ガード後 Trigger2 = PrevStateNo = [5000,5299];くらい後  と入力し、トレーニングメニューでGuardModeをAutoにする。  そして、自身は調べる攻撃の後、ガードをしようとすることで確認が可能。 ( ただ、相手キャラによって異なることはあるが。 )  ガードが出来ない、間に合わない場合は「ガードされたら反撃確定」だと分かる。  勿論キャンセルが可能であれば、それを使った場合なども調べること。 ( まあキャンセル可能な技の方は、反撃確定でもないことが多いけど。 ) ■ガード・反撃  ガードと反撃と書いてあるが、防御系統全てのことである。  少なくとも、防御=ガードではなく、無敵技も防御であるし、攻撃も防御の1つ、   攻撃に当たらないよう移動し、立ち回りで回避することも防御手段の一種である。  ただし、トリガーには細かい情報を知るが無い為、   大部分を予測によって補わなければならないが。  まず、ガードはあくまで簡易的な防御手段に過ぎない。  例えば「対攻撃にガードを最優先にしているキャラ」と、   「ガード崩しの優秀なキャラ」とでは、ガード優先のキャラに不利が付く。  相手の立ち屈みでガードを立ち屈みとしても、   立ち下段や屈み中段などの技で崩される危険性を持つ。  そうした相手を考慮した場合、ガード最優先は避けるべき、と言える。 ( 敵のタイプを学習装置で判定する、とかはとりあえず無し。 )  また魅せの観点になるが、ガード最優先かつガード崩しが苦手同士の場合、   ガード合戦になり試合が長引く、と言った状態になってしまう。  ガード以外にも、高性能無敵技持ち同士の場合試合が長引く、などがある。  接戦ともとれるため、それを好む人もいるかもしれないが、   最悪決着のつかない事が多くなり、出来ることならば避けるべきである。 ( 魅せを考慮するならば、だが。 )  無敵回避技は、一切隙が無いような高性能技の場合は上記参照、   また隙がある場合も乱用は不要な隙を生みかねない為、注意。  多用していい技であることは、少ないと、思う。  反撃に用いる技は発生が早い・判定が強い・発生に無敵などだが、   こちらは実際に試合して何が反撃に使えるか知っておく、   もしくはテストキャラに攻撃を出させてその反撃を行う、など。  それよりも重要なのは「いつ反撃をさせるか」になる。  例えば「対攻撃」の反応は、発生の早さや判定の強さ、無敵など技の性能が顕著になり、   極めて高性能であったり、スーパーアーマーでもなければ、心もとない。 ( またそうした技があっても、ゲージ技であったりする。 )  「ガード後」や「くらい後」と言ったものも、   敵のガード後・くらい後を狙う暴れ狩りを考慮すると、下手に手を出せない。  と、ネガティブな例ばかり出しているが、攻撃は最大の防御。  判定や速さの性能が良いならば、積極的に出すほうがいい。  特に対攻撃の場合、相手はガードができない為、性能によっては効果的、   ガード後やくらい後も確定反撃を逃さないためには重要な行動である。  そのあたりの見極めは、個々人の調整である。  Common1.cnsファイルにある動作を基準(キャラごとに変更が無いか確認) StateNo = [0,119] ;基本動作 StateNo = [130,159] ;ガード(120,159) StateNo = [5000,5099] ;くらい動作 StateNo = [5100,5199] ;倒れ動作 StateNo = [5200,5299] ;空中体勢立て直し・他  基本動作以外は、Prevでそれらの動作直後に行わせるような条件に。  基本動作は(EnemyNear,StateNo!=[0,119])で基本動作中でない、と確認する、など。 (基本動作・くらい動作他は[0,199]と[5000,5999]を用いている、と考えて差し支えない。)  これらの比重はキャラによって異なるが、相手キャラを限らない場合、   もしくは相手キャラを限ることのできない場合、様々な相手を想定すべきである。  特に、AIにおいて大きな違いが生まれる箇所は「対飛び道具」で、   まず「飛び道具にガードすらしない」ことは避けるべきである。  例えばMoveType=A(相手攻撃動作中)に反応を限定している場合、   攻撃動作中でない時、飛び道具への反応が鈍り、もしくは反応すらしない。  さらに言うと、飛び道具を正確に参照する方法が容易でない為、厄介である。  もし飛び道具を牽制技としてしか見なさず、軽視している場合、   「飛び道具に特化したキャラクター」に対しては、極端な不利が付きかねないだろう。  相手キャラを選べない場合、そうした考慮は盛り込むべきである。 ( 例として、(P2MoveType!=A&&InGuardDist)は、MoveType!=AだとGuardDistが出ない為、   対複数戦でもない限り[大体]飛び道具と考えられる、など。 ) ■立ち回り  攻撃動作を含めた「移動動作」をここでは取り上げる。  砕いて説明するが「自分が得意とする状態を作り維持する」のが立ち回りの基本である。  基本的な格闘ゲームであれば、相手が限定される為、情報も少なく、   「相手の苦手な状態」に追い込むことも含まれるが、そうはいかない。  よって、「自分が得意とする状態を作り維持する」ことを念頭に説明する。  ではどうすればいいか、と言っても答えは単純である。  「歩き・ダッシュ・ジャンプ」や攻撃動作によって、得意な状態を維持しようとすること。  その為にはまず「苦手な状態」にならないよう気をつけることである。  簡単なものでは、壁際が苦手ならばあまり下がらない、など。  飛び道具特化が近接戦闘ではいけないし、近接特化が遠距離にいても戦いようが無い、   迎撃専門がガン攻めしてもいいことはないというように、基本的な考え方は間合いと待ち。  自分の攻撃方法の少ない所にいるよりも、多い所の方が戦いやすいといった具合である。  例えば、遠距離特化であれば突進技や飛び込みを控える、   近距離特化なら突進技や飛び込み等を駆使して近づく、と言ったこと。  また立ち回りによる回避、攻撃動作を見てバックダッシュやジャンプを行う、というもの。  バックダッシュに無敵があったり、素早い場合、   また空中動作が俊敏である場合などに、とても有効となる為、覚えておくこと。  無敵回避技が無い場合も、こうした回避は重要である。  攻撃の届かないほどの遠距離の場合などで、使わせることになるだろう。  ライフが少なくなった場合に回避を優先させることで、   削りダメージを最小限に抑える、と言った考え方もできる。  勿論その時は、逃げに徹して遠距離から慎重に攻める、と言うのもある。 ( ガン逃げが出来なかったり、試合が長引いたりしかねないが。 )  それ以外にも、回避が出来れば回避で確定反撃を取ることが出来る為、   攻めの観点から見ても、考慮する価値はある。  が、正確にギリギリで避けたり、と言った事が可能であるかは別である。 ▼立ち回りによる攻撃の応用  例えば飛び道具をまくと同時に近づいての波状攻撃。  相手の頭上で技を出しガード方向を混乱させるめくりなど。  移動→慣性移動攻撃や置き→移動→攻撃は、攻撃の幅を広げる為に必須である。  上記の例以外には、飛び込み(前ジャンプ)から空中攻撃→着地下段も、   空中攻撃のヒット硬直、着地硬直の長さによっては武器になりうる。  勿論、飛び込みは相手の対空が高性能だと使いにくいが、無いよりはマシ。  動きによって技がどのように使えるかを調べるのは基本である。 ( 私はよく知らなかった。 )  >ジャンプキャンセル低空ダッシュ  キャラによっては低空ダッシュが可能で、   技もジャンプキャンセルが可能な場合もある。  その場合、固め攻撃>Jc>低da>J固め攻撃>着地固め>>Jc、   ということが可能なこともありうるが、   手操作では極めて難易度の高い技なので、気づかないことも。  まず低空ダッシュはジャンプからの奇襲中段にも使え、   ジャンプキャンセルは不利フレームを無くせる可能性がある為、   何が出来るのかを知っておくと攻撃コンボの幅がぐんと広がる。 ●知識として  格闘ゲームの知識も少ない場合、   格闘ゲームの用語集などを見るといいかもしれません。  用語となっているような技術は汎用性が高くAIにおいても参考になります。  ただしそうした技術は「対人(Anti-Player)」の性質が強く、   「対AI(Anti-AI)」の性質に欠けていることもあるため、   実際に使わせて試してみて確かめましょう。  代表例としては   「立ち(空中)中段or屈み下段の択一攻撃をAIは確実にガードできる」   「低空中段をAIは確実にガードできる(低空ダッシュ・のぼり中段など)」   という中下段周り。  またガード表裏の「めくり」はシステム上ガードできない場合はありますが、   対策をしていれば完璧にガードできてしまいます。