- Home /
Question by
pigaroos · Jul 25, 2019 at 12:38 PM ·
uibuttonsscrollview
How to make ScrollView snap to elements?
I tried so set up a ScrollView that contains three buttons, with the view snapping to the nearest button, in a way that there's always one button in the center of the screen and not in-between. But there's something wrong here, as the view snaps to either between the first 2 buttons or leaves the screen entirely. Here it is:
public RectTransform panel; //hold the viewport
public RectTransform center; //empty object to compare the distance for each button relative to the center
public Button[] buttons; // the 3 buttons
public float[] distance; // each buttons' distance to the center
public bool dragging = false; //only want to snap when player is not dragging
public int buttonDistance; //hold the distance between each button
public int minButtonNum; //number of the button that's closest to center
private void Start()
{
int buttonLength = buttons.Length;
distance = new float[buttonLength]; //setting the size of distance array to be the same size as buttons array
//distance between buttons (they're all the same distance so we only check for 2 of them)
buttonDistance = (int)Mathf.Abs(buttons[0].GetComponent<RectTransform>().anchoredPosition.x - buttons[1].GetComponent<RectTransform>().anchoredPosition.x);
}
private void Update()
{
for (int i = 0; i < buttons.Length; i++)
{
//distance between button and center
distance[i] = Mathf.Abs(center.transform.position.x - buttons[i].transform.position.x);
}
float minDistance = Mathf.Min(distance);
for (int o = 0; o < buttons.Length; o++)
{
if(minDistance == distance[o])
{
minButtonNum = o;
}
}
if (!dragging)
{
LerpToButton(minButtonNum * -buttonDistance);
}
}
void LerpToButton(int position)
{
float newX = Mathf.Lerp(panel.anchoredPosition.x, position, 10f * Time.deltaTime);
Vector2 newPosition = new Vector2(newX, panel.anchoredPosition.y);
panel.anchoredPosition = newPosition;
}
public void StartDrag()
{
dragging = true;
}
public void EndDrag()
{
dragging = false;
}
Comment
Your answer
Follow this Question
Related Questions
How can you make images appear on (UI) buttons in a scroll box/scrollable list/scrollview? 0 Answers
Chat Message Box with Dynamic Message Sizes help 1 Answer
UI: Tooltip for multiple images behind bigger button? 1 Answer
Unity - destroy clone child object (button) 1 Answer
Menu not getting Keyboard Input 0 Answers