UE4:TheForestっぽいクラフトのギミックのマクロの配布と使い方
先日、TheForestっぽいギミックのBPを作ったと書きましたが、その作業効率向上を図るマクロが出来たので配布します。
適当に遊んでみてください
プロジェクトの中には「丸太の壁(Wall)」「丸太と枝(っぽい)の壁(WallBranch)」「丸太の収納ボックス(WallBox)」「枝の収納出来る丸太のテーブル(WallBranchBox)」が入ってます。
その他、FirstPersonCharacterのBPやWidgetもあります。動画のようにメニューを出す際はTabKeyを押してください。
このマクロは4つの処理を行うことが出来ます。
1.スタティックメッシュを使用した場合のクラフト
2.マテリアルインスタンスを使用した場合のクラフト
3.スタティックメッシュを用いた構造体の数値の出し入れの処理
4.マテリアルインスタンスを用いた構造体の数値の出し入れの処理
ちょっと何言ってるかよくわからないよって人は上又は下の動画見て下さい。
記事が長くなってしまったので作成風景を動画にしました。これで作成の流れを見ていただけるとわかりやすいと思います
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)
詳しくは
スタティックメッシュの初期のコリジョンの設定はIgnoreCollisionPawnになります。
マクロの使い方!
以下の内容を見る前に動画でどういう動作をするか確認していただけるとわかりやすいと思います
1.スタティックメッシュを使用した場合の処理
丸太の壁を作ります。
このブループリントは4つのスタティックメッシュによってできています。
まず、EventBeginPlayで4つのスタティックメッシュで配列を作ります。次にPlayerCharacterをキャストしたものを変数で宣言します。
イベントWallからMacroCraftを出します。スタティックメッシュのみの場合は上の7つを使用します。
RawMT:使用する構造体を記入します。
構造体にはLog,Branch,Rock,Rope,Bone,Leafの6つを設定してあります。 (追加する場合はMacroCraftにあるSelectのマクロを弄るといいと思います。詳しくは最後に書きます。)
SetCollision?:マクロの処理が終わった後にコリジョンをblockにする場合はチェックを付けます。
StaticMesh:作成したStaticMeshの配列を入れます。
Switch:Switchにチェックを付けてください。これは複数のスタティックメッシュを使用する場合に使います。(後々出てきます。)
SetMaterial:変更するスタティックメッシュのマテリアルを入れます。
PlayerCast;Playerをキャストしたものをつなぎます。
In Sound:設置した際のサウンドを入れます。
これで完成です。
2,複数のスタティックメッシュを使用した場合
2種類のスタティックメッシュを使用しています。
まず種類に分けて配列を作成します。
このマクロには、RawMTで指定した構造体の数値を取り、マクロの処理が終わった又は構造体の数値が0の場合NextMacroに処理が移るようになっています。今回のブループリントはLogが優先となり丸太が完成又は所持数が0になるとBranch(構造体名)の処理に移ります。
True:マクロの処理が終了した時に流れる
False:処理が終了していない時に流れる
NextMacro:複数マクロを使用する場合は設置する。
先ほどとの違いはBoolean型の変数が宣言されている部分になります。
SwitchのデフォルトはTrueにしています。
このブループリントでは2つのスタティックメッシュを使用しているためすべての処理が終わった後にコリジョンをblockにしています。そのためBoolean型で終了したかを取得し以下のようにしています。
SetCollision関連のノードたくさんあって名前を忘れてしまいがちになるのでもしノード名を忘れてしまったらマクロの中に同じノードがありますのでコピペして使ってください。
3.マテリアルを使用した場合
これは一つのスタティックメッシュに複数のマテリアルが付いている状態です。
少しめんどくさいのですが、各マテリアルのマテリアルインスタンスを作成し変数を宣言し入れてください。
そして配列を作成してください。
ではマテリアルを使用した処理を走らせるようにします。
MaterialArrayに作成した変数をつなぎます。
一番重要なのはMaterialにチェックを付けParamaterNameにマテリアルで作成したパラメーターノードの名を入れる必要があります。
これで動きます。もちろん複数の使用も対応しています。
(流れはスタティックメッシュと全く同じなので説明は割愛させていただきます。)
構造体の出し入れの処理を加えたブループリントの作成
アイテムの収納ボックスの機能も加える事が出来ます。
マテリアルインスタンスを使用した場合
横の囲いをBranchで作成し、Logを4つ格納出来るようにします。
動作は動画のほうで確認してください。
まず各マテリアルインスタンスを作成します。
クラフトする部分と収納するマテリアルを分けます。(画像ではキャラクターのキャストが取れていますがつなげてください)
先ほどのマテリアルを用いたクラフトと同じになります。このマクロの処理が終わったらコリジョンをBlockにするためStaticMeshを接続しています。
次にBoxを設置します。
そしてBoolean型の変数を作成します。デフォルトをTrueにしてBoxに入ったらFalse、出たらTrueにします。
ReciveBoxにチェックを入れてSwitchAとTrigerSwitchに作成した変数をつなげます。
InKey:収納するときのイベントキー
OutKey:取り出す時のイベントキー
MaxCount:RawMTで指定したアイテムをPlayerが所持できる上限
OutSound:取り出す時のサウンド
これで終了です。
スタティックメッシュを使用した場合のブループリント
流れは同じなので割愛させて頂きます。
最後に構造体名、及び追加の方法について
構造体で新しく変数を作成します。
マクロの中身にSelectがあるのでダブルクリックします。
スパゲッティが出てきます。
名前をオンにピンを追加します。
後は他のノード同様足したり引いたり比較したりする部分を追加すればオーケーです。
記事が長くなってしまい申し訳ありません!
暇な方は使って遊んでみてください~~!
正直わかり辛いと思います。もし気になるところがある場合はTwitterの方 で言っていただけると返答させて頂きます。
以上。