コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】「UGUI Super ScrollView」で1つのプレハブしか使わない場合はスクロールバーの大きさを固定したかった

はじめに

 
「UGUI Super ScrollView」はいろんなスクロールビューが
簡単に実装できるのでとても好きなのですが、

f:id:baba_s:20190325112009g:plain

スクロールするたびにスクロールバーがカクカクするのが気になっていました

おそらくスクロールビューに含まれる要素の大きさが可変でも
問題なくスクロールできるようにするために
このような仕組みになっているのだと思いますが、

スクロールビューに含まれる要素が1種類の場合
(スクロールビューの大きさが事前にわかる場合)は、
スクロールバーがカクカクしないようにしたいと考えました

やってみたこと

LoopListView2 クラスの GetContentPanelSize 関数の中身を

var prefabConfData = mItemPrefabDataList[ 0 ];
var prefab = prefabConfData.mItemPrefab;
var padding = prefabConfData.mPadding;
var rectTransform = prefab.GetComponent<RectTransform>();
var prefabSize = rectTransform.sizeDelta.y + padding;
var count = mItemTotalCount;
var panelSize = prefabSize * count;

return panelSize;

このように置き換えてみたらどうなるか試してみたところ

f:id:baba_s:20190325112502g:plain

スクロールビューをドラッグする場合はスクロールバーの大きさが固定になって
意図した通りに動いてくれたのですが

f:id:baba_s:20190325112610g:plain

スクロールバーを動かした場合はスクロール内の要素が表示されなくなってしまいました

まとめ

「EnhancedScroller」はスクロールビューに含まれる要素の大きさが可変でも
スクロールバーの大きさが固定で表示されるので、
スクロールバーの大きさを固定したければこちらを使用した方が良いかも?