Ejemplo n.º 1
0
 /// <summary>項目が選択された</summary>
 public void OnSelect(int index = -1)
 {
     if (onSelect != null)
     {
         Interactable = false;
         onSelect.Invoke(index);
     }
 }
Ejemplo n.º 2
0
 /// <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);
 }
Ejemplo n.º 3
0
    /// <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);
    }
Ejemplo n.º 4
0
    /// <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;
        }
    }