京城游戏人-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 行数。

-

-

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