2024年11月1,2週目に無料だった(執筆時まだ間に合う)アセットの紹介です。
とりあえずもらったものの、使いかたわからなくて放置中の方は意外と多いんじゃないかなと、 初心者向けにそこそこ丁寧に使い方を解説してみました。
2024年11月19日までの無料アセットは下記の3つです。
- Military Airport
- Hyper Outliner and Symbol System V2
- FOREST ANIMALS PACK ←本記事
ゲット方法
前々回記事で説明しています。
間に合わなかった人も、更新されたアセットをゲットしましょう。
導入方法
前回と同じなので図だけ貼っておきます。
素材確認
動物ごとにフォルダ分けされていて、MapsにOverviewレベルがあります。
Wolfだけカラバリ3種(ΦωΦ)フフフ…
キャラクター化(NPC化)
ベアーのスケルタルメッシュ SK_Bear からアニメーションブループリントを作成します
名前は ABP_Bear とします。(ABP: Animation BluePrint)
別途、コンテンツドロワー上の何もないところ右クリックからブループリントクラスを作ります
親クラスは「キャラクター」とし、「BP_Bear」と名付けます
本体見た目
BP_Bearをダブルクリックから編集画面を開き、コンポーネントツリーで「Mesh」を選択します
詳細欄で、メッシュに「SK_Bear」Animクラスに「ABP_Bear」を選択します
ABP_Bearを選ぶと選択欄にはABP_Bear_Cと表記されますが、そういう仕様です。
キャラクター本体がカプセルの中心でメッシュは地面が原点になっているのでずらして合わせましょう
またカプセル中央の水色の矢印が前なのでメッシュの向きもそれに合わせて90度回します
カプセルが小さいので、ほかのキャラクターや障害物と重なるのを防ぎたい場合は調整しましょう。
アニメーション
ABP_Bearを開きます
ひとまず適当なアニメーションシーケンスをドラッグアンドドロップして、アニメーションを出力につないでコンパイルしましょう
Restをつなぐとプレビューも寝ましたね。
つないだアニメーションが再生されるのが基本です
これを条件分岐で切り替えたり、時には首だけ、足だけ別なアニメーションに置き換えたり、混ぜ合わせたりができる仕組みが作れます。
また、ほかのブループリントから一部を上書き再生できるモンタージュ再生という仕組みもあり、
これらを組み合わせてゲーム中のキャラクターの動きを表現します。
条件で何を出すか切り替えるStateMachineをつなぎました。また割り込みモンタージュ再生用のデフォルトスロットというノードを間に挟んでおきます。
サードパーソンテンプレートには Foot IK という足を地面の凹凸に合わせてくっつけるように調整(混ぜ合わせる)ノードが挟まっています
StateMachineの中身は、Entryという初期状態を決める端子しかありません。
線をひっぱりだして「ステート」を作り、さらにそこから線をひっぱりもうひとつ「ステート」を作りましょう2つめのステートから1つめに戻る線もつなぎましょう
名前はなんでもよいですが、Idle(アイドリング状態)、Walk(徒歩状態)としました
ステートの中に、さきほどは直接出力につないだ、アニメーションシーケンスをつなぎます
これでIdle状態のときはRestアニメーションが再生されます
Walk側にもBear_Walkのアニメーションを設定します(※図は割愛)
あとは状態を切り替える条件設定をすれば完成です
が、アニメーションBPはキャラクター本体のことをまだ知らないので、キャラクターが何をしたいのか情報を受け取る必要があります。
SandBoxキャラクターを参考に、イベントグラフに次のようなロジックを組みます
これで Is Move フラグが、オンのときは動いている=歩いている、オフのときは止まっているという条件判定ができます。
本体の行動
BP_Bearのイベントグラフを編集します
「add custom event」で「Walk」イベントを作り、BeginPlayから呼びます
これでゲーム開始直後にWalkイベントが実行されます
Walkイベント内は次のような処理を組みます
AI MoveTo は、人工知能により最適なルートを計算して目標に向かって歩かせるノードです
歩かせるポーン(キャラクターはポーン)、目的(座標 または アクター)、ゴールにたどり着いたとみなす誤差半径などで設定します
GetRandomReachablePointInRadiusは、基点から指定した半径の球内の任意の点のうち、いま時点計算上到達可能(離島や囲われて到達不可能「ではない」地点)をランダムに採択してくれるノードです
ゴールしたらDelayで5秒間待機する間、キャラクター本体が動かないので、ABP側でIsMoveがfalseとなりIdle状態のアニメに切り替わります
ナビメッシュ設置
AIに行動してよい範囲を伝えるためのコンポーネント、ナビメッシュバウンズボリュームを設置します
「P」キーをおしてナビメッシュの可視化を行い、行動させたい箇所の地面が緑色に塗られた状態になるよう位置やサイズを調整しましょう
これで基本的な準備はOKで、キャラクターが動きだします
パラメタ調整
が、カクカクしてぎこちないスケート状態のアニメーションとなり、また、歩行速度が速すぎる印象です
このへんを調整していきましょう
キャラクターが方向転換すると一瞬で向きが変わる問題
キャラクター本体(BP_Bearのコンポーネントツリー最上部 Self)の「Use Control Rotation Yaw」にデフォルトではチェックがついていますが、
これはプレイヤー操作用で、AI制御時は邪魔なのでオフにしましょう
また、Character Movementコンポーネントの「Orient Rotation to Movement」(とそのうえも)にチェックをつけましょう
これで進行方向に向かってキャラクターの向きが自動的に回ります
後ずさりや横歩きさせたいときはつけません
(イベントで切り替えられます)
また、大柄の熊キャラクターが1秒で1回転できるのは少し速すぎるので、180度くらいまで減らすとよさそうでした(お好みで)
スケート(歩行しない)問題
Delayを消して歩行だけにするとわかりやすいですが、まったくアニメーション再生できていないのではなく、1回だけ再生して最後のフレームの状態で止まっています
ループ再生を有効にしましょう
休憩のアニメーションも同様です(動きがすくないので気づきにくいかも)
おわりに
AI制御の初級はビヘイビアツリーを使わなくてもできる簡単なものからが良いかと思います。
よければ関連記事もご覧ください。
コメント