/// <summary>項目が選択された</summary> public void OnSelect(int index = -1) { if (onSelect != null) { Interactable = false; onSelect.Invoke(index); } }
/// <summary>隙間の抹消</summary> private void destroyDummy(GameObject element) { if (element != null) { element.transform.SetParent(content.transform); var index = dummy.transform.GetSiblingIndex(); element.transform.SetSiblingIndex(index); element = null; if (onEndOrder != null) { onEndOrder.Invoke(index); } } Destroy(dummy.gameObject); }
/// <summary>隙間の生成</summary> private GameObject createDummy(GameObject parent, GameObject element) { var obj = new GameObject("DummyElement", new Type [] { typeof(RectTransform), typeof(ElementIndex), }); obj.transform.SetParent(parent.transform); obj.transform.SetSiblingIndex(element.transform.GetSiblingIndex()); element.transform.SetParent(transform); var rect = obj.GetComponent <RectTransform> (); var sorceRect = element.GetComponent <RectTransform> (); rect.sizeDelta = sorceRect.sizeDelta; rect.pivot = sorceRect.pivot; rect.localRotation = sorceRect.localRotation; rect.localScale = sorceRect.localScale; var index = element.GetComponentInChildren <ElementIndex> ().Index; obj.GetComponent <ElementIndex> ().Index = index; if (onBeginOrder != null) { onBeginOrder.Invoke(index); } return(obj); }
/// <summary>隙間位置の更新 (項目から呼ばれる)</summary> public void UpdateDraggingPosition(Vector2 pos) { var normarizedContentPosition = Vector2.Max(Vector2.Min((pos - contentRect.position) / contentRect.size, Vector2.one), Vector2.zero); var index = Mathf.Clamp((elementsCount - 1) - Mathf.FloorToInt(normarizedContentPosition.y / (1f / elementsCount)), 0, elementsCount - 1); if (dummy.transform.GetSiblingIndex() != referencePointsCount + index) { dummy.transform.SetSiblingIndex(referencePointsCount + index); if (onUpdateOrder != null) { onUpdateOrder.Invoke(index); } } var delta = pos.OutArea(viewportRect); if ((delta.y < 0f && scrollRect.verticalNormalizedPosition >= 0f) || (delta.y > 0f && scrollRect.verticalNormalizedPosition <= 1f)) { if (delta.y > 0f && scrollRect.verticalNormalizedPosition < 0f) { scrollRect.verticalNormalizedPosition = 1e-5f; // 脱出速度的な何か (ドラッグ中に下端に達した後、上向きに自動スクロールしない場合は、この数値を大きくしてみてください。) } scrollRect.velocity = -delta * autoScrollSpeed; } }