void UpdateSeamlessPagePositions() { if (!Application.isPlaying) { return; } if (!LoopSeamlessly) { return; } //if (NumberOfPages <= 1) return; // there's no point in adjusting page positions if we only have one page if (NumberOfPages <= 3) { return; } if (ShowPagePreviews) { UpdateSeamlessPagePositions_PagePreviews(); return; } float pageSize = ScrollRect.GetPageSize(); float totalSize = ScrollRect.GetTotalSize(); float offset = ScrollRect.GetOffset(); //Debug.Log(offset + " ~~ " + pageSize); //Debug.Log("Distance from start " + offset + ". Distance from end " + (totalSize - offset)); // let's give it a bit more breathing room (if we have enough pages to do so) if (NumberOfPages > 3) { pageSize *= 1.5f; } if (offset <= pageSize) { MoveLastPageToStart(); } else if (offset >= totalSize - pageSize) { MoveFirstPageToEnd(); } }
void AdjustScrollPositionAfterPageMoved(eDirection directionMoved) { var oneOrMinusOne = directionMoved == eDirection.Left ? -1 : 1; float pageSize = ScrollRect.GetPageSize(); var directionVector = ScrollRect.GetDirectionVector(); var adjustment = (directionVector * (pageSize + SpaceBetweenPages) * oneOrMinusOne); ScrollRect.ResetDragOffset = true; ScrollRect.content.anchoredPosition += adjustment; UpdatePages(); // if we're already scrolling, stop, recalculate, and scroll from there if (scrollCoroutine != null) { scrollRectAnimation_InitialPosition += adjustment; scrollRectAnimation_DesiredPosition += adjustment; } }