|ω・`)ノ ヤァ
私です
GWだ色々やるぞ やっふーとか思ってたのに
気がついたらもう終わるっていうバグ何?・・・
おかしいなぁ~ HRだけが上がっているぞー?
本題!
##タイムライン表示バーグ
っと言うわけで
今回は(も?)みんな大好きNiagaraの小話だよ
致命的じゃないけど微妙に困るバグが毎度毎度残っているの ちょっとどうにかしてほしいね
次のアプデでそのへん良くなってること期待 めっちゃいい機能なんだもんよ・・・
はい 正解はタイムラインの緑バーです
ここのバーを使って発生タイミングだとかいじってたんだけど
いやー 困るわこれェ
一応、タイムラインの見た目だけのバグで動作には影響無いっぽいのが救い。
ただこのバグ 4.25くらいからあるんよね・・・
4.26で直ってるの期待してたけどダメでしたね
ちなみに青びっくりマークにマウス合わせるとエラー内容出てきます
どうやらEmitterStateの[num loops]がバインド出来なくてタイムラインの初期化が狂っているご様子
エンジンのコードの書き換えができる環境であれば
UMovieSceneNiagaraEmitterSection::TryAddTimeRangeModule
を見ると幸せになれます
が
今回はモジュールの方だけの変更で公式が対応してくれるまでの一時しのぎの方法です
完璧じゃないのであしからず。
##どうしてこうなっちゃうのか
Niagaraの各種パラメーターはモジュールやNiagaraSystem、Emitter内で宣言されていても
それが実際に使われていないとコンパイル結果(NiagaraScript)に含まれてなかったりします(たしか
アップデートによってEmitterState内の処理にStaticSwitchが追加され
モジュールの設定方法によっては本来必要だったパラメーターが取得できなくなっちまっていたりするのです。
タイムラインで参照するパラメーターは以下の4つ
[StartTime] [Length] [NumLoops] [StartTimeIncludedInFirstLoopOnly]
そしてそれらはEmitterStateの以下のパラメーターに当てはめられています
[StartTime]
[Length]
[NumLoops]
[StartTimeIncludedInFirstLoopOnly]
NumLoopsなら【Loop Count】がバインドされていればいいんですが
こいつは
の Multiple の時にしか使われてないので
エンジン既存のエミッターFountainのような無限ループエミッターではバインド出来てないんですね
まぁ 無限ループならタイムライン表示されてなくてもいいんですけど
LoopDelayで発生タイミングをずらしている場合 タイムラインが表示されてないと微妙に不便なんですよ
さらにSimpleSpriteBurstみたいな単発のエミッター
発生タイミングをずらしてぇ ってなった時 まぁこうするよね
残念ながらこの方法だと発生タイミングは変わらないのです 前まではコレで平気だったんだけどねぇ・・・
StartTimeIncludedInFirstLoopOnly【Delay First Loop Only】がこの分岐ではじかれる
っとまぁ こんな感じで
結構いろんな組み合わせで死ぬのです
##対応方法は?
じゃあ 直していきましょう
といっても簡単
EmitterStateモジュールの最初の方で バインドが必須なパラメーターを最初に使っちゃいます
ただしこの方法 EmitterStateの各種パラメーターに別の変数をバインドさせると結局発生する
例えば SystemのパラメーターとしてFloatを追加 それをLoopDelayに登録すると・・・
自体が
に置き換わってしまうため
モジュール内で最初に使っていてもそもそも存在しなくなっちゃうのよね
まぁ この場合 タイムラインはたしかにあんまり必要ないので良いんですがね・・・
早く直らんかなぁ・・・
Niagaraの中身そんな詳しくないので所々認識が変かもしれん
ツッコミあったらください
今回はこんなもんで
ノシ