カテゴリの最新記事

キー入力の受け取り・キャラクタの移動

キャラクターの表示はできた。じゃあ次はキャラクタの移動だ。
キー入力を受け取ったらその情報をCharacterに受け渡す。今回はPaperCharacterだが。
ほら、前に作成したBlueprintファイル、あれ。

まずはキー入力を感知するための設定を行う。
ツールバーから[編集>プロジェクト設定>エンジン>インプット]を開き、Mappingの設定を行う。
ActionMappingは単一の入力を受け取る。例えば攻撃ボタンだとかジャンプボタンだとか。
AxisMappingは軸の入力を受け取る。方向キーの入力とか。いわゆるレバー操作。
[+]を押して入力設定を追加していこう。
名前は何でもいいけど、とりあえずJumpとMove_Horizontalを追加。AxisMappingの場合、反対方向のキー入力をさせたい場合はスケールをマイナスにしておくこと。

下準備が整ったのでCharacterにキー入力を受け渡す。
CharacterのBPを開き、イベントグラフタブを選択。適当な場所で右クリックしてさっきMappingしたイベントノードを設置する。一覧から探すよりは検索してヒットさせた方が早いし楽。

WS2016-07-07_20_06_48

軸イベントを設置したら白矢印をドラッグしてAddMovementInputを追加。WorldDirectionのXに1.0を入力してScaleValueにはAxisValueを繋ぐ。
コンパイルしてテストプレイをしてみると立ちモーションのまま水平移動を始めるキャラクターが表示されるはず。歩きモーションを作ってないのでこれが正しい形。

歩きモーションが無いので作成する。
待機モーションと全く同じ方法でPaperFlipbookを使ってさっくり作る。

作ったらイベントグラフタブに戻ってきて適当な場所で右クリック。
[イベントを追加>カスタムイベントを追加]で新たなイベントを設置。アニメーションを変更するためのイベントとする。名前はなんでもいい。
AddMovementInputから白矢印を伸ばし、関数呼び出し>先ほど作ったカスタムイベントを選択。これでインプットAxis Move_Horizontalが実行される度に終端のカスタムイベント呼び出し命令までが実行される。

次はカスタムイベントの中身を記述していこう。
右クリックしてGetLastMovementInputVectorを作成、軸入力の値を取得する。
この値はMappingで設定した値を取得するため、今回の場合-1.0~1.0の値を取る。
しかし欲しい情報は”入力があったかどうか”なので、VectorLengthノードに繋いで長さだけを取得する。つまり絶対値。値は0~1.0となる。
次に条件分岐。float>floatノードを作成し、値はReturnValue>0.0としておく。Vectorが0.0より大きい場合trueを返す。今回は少しでも入力をした場合にtrueを返したいのでValue>0.0としたが、軸入力を最大まで行った場合にtrueを返したいならば、条件式をValue>=1.0にでもしておくといいだろう。

今度はカスタムイベントの白矢印を伸ばしてSetFlipbookノードを作成する。カスタムイベントが呼び出されたらSetFlipbookを実行する、という流れが出来上がる。
ではSetFlipbookでセットするFlipbookとは何か。状況によってセットしたいFlipbookが変わるので、NewFlipbookの左にある丸印をドラッグして[選択する]ノードを設置。Indexには先ほどから作成していたVectorのfloat値の結果を繋ぐ。条件がfalse/trueだったときに表示させたいFlipbookを選択すれば完成。

WS2016-07-07_21_23_10

キー入力が無いときに待機モーション、キー入力があったときに歩きモーションが再生されているか確認する。現状では左右どちらに動こうとキャラクターの向きが変わることがないが、まだ振り向き設定をしていないのでこれが正しい状態である。

キャラクターの振り向き( ゚д゚ )彡は後ほど。今日はここまで。

UE4

Posted by むいか