private IEnumerator __RecalcLayout() { yield return(new WaitForEndOfFrame()); trace("ScrollSnap_v2 - RecalculateLayout: " + container.childCount); _scrollRect.enabled = true; for (int c = 0; c < _numElements; c++) { var snap = _snapElements[c] = new SnapElement(); snap.rect = (RectTransform)container.GetChild(c); snap.id = c; } var snap0 = _snapElements[0].rect.anchoredPosition; var snap1 = _snapElements[1].rect.anchoredPosition; _distBetweenEach = Mathf.Abs(snap0.x - snap1.x); if (_distBetweenEach <= 0.001) { traceError("Distance is too small!"); yield break; } _posNow = _posLast = CurrentX; _isRecalcOK = true; }
private void FindClosestSnapElement() { float centerX = centerReference.position.x - _posDiff * 2; SnapElement minSnap = null; for (int s = 0; s < _numElements; s++) { var snap = _snapElements[s]; snap.distance = Math.Abs(centerX - snap.rect.position.x); if (minSnap == null || snap.distance < minSnap.distance) { minSnap = snap; } } _snapCurrent = minSnap; }