僕の私のUnrealな日々

UE4のBluePrintを使って小さなギミックを作ったりしてます。ブログを通じて情報共有ができたらなと思います。

UE4:TheForestっぽいクラフトのギミックのマクロの配布と使い方

先日、TheForestっぽいギミックのBPを作ったと書きましたが、その作業効率向上を図るマクロが出来たので配布します。

www.youtube.com

 

適当に遊んでみてください

 

f:id:Bussan_dayo:20151112165936p:plain

 

 

www.dropbox.com

 

プロジェクトの中には「丸太の壁(Wall)」「丸太と枝(っぽい)の壁(WallBranch)」「丸太の収納ボックス(WallBox)」「枝の収納出来る丸太のテーブル(WallBranchBox)」が入ってます。

その他、FirstPersonCharacterのBPやWidgetもあります。動画のようにメニューを出す際はTabKeyを押してください。

 

このマクロは4つの処理を行うことが出来ます。

1.スタティックメッシュを使用した場合のクラフト

2.マテリアルインスタンスを使用した場合のクラフト

3.スタティックメッシュを用いた構造体の数値の出し入れの処理

4.マテリアルインスタンスを用いた構造体の数値の出し入れの処理

 

ちょっと何言ってるかよくわからないよって人は上又は下の動画見て下さい。 

www.youtube.com

 記事が長くなってしまったので作成風景を動画にしました。これで作成の流れを見ていただけるとわかりやすいと思います

0:00~1:30 動作

1:30~4:00  Wall(丸太の壁)の製作の流れ(スタティックメッシュを用いたもの)

4:00~9:00  WallBranch(丸太と枝の壁)の制作の流れ(複数のスタティックメッシュを用いたもの)

9:00~14:20 WoodBox(丸太置き)制作の流れ(マテリアルインスタンスを用いたクラフト、丸太の収納)

14:20~16:00 作成したWallBranchをBranchの収納(枝置き場)に変える(スタティックメッシュを用いたクラフト、Branchの収納)

 サウンドは入っていませんので用意してください。


 注意事項

プロジェクトに入っているWallなどのブループリントにはBluePrintInterfaceが追加されています。(BP_InterfaceWood)

詳しくは

docs.unrealengine.com

 

スタティックメッシュの初期のコリジョンの設定はIgnoreCollisionPawnになります。

f:id:Bussan_dayo:20151116104127p:plain

 

 マクロの使い方!

以下の内容を見る前に動画でどういう動作をするか確認していただけるとわかりやすいと思います

1.スタティックメッシュを使用した場合の処理

 

丸太の壁を作ります。

f:id:Bussan_dayo:20151116064554p:plain

f:id:Bussan_dayo:20151112170615p:plain

このブループリントは4つのスタティックメッシュによってできています。

 

まず、EventBeginPlayで4つのスタティックメッシュで配列を作ります。次にPlayerCharacterをキャストしたものを変数で宣言します。

f:id:Bussan_dayo:20151112170836p:plain

 

イベントWallからMacroCraftを出します。スタティックメッシュのみの場合は上の7つを使用します。

f:id:Bussan_dayo:20151116064007p:plain

 

RawMT:使用する構造体を記入します。

f:id:Bussan_dayo:20151112171123p:plain

構造体にはLog,Branch,Rock,Rope,Bone,Leafの6つを設定してあります。 (追加する場合はMacroCraftにあるSelectのマクロを弄るといいと思います。詳しくは最後に書きます。)

 SetCollision?:マクロの処理が終わった後にコリジョンをblockにする場合はチェックを付けます。

StaticMesh:作成したStaticMeshの配列を入れます。

Switch:Switchにチェックを付けてください。これは複数のスタティックメッシュを使用する場合に使います。(後々出てきます。)

SetMaterial:変更するスタティックメッシュのマテリアルを入れます。

PlayerCast;Playerをキャストしたものをつなぎます。

In Sound:設置した際のサウンドを入れます。

 

これで完成です。

 

2,複数のスタティックメッシュを使用した場合

f:id:Bussan_dayo:20151116064610p:plain

 

 

f:id:Bussan_dayo:20151116064842p:plain

 

2種類のスタティックメッシュを使用しています。

 

まず種類に分けて配列を作成します。

f:id:Bussan_dayo:20151116065004p:plain

 

このマクロには、RawMTで指定した構造体の数値を取り、マクロの処理が終わった又は構造体の数値が0の場合NextMacroに処理が移るようになっています。今回のブループリントはLogが優先となり丸太が完成又は所持数が0になるとBranch(構造体名)の処理に移ります。

 

