【UE4】建物にNPC(人物)をランダムに徘徊させる~アニメーション設定編~
前回はランダムにウロウロさせることに成功しましたが、常時歩行アニメーションをしてしまうため違和感満載でした。さて今回は動いているときに歩行をし、止まっているときは静止のアニメーションをするように設定してみましょう。
なおUE4 Mannequinさんを使用する場合など、キャラクターの速度に応じたアニメーション設定がなされているスケルタルメッシュであれば本設定は不要です。
やってみよう
アニメーションの自力設定に初挑戦という方もいると思いますが、ひとつずつ進めていきましょう。
動画版
注意:動画版だと「■キャラクターやコントローラーにアニメーションBPを適用する」の手順が抜け落ちています。ごめんなさい!
アセットの新規作成
●アニメーションブループリント
[新規作成]で[アニメーション]→[アニメーションBP]を選択。
その後[アニメーションBPを作成]ダイアログが出てきますので、
・上段の[親クラス]で[AnimInstance]を選択します。
・下段の[ターゲットスケルトン]で設定したいスケルトンを選択します。
今回は[Scanned3DPeople]の[UE4_Mannequin_Skeleton]を使っているので、パスが[/Game/Scanned3DPeoplePack/RP_Character/00_rp_master/Mannequin]のそれを選択してOKします。
●ブレンドスペース
もう1個新規作成を。[アニメーション]→[ブレンドスペース1D]です。人類の進化みたいなアイコンのやつです。
新規作成直後に[スケルトンを選択]ダイアログが出てきますので、Scanned3DPeoplePackのスケルトンを選びましょう。
ブレンドスペース1Dの設定
[ブレンドスペース1D]を開きましょう。歩行⇔静止モーションををスムーズに遷移するための設定をします。
ビュー中央下で色々設定します。0.0~100.0となっているので、0.0に静止モーションを、100.0に歩行モーションのアセットをドラッグします
真ん中にある緑のポッチを左右に移動するとブレンド具合を確認できます。
それで、この画面でもう1つやることがあって、軸の設定をします。
先ほど説明にあった中央ビューの0.0~100.0という値は、アセット情報の[Minimum Axis Value]と[Maximum Axis Value]と関連付いています。
今回は移動速度とモーションを関連付けたいので、
・[Name]はわかりやすいように[speed]としておきます。
・[Maximum Axis Value]は300くらいにしておきましょう。
アニメーションBPの設定
アニメーションブループリント「NPCAnimBP」を開きます。
[変数]でfloat型[speed]を作っておきましょう。
ノード構成は参考サイトを真似ているだけです。やっていることは人物の移動速度を変数[speed]にセットし続けるだけです。
次に[AnimGraph]なるものを開きます。左のビューにあると思います。
●AnimGraphビュー
[New State Machine(画像ではMovement)]を追加し、[最終アニメーションポーズ]と接続します。
●New State Machineビュー
次に[New State Machine(画像ではMovement)]をダブルクリックします。New State Machineの中身に移動します。
[Entry]からびよーんと伸ばして[State]を追加します。
●Stateビュー
さらに[State (画像Moving State)]をダブルクリックします。Stateの中身に移動します。
・アセットブラウザからブレンドスペース1D「NPCBlendSpace1D」をドラッグします。
・変数から[speed]をドラッグして接続します。
・そして「NPCBlendSpace1D」は[Output Animation Pose]と接続します。
キャラクターやコントローラーにアニメーションBPを適用する
さて仕上げです。もう少し。
キャラクター「NPCCharacter」を開きます。
[Animation]の[Anim Class]に自分が作成したアニメーションBP[NPCAnimBP_C]が追加されているはずですので選択します。名称は末尾に「_C」が必ず付けられています。
移動速度の調整
キャラクター「NPCCharacter」を開き、[Max Walk Speed]の設定を変えます。
このキャラクターの[Max Walk Speed]値が、[ブレンドスペース1D]の[Speed]の0~300と関連付きます。
つまり2つの値を同じにします。
値はアニメーションしながら調整しましょう。このアニメーションの場合、[Max Walk Speed]=150がよさげでした。
完成
できましたね!
さて、ここまで来たらもう1つ踏み込んでみたいですよね
ということでまさかのパート3を! やります。一定時間でスポーンして、ビル内を階をまたいで移動させてみましょう。
パート3楽しみにしてます。
街を徘徊したり、操作キャラが近づいたら挨拶するようなNPCを作りたいと考えているので、お勉強させていただいています。
じゅん さん、コメントありがとうございます。
パート3では「人物を建物内で階移動させる」をテーマに作成中でして、その次にキャラ同士が接近した際のアクションを企画したいです。
パート4あたりで「互いにぶつからず、近づいたら避ける」設定方法を予定していますがじゅんさんのやりたいことの手順とほぼ同じかと思いますので、ご紹介できればと思っています。