こちらの時間拡張のトラックの動作について、いくつか質問させて下さい
質問1
Level Sequence の「時間拡張(Time Dilation)」トラックで設定されている値を、シーケンス再生中に取得するための公式な API はありますか。
これにより、下記のことを実現したいです。
- 現在評価されている Time Dilation 値を取得する
- シーケンス上のスロー倍率をSet Global Time Dilationに設定した ゲームの全体をスローにしたい
<br/>
質問2
Get Global Time Dilation が、シーケンス上の Time Dilation と同じ値を返すような設定方法は存在しますか。
現在の理解では、
- Sequence の「時間拡張(Time Dilation)」
UGameplayStatics::GetGlobalTimeDilation()
は別の仕組みとして動作しているように見えます。
もし Sequence の時間拡張を World の Global Time Dilation に反映させる正しい方法や、推奨されるシーケンサーデータの実装方法があれば教えてください。
[Attachment Removed]
再現手順
Level Sequence に「時間拡張(Time Dilation)」トラックを追加し、再生中にスロー演出を設定しています。
シーケンス再生中に現在適用されているスロー倍率を取得するため、Blueprint および C++ から Get Global Time Dilation を確認しました。
しかし、シーケンス上で時間拡張が適用されているにもかかわらず、Get Global Time Dilation の戻り値は常に 1.0 となり、シーケンスで設定したスロー倍率を取得できませんでした。
[Image Removed]
[Attachment Removed]
ご質問ありがとうございます。
結論から言うと、Sequencerの時間拡張トラックとGet Global Time DilationはAWorldSettingsの別々のプロパティを使っているため、Get Global Time Dilationからトラックの値は取れません。時間拡張トラックはAWorldSettings::CinematicTimeDilationに値を書き、Get Global Time DilationはAWorldSettings::TimeDilationだけを返します。ワールドのTickで実際に使われるのは、この2つを掛けたGetEffectiveTimeDilation()の値です。
つまりトラックの値はすでにゲーム全体に効いています。Set Global Time Dilationに入れ直す必要はなく、両方に入れるとスローが二重にかかります。
質問1について。C++ではGetWorld()->GetWorldSettings()->CinematicTimeDilation(Sequencerの値だけ)かGetEffectiveTimeDilation()(全部掛けた値)で取れます。どちらもBlueprintからは呼べないので、Blueprintで使う場合はGetEffectiveTimeDilation()を返すBlueprintPure関数を一つ作ってください。
質問2について。そのような設定はありません。ゲームプレイ用のTimeDilationとSequencer用のCinematicTimeDilationはわざと分けてあり、WorldSettings.hのコメントでもTimeDilationを直接読まずにGetEffectiveTimeDilation()を使うように書かれています。ゲーム側で時間倍率を見ている箇所をGetEffectiveTimeDilation()に変えるのが一番確実です。どうしてもGet Global Time Dilationに値を入れたい場合は、時間拡張トラックをやめてActorのfloat変数(Expose to Cinematicsをオン)をSequencerで動かし、そのActorのTickでSet Global Time Dilationを呼ぶ方法もあります。
お手数ですが、よろしくお願いします。
[Attachment Removed]