UnrealEngine/覚書/入力を取ってキャラを動かす



入力を取得してキャラを動かしたい

ステージはできたので実際にキャラクターを登場させて動かしてみたいなぁと思ったが、ここからどうしていいか分からないという事態に。
マニュアルの海を彷徨った挙句、ようやく求めていたっぽい物に辿り着いた?

キャラクター設定

入力取りたいだけなのになぜかまずキャラクターの作成について細かく実施していく模様。
後で役に立つことを信じてやってみよう。

アニメーションブループリントの作成

早速作成するアニメーションブループリントだが、何の為の物かこの時点では全く分からない。
ブループリントとはテキストでやる代わりにGUIでプログラムを作成できる仕組みっぽいので、これ自体が一つのプログラムだと思っていいのだろうか?
アニメーションブループリントというからには、アニメーションを制御するためのプログラムということで認識しておこう。
親クラスの指定はプログラムだからなのだろうが、ターゲットスケルトンは何のために指定するのかよく分からない。
参照するのか、参照されるのか、コピーするのかすらよく分からない。
とりあえず先に進もう。

キャラクターブループリントの作成

キャラクタークラスを継承したブループリントクラスを作成。
キャラクター以外にもアクタ、ポーン、ゲームモードなどの親クラスが存在するようだが、これは恐らく、何らかのオブジェクトを制御するためのプログラムを作成するということだろう。
そしてその何らかのオブジェクトというのが、アクタとして制御したい物なのかポーンとして制御したい物なのかゲームモードとして制御したい物なのかということか。
今回はこのブループリントを使用してキャラクターを制御するので、キャラクターを継承するのだろう。
しかしアクタはともかくとして、ポーンとかゲームモードというのもいまいちよく分からない・・・
分からないけどとにかく先に進もう。

キャラクターブループリントの編集

編集を開始すると、恐らくキャラクターのモデルが表示されるであろうウィンドウと、様々なパラメーターが表示されている。
ひょっとしてブループリントとは「オブジェクトを制御するためのプログラム」ではなく、「オブジェクトそのもの」を表現する物なのだろうか?
・・・
とりあえず指定されている通りに設定してみたところ、やはりキャラクターブループリントはキャラクターそのものを表現している物のように見えた。
そしてコンテンツブラウザ内で作成したブループリントは、Unityで言うPrefabの様な扱いということになりそうだ。

Unityではキャラクターのオブジェクトを配置して、そのオブジェクトを制御するためのプログラムを追加するという方法をとっていたが、UnrealEngineではオブジェクトそのものをブループリントで表し、その制御自体もブループリントの機能の一つでしかないのだろう。

入力とゲームモード

入力取りたいだけなのにゲームモードってなんなんですか・・・

ゲームモードブループリントの作成

またしてもこの時点ではよく分からないが、ゲームモードとはゲームのルールを設定しておくためのオブジェクトらしい。
ゲームルールというのは抽象的な物ではあるが、それらを管理するためのオブジェクトを生成する、ということなのだろうか?
もしなんでもかんでもオブジェクトを生成して管理するというやり方をするのがUnrealEngineの仕組みだとすれば、一見分かりにくそうに見えて実は分かりやすいのかもしれない。

入力の設定

ここでようやく入力の設定に入る。
ここではUnityと同様、単に入力を抽象化するだけのようなのであまり迷う所は無い。
強いて言うならUnityより直感的に設定できるので分かりやすい。

デフォルトゲームモードの設定

デフォルトのゲームモードを先程作成したMyGameに設定するようだが、ここではまだその意味を見出すことはできない。
ここでデフォルトゲームモードを設定しなかったら何が読み込まれることになるんでしょうかね。

キャラクター設定の完了

キャラクター設定が完了するらしい。

インプットイベントの追加

そしてここでようやくインプットイベントの取得を設定。
つまりブループリント作ってインプットイベントを作成すれば入力が取れるってことですね。
ゲームモードを作って設定したのは単に標準でポップするプレイヤーキャラを設定するためだけってことだったんですね。
これでやりたいことの8割方は理解したが、得るものもありそうなのでこのまま手順を進めて行こう。

ネットワークを作る

指示されている通りイベントグラフを作るも、リストからイベントを追加する際に、リスト内のどこに何のイベントがあるか分からない。
ただし、今回は指示される通りにイベントを追加するだけなので、どこにあるかは分からなくても名前が分かっていれば検索で見付けることができる。
ただし指示された通りにやっているがために、どのイベントが何の処理をするのか非常に理解しにくい。

というかここまでやって分かってきたのは、圧倒的にテンプレートを使ってやるべきということ。
多分相当にこのビジュアルスクリプティングを理解していない限り一から作るのはやめた方が良さそう。

ブレンドスペースの作成

最早入力を取ってキャラを移動させるという所からは外れることになるが、せっかくなのでこのまま進める。

ブレンドスペースの作成

ブレンドスペースとはアニメーションのブレンドを可能にするアセットのようだが、ところでアセットとは何のことなのだろう・・・

