本作成Blueprintまとめ

本のBPを作成した時のTLをまとめました。
0
茄子 @nasubi_s

やっとこさ本棚に本が入った。今は同じ背表紙だけどテクスチャが入って雰囲気が出てきた。背表紙のデザインとカラーバリエーションが切り替えできるようにマテリアルを作っていく。 #UE4 pic.twitter.com/cHqWr5tz2o

2016-05-05 08:41:57
拡大
茄子 @nasubi_s

@nasubi_s とりあえず、ここから勉強しなおします。 ContentsExampleの部屋ってBPで組まれてたのか。そこそこ組み込まれたBPのようで、でも用途決まってる場合はこういうの便利だよなー。 docs.unrealengine.com/latest/JPN/Eng…

2016-05-05 17:44:08
茄子 @nasubi_s

色変え機能から実装。色の変更はできたけど、ComponentMaskParameterってBPから変更できないのか?本の表紙デザインのバリエーションをマスクで追加してたんだけど、これはできないにおいがする…。 #UE4Study pic.twitter.com/Bmfdz3ln5G

2016-05-05 19:36:41
拡大
茄子 @nasubi_s

コンポーネントマスクで切り替えた2種類のマテリアルインスタンスをブランチで切り替える方法でどうにかデザイン変更に対応できた。ブランチではなく1.2.3の数字で切り替える方法を知りたいけど、今はとりあえずこれで。 pic.twitter.com/oIsYvUNAdx

2016-05-05 19:57:04
拡大
茄子 @nasubi_s

ここら辺までは触ってたことあるのでわかるレベル。ここからが本番です。

2016-05-05 19:58:38
茄子 @nasubi_s

Switch on Intを使えば数字で処理の切り替えを指定できる。これでバリエーションが2つ以上になっても大丈夫。いえい! #UE4Study pic.twitter.com/XmS0tymYMJ

2016-05-05 20:54:10
拡大
もんしょ @monsho1977

@nasubi_s マテリアルアセットの配列を利用するとマテリアルが増えた場合に処理を変更せずにインスタンスを生成できます。生成後の処理が違う場合はうまくいかないのですが。 pic.twitter.com/ur7LcEaTdY

2016-05-05 21:18:34
拡大
茄子 @nasubi_s

@monsho1977 ありがとうございます!そういう方法もあるんですね。生成後の処理は同じになるので、この方法が使えると思います。実は、まだ配列に対しての理解が足りてないところなので、これを機に配列も踏み込んでみます!

2016-05-05 21:23:02
茄子 @nasubi_s

配列を使った方法理解した!なるほど、これは便利。同じ結果になる処理でもいろいろな組み方があるなー、なるほどなるほど!いっぱい脳みそが喜んでる感じする。

2016-05-05 21:37:05
茄子 @nasubi_s

世の中そんなに甘くない。 pic.twitter.com/qNTtA6rqkM

2016-05-05 22:08:24
拡大
茄子 @nasubi_s

AddStaticmeshComponentからマテリアルの処理のターゲットにつなげないといけなかったのか。どうやって引っ張ってくるのかわからず悩んでた。無事解決。 pic.twitter.com/NPVB0qH6H6

2016-05-05 22:41:26
拡大
茄子 @nasubi_s

高さ調整や本厚さ、位置の微妙なずれなどランダムで配置できるようにできた。ContentsExampleの柵をならべるBPを真似て組んでるので、本の厚みを考慮した配置はされてない。次はこれをどうにかしないといけないね。 pic.twitter.com/WIglj3XJ6t

2016-05-05 23:24:26
拡大
茄子 @nasubi_s

RandomStreamを使って本の厚さを変えて、それに合わせて本の生成位置を調整できるように組んでるんだけど、そもそもRandomeStreamから取得してる値にずれがあるようでなぜそうなるのか分からず… #UE4Study pic.twitter.com/78cyOzL0lv

2016-05-06 11:41:01
拡大
拡大
茄子 @nasubi_s

RandomSteamじゃない、RandomFloatだ!AnswerHub見てても解決できなかったのでAnswerHubに書いてみました…。こういう使い方してる人いると思うので解決できそうなんですけどね。 answers.unrealengine.com/questions/4162…

2016-05-06 11:44:34
もんしょ @monsho1977

BPのGet系命令はその取得した値が使用される際に評価されるけど、ノード的には同じノードが使用できるのでミスをしやすい。慣れててもバグの原因がこれってことが結構ある。

2016-05-06 12:07:23
もんしょ @monsho1977

@monsho1977 例えばこういうノードを組むと最初のPrintでは0が、最後のPrintでは1が表示されるけど、Get命令は同じノードを使ってる。なので同じ値と勘違いして悩む。 pic.twitter.com/p48i08shjr

2016-05-06 12:09:14
拡大
もんしょ @monsho1977

@monsho1977 自分の場合はGet系命令は面倒でも同じノードを極力使わないようにしてる。同じ値を使いたい場合は変更がないことが保証されてないかぎりは一時変数を使うようにしてるかな。

2016-05-06 12:12:32
茄子 @nasubi_s

@monsho1977 なるほど、そういうことなんですか!RandomFloatの値を変数に入れてそれを使うようにしたらできました!ありがとうございます!! pic.twitter.com/U00OsJeNYf

2016-05-06 12:17:11
拡大
茄子 @nasubi_s

こういうバグを起こさないためのお作法って結構わからずに積むので、こういうお作法を学んでいかなければならない。勉強になった!

2016-05-06 12:20:52
茄子 @nasubi_s

本配置するBPで、AddStaticMeshComponentをInstancedに変更してみたが、変更後でも本の数が増えるとDrawcallも増える。なんか他にも設定が必要なのか…? pic.twitter.com/F32zLfxvo9

2016-05-06 23:41:25
拡大
もんしょ @monsho1977

@nasubi_s InstancedMeshComponentは1つだけ作成し、AddInstanceで配置するメッシュのトランスフォームを設定することでDrawCallを減らせます。 ただ、インスタンスごとにマテリアルパラメータは設定できなかったはずです。

2016-05-06 23:48:23
茄子 @nasubi_s

@monsho1977 ありがとうございます。InstancedMeshComponentの場所が問題だったのですね。StaticMeshComponentからそのまま差し替えてしまってたのが問題ですね。確かに場所買えたら直りました!

2016-05-06 23:54:53
茄子 @nasubi_s

本並べるBPにInstancedStaticMeshを組み込んだら、本を並べる機能が崩壊した!くそう、頭おかしくなりそうだぜ!そのまますんなり差し替え…とはいかなくなってしまったなー。

2016-05-07 00:09:09

InstancedStaticMeshを使用するときのMaterial

InstancedStaticMeshを使用するとMaterialが1個しかなくなるため、Material内で行ってた本の色を変更する処理が使えなくなる。

その代替方法を探る。