1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【UE4】UE4.26でもやっぱりNiagaraが絶妙にバグっている件

Posted at

|ω・`)ノ ヤァ

私です
GWだ色々やるぞ やっふーとか思ってたのに
気がついたらもう終わるっていうバグ何?・・・

おかしいなぁ~ HRだけが上がっているぞー?

本題!

##タイムライン表示バーグ

っと言うわけで
今回は(も?)みんな大好きNiagaraの小話だよ
致命的じゃないけど微妙に困るバグが毎度毎度残っているの ちょっとどうにかしてほしいね
次のアプデでそのへん良くなってること期待 めっちゃいい機能なんだもんよ・・・

さて こいつを見てくれ
image.png
何が変かわかるかな?

はい 正解はタイムラインの緑バーです
ここのバーを使って発生タイミングだとかいじってたんだけど
いやー 困るわこれェ

一応、タイムラインの見た目だけのバグで動作には影響無いっぽいのが救い。

ただこのバグ 4.25くらいからあるんよね・・・
4.26で直ってるの期待してたけどダメでしたね

ちなみに青びっくりマークにマウス合わせるとエラー内容出てきます
image.png

英語のほうがわかりやすい
image.png

どうやらEmitterStateの[num loops]がバインド出来なくてタイムラインの初期化が狂っているご様子
エンジンのコードの書き換えができる環境であれば
UMovieSceneNiagaraEmitterSection::TryAddTimeRangeModule
を見ると幸せになれます

今回はモジュールの方だけの変更で公式が対応してくれるまでの一時しのぎの方法です
完璧じゃないのであしからず。

##どうしてこうなっちゃうのか
Niagaraの各種パラメーターはモジュールやNiagaraSystem、Emitter内で宣言されていても
それが実際に使われていないとコンパイル結果(NiagaraScript)に含まれてなかったりします(たしか

アップデートによってEmitterState内の処理にStaticSwitchが追加され
モジュールの設定方法によっては本来必要だったパラメーターが取得できなくなっちまっていたりするのです。

タイムラインで参照するパラメーターは以下の4つ
[StartTime] [Length] [NumLoops] [StartTimeIncludedInFirstLoopOnly]
そしてそれらはEmitterStateの以下のパラメーターに当てはめられています

[StartTime]
image.png
[Length]
image.png
[NumLoops]
image.png
[StartTimeIncludedInFirstLoopOnly]
image.png

NumLoopsなら【Loop Count】がバインドされていればいいんですが
こいつは
image.png
の Multiple の時にしか使われてないので
エンジン既存のエミッターFountainのような無限ループエミッターではバインド出来てないんですね
image.png
まぁ 無限ループならタイムライン表示されてなくてもいいんですけど
LoopDelayで発生タイミングをずらしている場合 タイムラインが表示されてないと微妙に不便なんですよ

さらにSimpleSpriteBurstみたいな単発のエミッター
発生タイミングをずらしてぇ ってなった時 まぁこうするよね
image.png

残念ながらこの方法だと発生タイミングは変わらないのです 前まではコレで平気だったんだけどねぇ・・・
image.png

StartTimeIncludedInFirstLoopOnly【Delay First Loop Only】がこの分岐ではじかれる
image.png

っとまぁ こんな感じで
結構いろんな組み合わせで死ぬのです


##対応方法は?
じゃあ 直していきましょう
といっても簡単
EmitterStateモジュールの最初の方で バインドが必須なパラメーターを最初に使っちゃいます

つまりここで
image.png

こうじゃ
image.png

するとタイムラインが正常に表示されるようになるじょ
image.png

ただしこの方法 EmitterStateの各種パラメーターに別の変数をバインドさせると結局発生する
例えば SystemのパラメーターとしてFloatを追加 それをLoopDelayに登録すると・・・
image.png

image.png
自体が
image.png
に置き換わってしまうため
モジュール内で最初に使っていてもそもそも存在しなくなっちゃうのよね
image.png

まぁ この場合 タイムラインはたしかにあんまり必要ないので良いんですがね・・・

早く直らんかなぁ・・・

Niagaraの中身そんな詳しくないので所々認識が変かもしれん
ツッコミあったらください

今回はこんなもんで
ノシ

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?