エンドロール画面【絶対調味ロジック】

絶対調味ロジック

今回のエンドロールは、上に流れていくタイプのものにしてみました。
思えば、このタイプのものは初めてで、ほんのりリッチ感がありますね。

テキストをムーブすればよいだろうなと軽めに考えていましたが、
「スキップ」「早送り」などの機能追加によっては、それなりに設計が必要です。

まだ入力系の本実装が済んでいないので、今回はそういった機能はなしのシンプル版スクリプトです。

システム要約

スクロール処理:
DOTween(DOAnchorPosY)を使用し、UIの anchoredPosition を直線移動。

画面外出入り計算:
parentCanvas の画面高さと contentTarget の高さを自動計算し、
画面外下端から画面外上端へ完全通過する移動距離と時間を動的割り出し。

完了時表示用オブジェクト:
スクロール完了時、自動的に SetActive(true) されるオブジェクト。

ジッター(カクつき)対策:
DOTween 内部で SetUpdate(UpdateType.Late) を指定し、描画直前に座標を確定。

高さ自動調整
Content Size Fitter(Vertical Fit: Preferred Size)をアタッチし、コンテンツの長さに応じて Height を動的追従。

コンポーネント構成(UIセットアップ要件)

スクロール対象親オブジェクト (contentTarget):

  • Anchor:Middle-Center (Min:(0.5, 0.5), Max: (0.5, 0.5))
  • Pivot:X:0.5, Y:1(★上端基準)
  • Pivot Y = 1 に設定することで、改行やテキスト追加でサイズが拡張された際、
    上方向へ伸びずに下方向へ正しく領域が広がるようになります。

自動レイアウト設定:

  • Content Size Fitter をアタッチし、Vertical Fit: Preferred Size に設定。

完了時表示オブジェクト (objectToActivateOnComplete):

  • スクロール完了時(および手動完了時)に自動で SetActive(true) されるオブジェクト。

ContentTarget:スクロールさせる対象の親オブジェクト(ロゴやテキストをまとめたRectTransform)
ParentCanvas:画面サイズ基準となるCanvas(未設定の場合はcontentTargetから自動取得します)
ObjectToActivateOnComplete:エンドロール完了時にアクティブ(表示)にするオブジェクト
StartDelay:開始前のディレイ(待機時間・秒)
BaseSpeed:1秒あたりの移動ピクセル数(UI座標単位)
UseUnscaledTime:ポーズ中(Time.timeScale = 0)でも動かすかどうか
Optional Events:エンドロール完了時に追加で実行したい処理があれば設定

運用の要点・注意事項

テキスト更新・改行時:
Content Size Fitter と Pivot Y = 1 が機能しているため、テキストの追加・変更を行ってもスクリプトの修正や手動の座標合わせは一切不要です。

スクロール速度の調整:
基本は baseSpeed(デフォルト: 100f など)を変更するだけで移動速度と全体の尺が自動補正されます。
60FPS環境での微少なチラつきが気になる場合は 60f や 84f など「画面リフレッシュレートに対してキリの良い数値」に少しずらすことで描画がより安定します。

スクリプトの拡張性:
Sys_InputFacade.cs 等への入力切り出しや依存はすべて排除されており、入力系のエラー等を引き起こしません。
もし後から「ボタンを押したら即終了」させたい場合は、
ボタンの OnClick イベントから CompleteRoll() を直接呼ぶことで即時完了処理(指定オブジェクトのアクティブ化)が実行可能です。

エンドロールにも機能を追加してみたかったですが、
今回はさすがに、開発全体の進行度を優先させて、ごっそりとそぎ落としてシンプルにしました。

今後のタイトルでは、
「早送り」「スキップ」「ポーズ」などの機能の他に、なにがしかの演出や遊びを実装してみたいですね。

コメント