UE4 レベルからレベルにイベントを送る方法

やあ

WorldCompositionを使ってて、サブレベルのLevelBounds内にプレイヤーが入った時に、空やフォグの設定を変えたいなーって思ったときによくわからなかったので、調べてみた。

準備

レベルを用意。
f:id:pto8913:20210329205029p:plain
今回はトリガーにキャラクターがオーバーラップしたらイベントを送るよ。
f:id:pto8913:20210329205059p:plain

やる

  1. サブレベルTestSubLevelのレベルブループリントに以下の実装をする。
    f:id:pto8913:20210329213714p:plain
    Remote EventEvent Nameで指定した名前のカスタムイベントを、ロード済みのレベルたちのレベルブループリントから呼んでくれる。

  2. 別のレベルにTestSubLevelRemote Eventで決めたEvent Nameと同じ名前のカスタムイベントを作る。
    f:id:pto8913:20210329210143p:plain

結果

youtu.be

ロード済みのレベルたちが、それぞれカスタムイベントを実装していれば、全部同時に呼び出されるからいろいろなことができそうだなと思いました。(?)

Blender 洞窟、木の簡単な作り方

やあ

洞窟と木、全然違うよで実は似ていると思いませんか?
僕は思いません。

準備

  1. まず、Shift+ASingle vertを追加します。
    f:id:pto8913:20210320234406p:plain
  2. モディファイアーにスキンを追加
    f:id:pto8913:20210320234609p:plain
    追加すると箱ができます。
    f:id:pto8913:20210320234707p:plain
  3. モディファイア―にサブディビジョンサーフェイスを追加
    f:id:pto8913:20210320234832p:plain
    追加するとちょっと丸くなります。
    f:id:pto8913:20210320234931p:plain
    準備終わり。

やる

  1. 頂点を選択してEキーでどんどん伸ばす。
    f:id:pto8913:20210320235126p:plain
  2. 頂点を選択してCtrl+Aで半径を整える。
    f:id:pto8913:20210320235300p:plain

  1. やるを繰り返す。
  2. 平面を張り付ける。
    f:id:pto8913:20210321000856p:plain

洞窟

  1. やるが終わったら、スキンモディファイアーを適用して、サブディビジョンサーフェイスのレベルを上げます。
    f:id:pto8913:20210320235757p:plain
  2. ディスプレイスモディファイア―を追加します。
    f:id:pto8913:20210320235837p:plain
  3. いい感じのテクスチャを作ります。
    f:id:pto8913:20210321000058p:plain
  4. ディスプレイスの方向やら強さをいじっていい感じにします。
    f:id:pto8913:20210321000202p:plain
    方向はXYだけがいいかもしれない。
  5. 気に入らないところをスカルプトで直して終わり。
    f:id:pto8913:20210321000336p:plain

注意 : ゲームのレベルで使う場合は、 法線の向きを内側にしたほうがいいです。

おわり。

UE4 WorldCompositionのレベルの高さを変えたい

やあ

WorldCompositionで作ったレベルのZ座標が気に食わなくて、Z座標を変えようと思ったときに、LandscapeStreamingProxyLevelBoundsのZ座標を変える方法がわかりにくかったのでメモしておくよ。

やる

  1. レベル管理タブでレベルを選択。
    レベル管理タブがない場合は、ウィンドウ→レベルから開けます。
    f:id:pto8913:20210319205127p:plain
  2. レベルタブ上部のレベル詳細を開く
    f:id:pto8913:20210319204723p:plain
  3. Positionをいじる。
    f:id:pto8913:20210319204958p:plain
    おわり。

なんでこんなわかりにくいところにあるのかがわからない・・・

UE4 NiagaraのLOD?

やあ

レベルに置いた滝の煙が遠くから見えてしまっていたので、NiagaraにLODがあるか調べた結果、Scalabilityにたどり着いた。

やる

Emitter Stateの下にあるScalabilityです。
f:id:pto8913:20210306150057p:plain
1. Scalability Modeselfにする。
2. Enable Distance Cullingを有効化。
カメラの位置がMinDistance以下になるとMin Distance Responseに基づいて処理される。
カメラの位置がMaxDistance以上になるとMax Distance Responseに基づいて処理される。
3. Scale Spawn Countを有効化。
距離に基づいてエミッターのスポーン量を絞ったりする。
4. Enable Visibility Cullingを有効化。
エミッターがカメラから見えるかどうかでVisiblility Cull Responseに基づいて処理される。
f:id:pto8913:20210306150151p:plain

これだけ。

UE4 Waterプラグインが動いてうれしい

やあ

Waterプラグイン入れたのはいいものの、海や湖など、レベルに配置しても何も表示されなくて困ってたのが解決した話だよ。

環境

UE4.26.0

WorldCompositionを使ってるよ。

動くようになるまでにやったこと

  1. レベル上にあるLandscapeアクターの編集レイヤーを有効にする
    f:id:pto8913:20210304144504p:plain
  2. 海を配置
    f:id:pto8913:20210304144748p:plain
  3. 海を配置したときに自動的にMyLandscapeName_WaterBrushManagerというのが追加されているので、それをアウトライナから選択して、Settings->AffectHeightMapのチェックを一度外して、再びチェックを入れる。
    f:id:pto8913:20210304145420p:plain
    f:id:pto8913:20210304145354p:plain
  4. よくわかんないけど海が表示されたからヨシ!
    f:id:pto8913:20210304145657p:plain

UE4 splineあくたー

やあ

レベルデザインで、道を作るのにLandscape Splineを使おうと思ったら、凹んだメッシュでは衝突判定が起きないことが分かったのでsplineアクターでやることにしたよ。

f:id:pto8913:20210223203001p:plain
f:id:pto8913:20210223203036p:plain

UE4 UMGのコンストラクタ/デストラクタが呼ばれるタイミング

やあ

UMG(WidgetBlueprint)のコンストラクタが呼ばれるタイミングを調べてみたよ。
間違ってたら教えてください。

Constructの呼ばれるタイミング

ウィジェットViewportに追加されたときに呼ばれます。
こんな感じのWBPがある。
f:id:pto8913:20210215001533p:plain

呼ばれる例
AddToViewportしたとき。
f:id:pto8913:20210215001530p:plain

PanelWidget(BorderやVerticalBoxなど)にウィジェットAddChildしたとき。
f:id:pto8913:20210215001536p:plain

呼ばれない例
VisibilityRenderOpacityなどを切り替えるだけでは呼ばれません。
f:id:pto8913:20210215001540p:plain

CreateWidgetでも呼ばれません。
f:id:pto8913:20210215001527p:plain

Destructの呼ばれるタイミング

PanelWidgetからRemoveChildしたり、RemoveFromViewportしたりしたとき。
f:id:pto8913:20210215001536p:plain

注意

親UMGがAddToViewportされたりAddChildされないと、子UMGのConstructは呼ばれないので注意。