見出し画像

【第6.5回】武器を持たせる・IKで構えさせる

マウスのチャタリングが酷くても新品を買えずにいる貧乏人が僕です。
今回は武器を持たせて構える動作だけを付けていきます。大した事はやっていないので小数点回としました。
クリスマスシーズンなので歌いながらやっていきたいと思います。


ソケット作~ろ~♪

手の平に銃を持たせるために〔ソケット〕と呼ばれるものを作ります。
名前で何となく想像できるかと思いますが、スケルタルメッシュ(可動用のボーン=骨が入ってる3D物)に別の何かをアタッチ=付け加えるためのものです。

ソケットを作るにはボーンを弄ります。

画像1

ソケットを作りたいキャラクターのボーンを開きます。今回はプレイヤーキャラクター。

左側の「ボーンツリー」から手頃なボーンを探します。手に銃器を持たせたいので、手首のボーン hand_l を選びます。右クリックで「ソケットを追加」を選ぶと新規ソケットが作成されるので、分かりやすい名前を付けておきましょう。

画像2

画像3

これで左手に武器を持たせる準備ができました。右手の hand_r にも同様にソケットを作っておきます。


銃器持たせよ~♪

キャラクターブループリントを開いて、Mesh の下に武器のメッシュコンポーネントを追加します。

画像4

今回仮で使わせて頂いたアセットはこちらになります。

銃口の向きなどが分かりやすかったので。

コンポーネントを選択し、「詳細」タブの「ソケット」→「親ソケット」にアタッチしたいソケット名を入力します。スケルトンアセットでソケットを選択していれば虫眼鏡アイコンで一発です。

画像5


変な位置に付く~よ~♪ 向きも変だよ~♪

画像を用意するのが面倒なので省略しますが、大体手首の位置に変な向きでアタッチされると思います。調整してないのでそりゃそうだという話です。

調整に関しては、YouTubeに上がっているようなスピードラーニングなんかだとコンポーネント側でやるのがほとんどですが、後々を考えるとソケット側で調整するのが良いと思います。

画像6

まず移動モードで手の平の位置に持っていきます。仮なのでだいたいで大丈夫です。次に回転モードにして、キャラクターブループリントのビューポートで向きを確認しながら方向を合わせていきます。

画像8

片手ができたらもう片方を編集しますが、詳細タブの「ソケットパラメータ」を参考に数値入力するのが良いと思います。手作業だと面倒なだけです。「Relative Location」は X に -1 を掛けた値でいけますが、「Relative Rotation」は適当に調整する必要があります。90度刻みで回してみると良いと思います。

画像7

そんなこんなで好戦的なグレーマンが完成しました。

画像9

強そう。


IKいじるの~少しイライラしちゃ~う~♪

それな。
IKとはなんぞやという話ですが、僕もよく分かってないのであまり詳しく説明しません。まあアニメーションの作り方の一つ、先端位置に合わせて繋がってる骨が勝手に動く仕組みで、決められたモーションより自由が利いてプログラマブルに作れるとだけ。
今回の場合腕を伸ばして銃を構えてほしいので、手を前方に持っていく、すると腕が伸びる。そんな人間的な挙動をイメージしてください。

まずアニメーションブループリントに手を加えます。

画像10

重要なのは〔FABRIK〕ノードです。こいつがIKでアニメーションさせるためのノード。
「Effector Transform」ピンと「Alpha」ピンはキャラクターブループリントで制御したいので変数化しておき、左右の腕で別々に用意します。

画像11

中身はこんな感じ。何言ってんのかわかんねー。
「Effector Transform Space」はワールド絶対位置か相対位置か、みたいな。今回はワールド絶対位置でやります。「Effector Target」は一応 hand_r を指定していますが「Effector Transform Space」が骨準拠でないと意味はないっぽいぽい。

ソルバの内容は重要。
「Tip Bone」が実際に動かされる先端。分かりやすく例えるなら操り人形の糸が繋がってる場所。これを hand_rとか手首にしちゃうと上手くいかないので、 index_01 つまり手の甲の中の人差し指に繋がる骨に設定。
「Root Bone」はどこが支点になるか。腕だけを動かしたかったので今回は肩関節に当たる upperarm を指定。

さて、実際機能させるにはブループリントで制御してやる必要があります。今回ご用意したのはこちら。

画像12

相変わらずクソ長なのでちょっとずつ解説しますね。

画像13

まずボタンが押しっぱなしになっているかをとります。Booleanに入れるという常套手段。

カスタムイベントに Tick を流し、ボタンが押されている間と離されたときの処理を分けます。

画像14

まずボタンが押されている場合の処理を見ましょう。

画像15

キャラクターの現在地とカメラの方向×200(数値はテキトー)で〔Make Transform〕し、その値を先ほどのアニメブループリントで作ったTransform変数に格納しておきます。
これだけでは何の変化もありません。というのもアニメブループリントで用意したもう一つの変数、Alpha 値が 0 なのでブレンドしてくれないからです。

画像16

なので Alpha 値を滑らかに変化させるためにおなじみの〔TimeLine〕ノードを使います。

画像17

中身はこんな感じ。Float 値が 0 から始まり、0.3秒 で 1.0 になります。一応曲線にしておきました。

最初の branch の False 側処理はこんな感じです。

画像18

Branchは見なかった事にして下さい。ボタンが放されたら1秒後にタイムラインを逆再生する処理です。間で Transform 値をセットし直しているのは、腕を下ろす1秒間の間もしっかり画面中央に狙いを定め続けさせるためです。

これと同じ処理を逆の手にも施してブループリントは終了です。


なんでだか少しだけ~不自然な気がする~の~♪

画像19

不自然な理由は分かってて、一つは銃身斜めったり、ジャンプすると横になること。これは回転を加えれば何とかなると思うんですが、どうも数値を弄っても変化が見られない。
もう一つは銃身が平行にならないこと。これはカメラの正面位置を取ってるせい。
専用のモーションを作らないと直せない気がします。どなたか良きアイデアがあれば教えて下さいまし。


「それでも仮だからいいや」(セリフ)

てな訳で仮に銃を構えるモーションができました。
実用には全く向いてないんで、あくまでテスト用。もうちょっと改造したらロックオンした的に向けられたりはするかもね。そんな訳で6.5回だった訳です。

誰のためにも、自分の役にも立ってないと思う今回。とりあえずおしまいです。

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