【CG】月日に連動して葉の色が変わるブループリントクラス【UE4】

Pocket
LinkedIn にシェア
LINEで送る

やる人がいるのか正直わかりませんが、こんなやり方もあるかなあ、ってことで紹介します。

要はUE4エディタのBP_SunPositionの日時と樹木の葉のマテリアルを連動させて、日付をいじるだけで季節感を変えられますということです。

やってみよう

マテリアルエディタでダイナミックマテリアルインスタンスを用意して、ブループリントクラスのアクターを作成しスクリプトを仕掛けていきます。

マテリアル側

変化する対象の樹木を決めましょう。
その樹木が使用しているマテリアルを開きましょう。元のマテリアルは残すためにコピーするのがいいかもしれない。

色の変更手段はたくさん有ると思いますが、今回はRGBAにしてみましょうか。
[Vector 4]ノードをパラメータ化して、名前を「ColorTune」とします。このキーワードが重要です。
初期値は(1, 1, 1, 1)で良いかと。

ブループリント側

ブループリントを新規作成します。
スタティックメッシュコンポーネントを追加します。なお、最後にこのコンポーネントに対し色変更したい樹木を割当します。

Construction Script

初期処理です。以下の2つの処理を追加します。
・ダイナミックマテリアルインスタンスを生成して、変数MatInsに保持する。
・アクター一覧からを配置した「Sun Position」を探して(※1)、変数SunPositionにインスタンスのポインタを保持する。
  ※1:もっといい方法があったはずだけど忘れた。

イベントグラフ

BeginPlayイベントに、イベントタイマーを定義します。
今回は1秒ごとにUpdateMonthイベントが呼ばれるように設定しました。
SunPositionのMonthの値を1秒毎に知りたいので、SunPositionアクターからMonthの値をgetし、変数CurrentMonthに代入します。

Tickイベントには、以下のようにノードを作ってみてください。
CurrentMonthの値に月が入っているので、その月情報を元に処理を分けてみましょう。

マテリアルと連動するためのキーワードは、先程マテリアル側に設定した「ColorTune」です。

ここからは樹木の種類や好みで変更してもらうパラメータなどの話しになりますが、私は次のようにしてみました。

月。BP_SunPosition::getMonth()の値RGBAの値葉の表現
1-3, 12月(1, 1, 1, 0)葉が無い
4-9月(1, 1, 1, 1)新緑
10月(1, 1, 0, 1)黄色
11月(1, 0, 0, 1)紅葉

11月であれば、色を変えます(黄)
12月であれば、紅葉(赤)
1~3月であれば、落葉(アルファ=0)
その他の月は、通常の色に(緑)

完成

これでブループリントクラスができたので、アクターとして配置しましょう。
置いた後、スタティックメッシュ(Static Mesh)に樹木を割り当てて、マテリアルにはダイナミックマテリアルインスタンス(Dynamic Material Instance)を割り当てましょう。

最終成果物。こんな感じで動きます。
今の樹木メッシュは枝と葉とでマテリアルを分離しているものがほとんどでしょうから大概の樹木に適用できます。
Play中にBP_SunPositionの日時を常時更新させたい方は利用価値が無いわけではないかもしれません。ご参考に。

応用編

例えば1~3月は落葉するから葉の数をゼロにしたいのであれば
・1~3月RGBAのアルファ値をゼロでセットすればよいです。
・マテリアル側は、
  ・[Masked]に設定します。
  ・ColorTuneノードの[A]の値をオパシティマスク(Opacity Mask)に接続します。

管理人が読んだおすすめの建築本

    

コメントを残す