True:マクロの処理が終了した時に流れる

False:処理が終了していない時に流れる

NextMacro:複数マクロを使用する場合は設置する。

 

先ほどとの違いはBoolean型の変数が宣言されている部分になります。

f:id:Bussan_dayo:20151116065746p:plain

 SwitchのデフォルトはTrueにしています。

 

このブループリントでは2つのスタティックメッシュを使用しているためすべての処理が終わった後にコリジョンをblockにしています。そのためBoolean型で終了したかを取得し以下のようにしています。

f:id:Bussan_dayo:20151116070054p:plain

 

SetCollision関連のノードたくさんあって名前を忘れてしまいがちになるのでもしノード名を忘れてしまったらマクロの中に同じノードがありますのでコピペして使ってください。

f:id:Bussan_dayo:20151116070328p:plain

 

 

3.マテリアルを使用した場合

f:id:Bussan_dayo:20151116072947p:plain

 

これは一つのスタティックメッシュに複数のマテリアルが付いている状態です。

f:id:Bussan_dayo:20151116073122p:plain

 

f:id:Bussan_dayo:20151116073222p:plain

 

少しめんどくさいのですが、各マテリアルのマテリアルインスタンスを作成し変数を宣言し入れてください。

f:id:Bussan_dayo:20151116073257p:plain

 

そして配列を作成してください。

f:id:Bussan_dayo:20151116073421p:plain

 

 

ではマテリアルを使用した処理を走らせるようにします。

f:id:Bussan_dayo:20151116073549p:plain

 

MaterialArrayに作成した変数をつなぎます。

 

一番重要なのはMaterialにチェックを付けParamaterNameにマテリアルで作成したパラメーターノードの名を入れる必要があります。

 

これで動きます。もちろん複数の使用も対応しています。

f:id:Bussan_dayo:20151116073930p:plain

(流れはスタティックメッシュと全く同じなので説明は割愛させていただきます。)

 

 

構造体の出し入れの処理を加えたブループリントの作成

アイテムの収納ボックスの機能も加える事が出来ます。

 

マテリアルインスタンスを使用した場合

f:id:Bussan_dayo:20151116070758p:plain

 

横の囲いをBranchで作成し、Logを4つ格納出来るようにします。

動作は動画のほうで確認してください。

f:id:Bussan_dayo:20151116101928p:plain

まず各マテリアルインスタンスを作成します。

f:id:Bussan_dayo:20151116101952p:plain

 

 クラフトする部分と収納するマテリアルを分けます。(画像ではキャラクターのキャストが取れていますがつなげてください)

 

f:id:Bussan_dayo:20151116102057p:plain

 

先ほどのマテリアルを用いたクラフトと同じになります。このマクロの処理が終わったらコリジョンをBlockにするためStaticMeshを接続しています。

 

次にBoxを設置します。

f:id:Bussan_dayo:20151116102241p:plain

 

 

そしてBoolean型の変数を作成します。デフォルトをTrueにしてBoxに入ったらFalse、出たらTrueにします。

f:id:Bussan_dayo:20151116102303p:plain

 

 

f:id:Bussan_dayo:20151116102349p:plain

 ReciveBoxにチェックを入れてSwitchAとTrigerSwitchに作成した変数をつなげます。

InKey:収納するときのイベントキー

OutKey:取り出す時のイベントキー

MaxCount:RawMTで指定したアイテムをPlayerが所持できる上限

OutSound:取り出す時のサウンド

 

これで終了です。

 

スタティックメッシュを使用した場合のブループリント

f:id:Bussan_dayo:20151116102915p:plain

流れは同じなので割愛させて頂きます。

 

 

最後に構造体名、及び追加の方法について

f:id:Bussan_dayo:20151116103553p:plain

構造体で新しく変数を作成します。

 

マクロの中身にSelectがあるのでダブルクリックします。

f:id:Bussan_dayo:20151116103625p:plain

 

 

f:id:Bussan_dayo:20151116103651p:plain

スパゲッティが出てきます。

 

 

f:id:Bussan_dayo:20151116103713p:plain

名前をオンにピンを追加します。

 

後は他のノード同様足したり引いたり比較したりする部分を追加すればオーケーです。

 

記事が長くなってしまい申し訳ありません!

暇な方は使って遊んでみてください~~!

 

正直わかり辛いと思います。もし気になるところがある場合はTwitterの方 で言っていただけると返答させて頂きます。

 

以上。