Corgi EngineのNPCのAIを細かく砕く
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

Corgi EngineのNPCのAIを細かく砕く

2019-07-15 11:41

    アセットリリースで気分転換、ゲームづくりのためにCorgi Engineの解析を再開しました。

    最低限のシューティングが成立する直前てとこまでは進んだ…

    が、それはおいといて、

    コーギーエンジンで検索しても、プレイヤーキャラの動かし方まではぼちぼちあっても
    NPCのAIの制御に関する記事が出てこないんですよね…

    先人たちはそこから先に進めず頓挫したんかと勘ぐってしまうほど困りましたが、
    自力でなんとなくわかったので忘備。
    あまりに記事が見つからないので逆にEnty有料記事にできないわい…


    AIのサンプルシーンはCorgiEngine/Demo/Retro/RetroAIにあります。

    AI Brainスクリプト…これがNPCのAI部分というのはわかる。


    そして各行動を実装・制御してると思しきスクリプト群



    これで普段左右に動いてパトロールし、プレイヤーが視界に入ると銃を撃ってくるが、大して追ってこず(段差を超えない)、視界から外れるとまたパトロールに戻るという行動を取るのですが、どういう原理で行動を組み合わせてるのかが長らくわからなかった。



    AIの実装方法(推測)

    1.NPCにはすでにHealthやcorgi controllerなどコア部分がアタッチされてるとして、
    そこにAI系コンポーネントを必要な分だけアタッチします。

    AI WalkとかAI ShootとかはBrainを必要とせずそれ単独でキャラを動かせます(左右に反復するか機械的に弾を撃つ程度)が、これらではなくて

    必須なのはAI Brain、それと、AI Action xxxxAI Decision xxxxx
    AI Action(行動)とAI Decision(決定)と名前のついた二種類は、AI Brainと組み合わせないと機能しないものです。
    わからなかったらAI Action 、AI Decision とつくスクリプト全部アタッチでもいいんじゃないかなーいくら入れようがAI Brainに設定しなければ全く機能しないはず

    2.キャラにさせたい行動の数だけAI Brainにステートを作る


    State Namesにステート名…パトロール、エイム、シュートとか。自分で命名します
    ActionsにAI Actionスクリプト名を割り当てます。

    空欄にAIのスクリプトを割り振る…
    この、スクリプトを割り振るというのが超わかりませんでした。いつもの空欄右の○ポタンは役に立たず、名前を手動で記入できるでもない。
    コンポーネントとしてアタッチしたスクリプトの名前欄をD&Dすることでしか割り当てられないというね。

    ステートは+で増やせます


    3.TansitionsにAI Decisionを割り当てて、各ステートをつなぐ
    Tansitionsの欄、Decisionには
    行動分岐させるためのAI Decisionスクリプト名と、遷移先のステート名を入れます。
    AI Decisionは、判定条件が成立するとTrueを返すやつですね(例外あり)



    Detect Target Line

    NPCの向いてる向き、射線上にターゲット(プレイヤー)がいるか判定 扇上の判定もできる

    Detect Target Radius

    半径内にターゲットがいるか判定

    Distance To Target

    (ターゲット発見後)、ターゲットとの距離が設定数値に達したか判定
    Strictly Greater Thanは、>=とか<のこと

    Health
    自分の体力が一定数になったか判定

    Time In State

    設定した時間だけ今の行動を維持して待つ(待ち時間はMin-Maxの間でランダムに)

    最初のステートのActionsに割り振られた行動をしながらTransitionsで判定、
    Decisionの条件を満たさない間はその行動を取り続け、
    条件が成立したら指定のステートに遷って別のアクションしながら別の判定…

    こんなのを組み合わせて、パトロール中にプレイヤーを見たら足を止めて数秒間射撃、とか
    体力が減ったら武器を切り替えて発狂攻撃、とかできるという理屈のようです。

    理論上は。

    自分でやったら、赤エラー

    何がいけないってんだ
    AIにはそれぞれ見えない制約があるのか?
    (どうも特に飛行移動に関するAIがいかんみたい)



    まあ、アニメーションでないと無理な伝統的編隊飛行して弾をばらまくシューティングやりたいんで、めんどいAIとか弾撃つ行動以外ひとまずいらないんだけど
    こんなんいらんやろというスクリプトを取り除いたら何かが参照して連動してるのか、動かなくなるのでしかたなく入れたまま、という現状。
    すべてのスクリプトの解析を果たさないとまともに動かせないのか。




    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。