Long-Slow-Distance

Programming Notes with Unity

メニュー

[NGUI] ScrollViewのリセット処理

NGUIのScrollViewは非表示→再表示すると、前回のスクロール位置が残ったままで再表示される。
これを初期位置に戻したい場合はResetPositionメソッドを使用するとOK。

が、さらに細かい事を言うと表示を消す前にスクロールに慣性が残っていたり、
スプリング(領域外にドラッグした時に引き戻す処理)が働いていると、
再表示時にそれがいきなり反映されて動いたりする。

気持ち悪いのでこれらも完全にリセットするには
慣性を消して、スプリング処理を無効にしてやる必要がある。

    // 慣性を消す
    scroll_view.currentMomentum = new Vector3(0,0,0);
    // スプリングを無効にする
    scroll_view.DisableSpring();

 

余談だが、NGUIのコンポーネントのメソッドを呼び出す時は

・ゲームオブジェクトのアクティブ時であれば、アクティブにした後
・ゲームオブジェクトの非アクティブ時であれば、非アクティブにする前

にするのが確実と思われる。

タイミングが逆だと1フレーム遅れたりする事が割と今まであった。(Gridのリポジションとか)
おそらくゲームオブジェクトのアクティブ状態を見て処理しているものもあるようである。

関連記事