//結束Drag:定位 void OnEndDrag() { graggingObj.transform.position = uiLayoutOriginPos_list[graggingObj.ui_sort_order]; uiLayout_list.Sort((x, y) => x.ui_sort_order.CompareTo(y.ui_sort_order)); graggingObj = null; //結束 if (eEndDrag != null) { eEndDrag(uiLayout_list); } }
List <Vector2> uiLayoutOriginPos_list = new List <Vector2>(); //原本的位置(一開始固定,別改) private void Start() { //取得子物件+排列 int i = 0; foreach (Transform child in transform) { uiLayout_list.Add(child.GetComponent <GamePlay_UI_btn>()); uiLayoutOriginPos_list.Add(child.transform.position); //下排UI產生 if (uiLayout_list.Count > i) { GamePlay_UI_btn _ui_btn = uiLayout_list[i].GetComponent <GamePlay_UI_btn>(); _ui_btn.ui_sort_order = i; } else { //跳過 uiLayout_list[i].gameObject.SetActive(false); uiLayout_list[i].GetComponent <GamePlay_UI_btn>().ui_sort_order = 999 + i; i++; continue; } //掛上event監聽 EventTrigger trigger = child.GetComponent <EventTrigger>(); EventTrigger.Entry entry = new EventTrigger.Entry(); EventTrigger.Entry entry_dragging = new EventTrigger.Entry(); EventTrigger.Entry entry_end = new EventTrigger.Entry(); //entry.eventID = EventTriggerType.PointerDown; entry.eventID = EventTriggerType.InitializePotentialDrag; entry_dragging.eventID = EventTriggerType.Drag; entry_end.eventID = EventTriggerType.EndDrag; entry.callback.AddListener((eventdata) => { btn_OnSelected(); }); entry_dragging.callback.AddListener((eventdata) => { SortWhenDragging(); }); entry_end.callback.AddListener((eventdata) => { OnEndDrag(); }); trigger.triggers.Add(entry); trigger.triggers.Add(entry_dragging); trigger.triggers.Add(entry_end); child.name = i++.ToString(); } GamePlay_FingerControler.OnTouched += Gragging; }
//移動時交換位置: void SwapOriginPos(GamePlay_UI_btn tra1, GamePlay_UI_btn tra2) { tra1.transform.position = uiLayoutOriginPos_list[tra2.ui_sort_order]; tra2.transform.position = uiLayoutOriginPos_list[tra1.ui_sort_order]; string _temp = tra1.ui_sort_order.ToString(); tra1.name = tra2.ui_sort_order.ToString(); tra2.name = _temp; int _temp_order = tra1.ui_sort_order; tra1.ui_sort_order = tra2.ui_sort_order; tra2.ui_sort_order = _temp_order; }
public void btn_OnSelected() { if (EventSystem.current.currentSelectedGameObject == null) { return; } ; GamePlay_UI_btn selected = EventSystem.current.currentSelectedGameObject.GetComponent <GamePlay_UI_btn>(); if (selected == null) { return; } graggingObj = selected; }