ブレンドスペースの設定

XAxisLabelをDirectionに設定する、YAxisLabelをSpeedに設定するというのが早くも分からないが、気にしないで先に進む。
XAxisRangeを-180~180に設定する、YAxisRangeを0~200に設定する。ここもよく分からないが先に進む。
で、実際のアニメーションを割り当てるわけか。
なんか分かってきた。XAxisLabelやYAxisLabelはまさしくただのラベルで、識別する以外何の意味も持たない。
単に、何の変化に対してアニメーションがブレンドされるのかが分かりやすくなるというだけだ。
ここではDirection(移動方向)とSpeed(速度)によってブレンドされるアニメーションを決めようということ。
そしてAxisDivisionsの数によって、それらの値に対して何段階のアニメーション変化を起こせるかが決まるということだ。(←これは何言ってるか自分でもよく分からない)

とりあえずブレンドのやり方は分かったので、これを実際にどうやってゲーム内に反映させるかは次回以降なんでしょうな。

Animation ブループリント - Idle ステートと Walk ステート

このセクションでは、プレイヤーがゲーム内で取るアクションに合わせて、どのアニメーションを再生するかを判断する Animation ブループリント を設定します。
ということなので予想通り、ブレンドしたアニメーションをどうやってゲーム内に反映させるかってことなのだろう。

変数の作成

とりあえず変数を作成するも、Defaultとかいうのの中に既にSpeedとかDirectionとかがあって邪魔だ。
別階層でも同一名の変数を作成することはできない模様。

イベントグラフの編集

相変わらずこれは訳が分からない。
このままやっていって、果たしてこれを使いこなせるようになるのだろうか・・・
とりあえず言われた通り作成。

アニムグラフの編集

アニムグラフを編集しようとしたところ、アニムグラフが無い。
どこを探しても無い。
なんかおかしいと思い新規で別のアニメーションブループリントを作成してみるとそっちにはアニムグラフができている。
そしてこちらには変数の所にDefaultとかいう階層も無い。
いつの間にこんなことになったのかよく分からないが、新しく作成し直してそちらで進めることにする。
キャラクターブループリントのアニメーションブループリントの指定も忘れずに変更しておく。

ステートグラフの設定

そしてここでようやくステートグラフの設定となる。具体的なアニメーションの遷移はここで設定し、アニメーションの遷移に使う変数の値の変更はイベントグラフで行うということか。
Unityの場合は変数の値はスクリプト側から行う必要があったが、これに関してはスクリプト側でやるよりアニメーションコントローラー側で行うUnrealEngineの方が責任が明確で分かりやすいかもしれない。

ステートマシンの設定

単一アニメーションならアセットブラウザからそのままドロップ。
ブレンドスペースなら更にその中でFinal Animation Poseを決定するグラフを作るってことですね。

トランシジョングラフの設定

どういう条件だったら矢印を遷移して良いかグラフで設定する。

Animationブループリント - Crouch ステート

Animation ブループリント - Jog ステート

このへんは一緒ですかね。

Animation ブループリント - Jump ステート

これも大体同じだけど一部違うようだ。

アニムグラフの編集

Jump_From_Jog から Jog_BS への遷移の所で TimeRemaining for 'Jump_From_Jog' というノードを使用する。
これが直感的に良く分からない。
Jump_From_Jogアニメーションの残り時間が0.1秒以下ならJog_BSに遷移させるってことかな?
これって実際地面から離れててもアニメーションが終わりそうなら遷移してしまうってこと?
ジャンプの強さが強い場合は、全然着地しないのにアニメーションが切り替わっちゃったりするのだろうか?
よく分からないけど設定しておいて先に進む。
そしてWalk_BSや、Jump_From_standの方でも同様。
本当にこれでいいのかよく分からない。後でジャンプの強さを変更して見てみよう。

Animation ブループリント - Prone ステート


アニムグラフの編集

ここでは持続時間(実際には継続時間)の設定を変更する。なんのためにやるのかよく分からない・・・

そしてまたここでも TimeRemaining for 'Stand_To_Prone'が0.1以下の条件を追加する。
ただ、こっちは伏せる動作が完了しそうになるまでは遷移させないということだからまあ分かる。

Prone_To_StandからIdle_Rifle_Hipの所も同様。

アニメーションの設定変更

アニメーション自体の速度とかも変えられるんですね。

動作確認

で、完了したわけだが
  • ジャンプのアニメーションが全く反映されていない
  • 立ち状態から伏せボタンを素早く2回押すと伏せ遷移アニメーションが延々再生される
    3回目を押すと伏せた状態まで行って正常になる
    伏せ状態から伏せボタンを押す場合も同様
  • しゃがみ移動がなんかガクガク
    いちいち立とうとしている?
  • 後退時にちょっと左を向いて歩いている
という状態。
さてデバッグしてみよう。





  • 最終更新:2016-02-12 18:55:04

このWIKIを編集するにはパスワード入力が必要です

認証パスワード