UE5オクトラ風ゲーム制作記 24/2/02「雑魚敵のスキル選択」

はじめに

前日のはこちら

最初のはこちら


雑魚敵のスキル選択について

久々の更新ですが、なぜ更新できなかったかというと、
タイトルに提示してある問題をなかなか綺麗に実装できなかったからです。

当初は敵の動作すべてに対して様々な条件によるスキル使用の可否を設定しようと思ったのですが、スキルを使用する条件を、データテーブルで一括で設定することができなかったため頭を悩ませていました。

しかし、これはあくまで個人開発であり、膨大なボリュームのゲームを作れるわけではないので、雑魚敵の行動に関しては「乱数」を用いることにしました。
ちなみにまだ仮作成なので、必ずしもこのまま進むわけではないです。

ランダム選択の実装(ふくざつ)

画像みにくいね…ごめんなさい…

敵の情報の中からスキルの情報を抜き出す

まずはじめに、雑魚敵の持つステータスやスキルに関しては、データテーブルを用いて簡単に作れるようにしています。
そこから、敵に設定されている情報を取得し、そこからスキルの情報も取得しなければいけません。

敵の情報からスキルの情報のみを抜き出す

使用可能なスキルのみを抜き出す

そうしたら、スキルから、HP条件の有無を取得します。
(画像ではほかに様々な条件がありますが、あとから雑魚敵に関してはHPによる分岐のみに修正しました。)
そして条件を満たしていれば(または特に条件がなければ)
「使用可能なスキル」のリストに格納し、別の配列として
「スキルに設定されたレーティング(加算式)」
「スキルに設定された名前」のリストをそれぞれ用意します。
レーティングが加算の理由は後述します。

使用可能な技の情報を抜き出す処理

なお、HP条件の確認はとてもクソコードになっています。
なんとかしたいなぁ…

HP条件を満たしているかどうか確認

使用可能なスキルの中からランダムに決定する

画像さらにみにくいね…ほんとにごめんね…
まずは「スキルに設定されたレーティング(加算式)」のリストをForEachLoopで回します。
参照しているindexの前後の値を、レーティング値の合計を最大値としたランダムの値と比較します。加算式にしていたのはこのためです。

そうしてランダムの値が前後のスキルレーティングの間にある値ならば、
そのときのスキルレーティングを持つindexを取得し、別に用意しておいた「スキルに設定された名前」のリストから要素を抜き出し、
敵の情報から抜き出したスキルの中から、同じ「スキル名」を持つスキルを探し、使用スキルにセットします。

ここだけの話、画像のランダムの値は少し間違っていて、「0~Max」が出力されてしまうので、最大値を「Max-1」にした後、ランダムの値に「+1」する必要があります…

ランダム決定過程

追記

ここだけの話、画像のランダムの値は少し間違っていて、「0~Max」が出力されてしまうので、最大値を「Max-1」にした後、ランダムの値に「+1」する必要があります…

これで範囲指定できるからそんなめんどいことしなくてよかった!!

スキルレーティング(加算式)について

先ほどから言っている「スキルレーティング」について、
私はこのゲームにおいて「スキルが使用される確率(おおざっぱ)」のことを「スキルレーティング」と定義しています。
詳細は以下の通りです。

スキルレーティングの説明

画像の例を用いると、
スキル「A, B, C」のスキルレーティングをそれぞれ「1, 1, 3」とします。
これは、それぞれのスキルを「1/5, 1/5, 3/5」の確率で扱いたいことを意味しています。
その後、スキルレーティングをすべて加算し、
その合計値(加算後の最大値)をランダムの最大値とします。
例に倣えば、その最大値は「1+1+3」で「5」となります。
そうして出力されたランダムの値が、どのスキルの条件になるかを比較することで、使用するスキルが決定されます。

さいごに

リリンクとかP3Rとか発売されたからやりたいなぁ…
でも手に職もつけたいなぁ…
あと、作りたいゲームの新しい構想もでてきちゃったなぁ…
あと、自分で絵を書いてモデルを持ってこれるようになりたいなぁ…

うわーん、やりたいことが多すぎます!

この記事が気に入ったらサポートをしてみませんか?