サードパーソン ブループリント ゲーム入門 (21) UE4 でパンチのために物理コンポーネントを追加する

ビデオの内容紹介
パンチ時に拳にコリジョンを有効にします。それによって、球体をパンチして押し出すことができるようになります。

原題 Introduction to Third Person Blueprint game – 21 – Adding Physics Components for Punching in UE4

[1] 両手にコリジョンをセットする

何かに対してパンチした時に、その何かが物理的な影響を受けるようにするために、まず両方のこぶしにコリジョンをセットします。MyCharacter のビューポートで (あるいは Component モードで)、[コンポーネントを追加] のドロップダウンメニューから
21-3
Sphere Collision (球形コリジョン) を選択します。
21-4
この Sphere Collision にぶつかるものが (パンチされてぶつかるものが) 物理的な影響を受けることになります。Sphere Collision をまず右手に移動します。
21-5
移動しづらい場合は、青色の四角形で囲んだ [スナップ サイズ] を 1 に変更してみるとよいです。
21-6
ほぼよさそうですが、
21-7
横から見ると少しずれていますので、
21-8
調整します。
21-9
Sphere Collision の大きさを変更します。あまり大きいと、パンチが当たっていないように見えるのに、Sphere Collision の範囲に入ってしまい、物理的な影響を受けることになるのを防ぐためです。[詳細] タブで Shape (形状) の Sphere Radius (球形の半径) を
21-10
11 などに変更してみます。
21-11
次に、この Sphere に名前を付けておきます。[コンポーネント] タブで Sphere を右クリックして、
21-13
[名前変更] を選択して、PunchCollision_r とします。
21-14
この PunchCollision_r を右クリックして、[複製] をクリックして、左手用にも Sphere を作ります。
21-15
名前は、PunchCollision_l とします。「l」は数字ではなく、Lの小文字です。さらに、次の画像の青色の矢印のように、左手に Sphere を移動します (コピーではなく移動するだけです)。
21-16
右手と同じように、Sphere の位置を調整してから、[コンポーネント] タブで PunchCollision_r と PunchCollision_l を選択状態にしておき、[詳細] タブの [コリジョンのプリセット] で Nocollision (コリジョンなし) を選択します。
21-17
これはどういうことかと言うと、パンチしていない時に (単に走り回っている時など)、両手の Sphere によって何らかのものに物理的な影響を与えないようにするためです。つまり、必要に応じてコリジョンを有効化する必要があるということになります。

[2] 球形コリジョンを本体に付属させる

PunchCollision_r と PunchCollision_l のコリジョンを有効化する前に、それらをキャラクターにアタッチ (付属) させておきます。まず、MyCharacter の Construction Script タブを開き、[マイブループリント] タブの [変数] → [コンポーネント] から PunchCollision_r と PunchCollision_l をドラッグアンドドロップします。
21-18
Construction Script に何らかの処理をつなげておくと、キャラクターがレベルに登場した時に自動的にそれが実行されることになります (後は、エクスポーズされている変数の値を変更しても自動的に実行されます)。
Attach To (~にアタッチする) 関数を使います。スペースで右クリックして、検索、選択します。
21-19
次に、キャラクターのメッシュにコリジョンをアタッチするので、変数 Mesh を使いますが、このままでは表示されていないので、[マイブループリント] タブの上部にある目のマークをクリックして、[継承した変数を表示] を選択します (これによって、キャラクターが継承している (元となっている) クラスにある変数を表示することができるようになります)。
21-20
21-21
まず、次のように接続します。PunchCollision_l が [ターゲット]、すなわちアタッチするものです。Mesh が Parent (親) すなわちアタッチされる側となる本体です (In とあるのは、値が入ってくるという意味です)。Socket Name (ソケット名=取り付ける位置の名前) には値を In するのではなく、直接 hand_l と書き入れます。数字の 1 ではなく、L の小文字なので注意してください。また、Attach Type は Snap To Target (ターゲットに合わせる) にします。
21-22
なお、ソケットの名前 (その元となるボーンの名前) は、次のように CharacterAnimBP から確認ができます。
21-12
Attach To 関数をコピーして、左手についてもセットします。Socket Name を hand_r に直さなければならないことに注意します。また、実行ピンどうしも接続させます。

[3] 必要に応じてコリジョンを有効化できるようにする

最後に MyCharacter の Event Graph タブで、PunchCollision_r と PunchCollision_l のコリジョンがパンチ時に有効化されるように設定します。
21-24
そのためには、まず Set Collision Enabled (コリジョンが有効化されるようにセットする) 関数を使います。
21-26
これを次のように接続します。
21-25

ブループリントの意味
プレイヤーが左マウスボタンをクリックすると Pressed の実行ピンが発動して、IsPunching? という変数が true にセットされ (チェックマークは true という意味です)、実行ピンがつながっている Set Collision Enabled関数が実行されます。その時、Collision Enabled (コリジョンが有効化される) となっているため、[ターゲット] につながっている PunchCollision_r と PunchCollision_l のコリジョンが有効化されます。プレイヤーが左マウスボタンをリリースすると、今と反対のことが起きます。グラフでは下側に配置されている一連の流れです。Set Collision Enabled 関数では No Collision (コリジョンなし) となっています。

最後に コメントボックスを広げて、すべて収まるようにして、[コンパイル] します。
21-27

[4] テストプレイ

メインエディタのビューポートに戻ります。[コンテンツ ブラウザ] タブで、StarterContent フォルダ → Props フォルダ → Shapes フォルダを開き、Shape_Sphere (球体図形) をビューポートにドラッグアンドドロップします。また、大きさを [詳細] タブの [スケーリング] で 3.0 ほどにセットしました (大きくなります)。さらに、Simulate Physics (物理をシミュレートする) にチェックを入れて、[プレイ] してみます。
21-28
すると、キャラクターがパンチを繰り出すと、その物理的な影響で球体が移動し、下に落ちていきました。
21-29
無事、完了しました。読んでくださって、ありがとうございます。次回は、この「サードパーソン ブループリント」シリーズの最終回となります。



シェアする

  • このエントリーをはてなブックマークに追加

フォローする