京城遊戲人-Day15: Unity 中 SrollRect 的滾動邊界問題

京城遊戲人-Day15: Unity 中 SrollRect 的滾動邊界問題

-

-

一般添加完一個 ScrollView 之後的結構是這樣的:

Canvas
    -Viewport
        -Content
            -Item0
            -Item1
            -Item2

本文的方法是通過控制 Content 來實現邊界控制的問題,即滑動到最下面不要再劃了、最上面也不要再向上了。這個問題一般只出現在需要 ScrollView 的 Movement Type 爲unrestricted時。

  1. 給 ScrollView 的 On Value Changed 事件添加一個對應的函數,比如叫 OnScrollValueChanged
  2. 在這個函數所在的腳本里,要想辦法拿到 Content
  3. 在這個腳本中添加如下代碼,假設你也是想在 Y 方向限制滾動

    public void OnScrollValueChanged(Vector2 value) {
        Vector3 pos = ScrollContent.transform.position;
        if (pos.y > maxY) // maxY 要根據你的情況自己設定
        {
            pos.y = maxY;
        }
        else if (pos.y < minY) { // minY 要根據你的情況自己設定
            pos.y = minY;
        }
        ScrollContent.transform.position = pos;
    }
    

其中如果是使用 GridLayoutGroup 的話,加入橫向只有一個 grid,縱向就要知道高度。如果是一開始位於最下面(向 CandyCrush 首頁那樣),則可以這樣寫:

    float maxY = Constants.ScreenHeight * count * 0.5f - Constants.ScreenHeight;
    float minY = Constants.ScreenHeight * count * 0.5f * -1;

注意:其中 ScreenHeight 要根據你在攝像機處設置的 Size 值決定(就是 Size 的兩倍)。count 就是你的縱向 grid 行數。

-

-

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章