SetViewRangeStartとSetViewRangeEndを使ってみた

自分へのメモも兼ねて、記事を残していきます。
今回は、『**SetViewRangeStart**』と『**SetViewRangeEnd**』というノードを検証して使い方が分かった為、その記事を投稿します。


# 検証の動機

何故、『**SetViewRangeStart**』と『**SetViewRangeEnd**』を使おうとしたかというと、レベルシーケンスエディタに表示されているトラックの範囲やメモリ等の作業領域を変更する事が出来ないかと気になった為です。
簡単に見つかれば良いのですが、UEでは、実装されているが、ドキュメントや例がない為、使い方が分からないノードも多くあり、SetViewRangeStartとSetViewRangeEndも名前とコメントから想像して、『これかも！』と当たりをつけて検証しました。

:::note warn
IT開発において、**ソースコードが仕様** という言葉も言われる事もありますが、UnrealEngineのエンジンのコードは、ソースコードの説明も少ない事が多く、『**実際に使ってみないと分からない**』という事が、良くあります。
:::

# SetViewRangeStartノード

SetViewRangeStartノードは、以下のノードの事を指しています。
引数は、『InSequence(UMovieSceneSequence型)』と『StartTimeInSeconds(float型)』を取ります。

![SetViewRangeStartノード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153021/b7acab5a-e5b8-85ad-ad82-2a75b98b1de0.png)



# SetViewRangeEndノード
SetViewRangeEndノードは、以下のノードの事を指しています。
引数は、『InSequence(UMovieSceneSequence型)』と『EndTimeInSeconds(float型)』を取ります。

![SetViewRangeEndノード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153021/5da684ad-d8bb-17aa-94ce-298ea78ef171.png)


# 使い方

ここからが本題です。
今回は、『SetDisplayRate』と組み合わせて、レベルシーケンスのフレームレートを変えつつテストしました。
ウィジェットで、以下のような入力を取れるような環境を作り、検証しました。

![テスト用のウィジェット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153021/245fab8b-bc32-4c2b-df21-ce7a8eb8fffa.png)

SetViewRangeStartの使い方としては、フレームレートを1メモリとしてみた際に、StartTimeInSecondsに入力した数字の個数分のフレームの位置を表示範囲の最初に設定します。
下の図の場合は、フレームレートが『30』、StartTimeInSecondsを『-2』を入力してある為、**３０×－２=－６０フレーム**を表示範囲の終了フレームとなっています。
StartTimeInSecondsは、プラスでもマイナスでも適用できるため、トラックの範囲が0から始まっていなくても、位置を合わせる事が可能という訳です。

SetViewRangeEndも同様の使い方をします。
下の図の場合は、フレームレートが『30』、EndTimeInSeconds『10』を入力してある為、**３０×１０=３００フレーム**を表示範囲の終了フレームとなっています。

![ビューポート説明.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153021/c16aec2b-d5df-5436-8d75-a4c11aa8c1fe.png)


# おまけ(SetWorkRangeStartノード・SetWorkRangeEndノード)

おまけとして、似たようなノードで『**SetWorkRangeStartノード**』『**SetWorkRangeEndノード**』があり、こちらのノードで何ができるかもわかった為、説明します。
下の図のように、『ViewRange系のノード』では、黄色の範囲のシーケンスエディタのビューポートの範囲で見える範囲の操作できます。
『WorkRange系のノード』では、黄色の範囲のViewRangeを含めた、シーケンスエディタの全体の範囲を操作する事ができます。

![ビューポートの制御可能範囲説明.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153021/12bf82a6-c3fa-1339-7ccf-fa4f7a24483b.png)

具体的に、図で説明します。
以下は、『フレームレート = 30、SetWorkRangeStart = -2、SetWorkRangeEnd =10』に設定した状態です。

![スクリーンショット 2025-01-15 182156.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153021/10d9bb00-793b-6d52-9f19-ec46d8c5ca81.png)

これを、SetWorkRangeStartとSetWorkRangeEndを2倍の数字にしてみます。
以下は、『フレームレート = 30、SetWorkRangeStart = -4、SetWorkRangeEnd =20』に設定した状態です。

![ビューポート説明_WorkRange.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153021/5e3bda10-37c7-1e0e-a6c7-7e82010b1376.png)

四角で囲っている数字に注目してください。
数字が2倍になっている事が確認できます。また、真ん中のバーも長さが変わっています。

『SetViewRangeStartノード』『SetViewRangeEndノード』『SetWorkRangeStartノード』『SetWorkRangeEndノード』には、Getterも存在しています。
今回の説明で、何を設定する事が分かった為、Getterが返す数字の意味も理解できると思います。


# 最後に

今回は、実装されているけど、ドキュメント無いから使い方が分からないノードを検証してみました。
[Unreal Engine Forum](https://forums.unrealengine.com/categories?tag=unreal-engine)で聞いたとしても、返事が返ってこない場合もあります。
結局のところ、自分で実際に使って調べてみるしかないという事も、しばしばある為、そこで分かった事をQitaに残せたらと考えています。