Как предотвратить прокрутку Scroll Rect в Unity? - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу зажать панель только половиной размера экрана.

Как это ...

Настройка холста и прямоугольной прокрутки

Во время перетаскивания событие работает. Панель не может превышать половину своего размера, как предполагалось.

Но всякий раз, когда я быстро перетаскиваю и опускаю панель, она начинает покачиваться и выглядит скользящей.

if (scroll.anchoredPosition.x >= screenWidthHalf) {
                scroll.anchoredPosition = new Vector2(screenWidthHalf, scroll.anchoredPosition.y);
            }

Это выглядит так, если оператор никогда не выполняется, даже если позиция x больше, чем screenWidthHalf.

Полный код.

private int screenWidthHalf;
public RectTransform scroll;
private bool dragging;
float newX;

// Use this for initialization
void Start () {
    screenWidthHalf = Screen.width / 2;

    scroll.anchoredPosition = new Vector2(scroll.rect.width / 2, scroll.anchoredPosition.y);
}

Я думал, что функция lerp вызывает это и пробовал без нее, но это не сработало.

void Update () {
        if (!dragging) {


            if (scroll.anchoredPosition.x > 0) {
                newX = Mathf.Lerp(scroll.anchoredPosition.x, screenWidthHalf, Time.deltaTime * 5f);
                scroll.anchoredPosition = new Vector2(newX, scroll.anchoredPosition.y);
            }
            if((screenWidthHalf - newX)< 0.1f){scroll.anchoredPosition = new Vector2(screenWidthHalf, scroll.anchoredPosition.y);}



            if (scroll.anchoredPosition.x >= screenWidthHalf) {
                scroll.anchoredPosition = new Vector2(screenWidthHalf, scroll.anchoredPosition.y);
            }


            if (scroll.anchoredPosition.x < 0) {
                newX = Mathf.Lerp(scroll.anchoredPosition.x, -screenWidthHalf, Time.deltaTime * 5f);
                scroll.anchoredPosition = new Vector2(newX, scroll.anchoredPosition.y);
            }
            if ((screenWidthHalf + newX) < 0.1f) {scroll.anchoredPosition = new Vector2(-screenWidthHalf, scroll.anchoredPosition.y);}

        }


        if (scroll.anchoredPosition.x > screenWidthHalf) { scroll.anchoredPosition = new Vector2(screenWidthHalf, scroll.anchoredPosition.y); }
        if (scroll.anchoredPosition.x < -screenWidthHalf) { scroll.anchoredPosition = new Vector2(-screenWidthHalf, scroll.anchoredPosition.y); }

    }

Это событие перетаскивания всякий раз, когда я перетаскиваю свиток

public void StartDrag() { dragging = true; }
public void EndDrag() { dragging = false; }

Спасибо.

...