Unity スクロールビューのスクロールをスクリプトから操作する。


日本語の資料があまり引っかからなかったので備忘録としてまとめておく

1.ScrollRect.verticalNormalizedPositionを使う

公式ドキュメント
https://docs.unity3d.com/ScriptReference/UI.ScrollRect-verticalNormalizedPosition.html
ScrollRect.verticalNormalizedPositionの値を「1」にすると一番上に、「0」にすると一番下になる。
例どおり「0.5」にすると真ん中あたりになる。
この位置というのはおそらく、スクロールバーのつまみ部分の一番下を指している。

ところがこれを使った場合、スクロールビューに大きさが不定の要素を追加した後にスクロールを一番下までもっていこうとしてもうまくいかない場合があった。条件がわからない・・・。

2.ScrollRect.velocityを使う

ちょっと強引な方法。

  ScrollRect sr;
  ~~~省略~~~
  sr.velocity=new Vector2(0f,1000f);

特定の方向に指定したスクロール量スクロールさせることによって一番下までもっていく。
大体下までもっていけるものの、例えば例にあげたコードの場合であればyが1000以上のものをスクロールビューに追加した場合はやっぱり隙間ができる。

どんな要素が追加された場合でも綺麗に一番下までもっていこうとしたら要素の高さを取得までしないといけない予感がする。

ちなみに今回「スクロールビューの最下部に新しい要素を追加したときに最下部までスクロールさせる」という処理を実装するためにスクロールの方法を調べていたのですが、
前述のとおり高さが不定だとなかなかうまくいかないのでスクロールビューの上に追加していく形にしました・・・
上なら高さ関係ないからねうん


あわせて読みたい