//позиция скрола
public Vector2 scroll = Vector2.zero;
//смещение при касании экрана
public int offsetMove;
void OnGUI () {
//создаем ScrollView в два раза шире текущего окна. Для примера
scroll = GUI.BeginScrollView (new Rect (0, 0, Screen.width, Screen.height),
scroll, new Rect (0, 0, Screen.width * 2, Screen.height));
//кнопки
GUI.Button(new Rect (20, 40, 40, 120, "Кнопка");
GUI.Button(new Rect (80, 40, 40, 120, "Кнопка 2");
GUI.EndScrollView ();
}
void Update(){
//если речь идет о мыши, то просто работаем с ней
#if UNITY_EDITOR || UNITY_WEBPLAYER
//нажали левую кнопку, получили смещение
if (Input.GetMouseButtonDown(0)){
offsetMove = (int) (scrollPlanet.x + Input.mousePosition.x);
}
//удерживаем нажатой, получаем положение скрола исходя от смещения
if (Input.GetMouseButton(0)){
scroll = new Vector2(offsetMove - Input.mousePosition.x, 0);
}
#endif
// если речь идет о мобильных системах, то почти тоже самое. Хотя у меня тут лаги, еще и Remote странно работает (скорее не работает)
#if UNITY_ANDROID
// Вычисляем точку начала смещения
if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began) {
offsetMove = (int) (scrollPlanet.x + Input.mousePosition.x);
}
if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved) {
scrollPlanet = new Vector2(offsetMove - Input.GetTouch(0).deltaPosition.x, 0);
}
#endif
}