Я хочу зажать панель только половиной размера экрана.
Как это ...
Настройка холста и прямоугольной прокрутки
Во время перетаскивания событие работает. Панель не может превышать половину своего размера, как предполагалось.
Но всякий раз, когда я быстро перетаскиваю и опускаю панель, она начинает покачиваться и выглядит скользящей.
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; }
Спасибо.