示例#1
0
    /// <summary>
    /// 检测是否有碰撞
    /// </summary>
    /// <param name="CheckChild"></param>
    /// <returns></returns>
    public DragComponentSlot GetColliderBox(DragComponent CheckChild)
    {
        DragComponentSlot minDistanceChild = null;
        float             minDistance      = 1000;

        foreach (var child in DragChildList)
        {
            if (child.IsCheckMySelf)
            {
                float distance = Vector3.Distance(child.ComponentArea.position, CheckChild.ComponentArea.position);
                if (CheckChild != child && distance < minDistance)
                {
                    minDistance      = distance;
                    minDistanceChild = child;
                }
            }
        }
        if (CheckIsCollision(CheckChild, minDistanceChild))
        {
            return(minDistanceChild);
        }
        else
        {
            return(null);
        }
    }
示例#2
0
    void CheckIsColliderBox()
    {
        DragComponentSlot colliderBox = dragTool.GetColliderBox(this);

        if (colliderBox != null)
        {
            if (colliderBox != LastCollisionSlot)
            {
                LastCollisionSlot = colliderBox;
                colliderBox.OnDragComponentHover();
            }
        }
        else
        {
            LastCollisionSlot = null;
        }
    }
示例#3
0
    /// <summary>
    /// 检测两个是否碰撞
    /// </summary>
    /// <param name="childA"></param>
    /// <param name="childB"></param>
    /// <returns></returns>
    bool CheckIsCollision(DragComponent childA, DragComponentSlot childB)
    {
        Transform childAParent = childA.transform.parent;
        Transform childBParent = childB.transform.parent;

        childA.transform.parent = transform;
        childB.transform.parent = transform;
        Vector3     positionA    = childA.ComponentArea.localPosition;
        Vector3     positionB    = childB.ComponentArea.localPosition;
        BoxCollider boxColliderA = childA.ComponentArea.collider as BoxCollider;
        BoxCollider boxColliderB = childB.ComponentArea.collider as BoxCollider;
        //Vector3 scaleA = boxColliderA.size;
        //Vector3 scaleB = childB.ComponentArea.localScale;
        bool isXCollision = Mathf.Abs(positionA.x - positionB.x) < (boxColliderA.size.x / 2 + boxColliderB.size.x / 2);
        bool isYCollision = Mathf.Abs(positionA.y - positionB.y) < (boxColliderA.size.y / 2 + boxColliderB.size.y / 2);

        //TraceUtil.Log(string.Format("检测是否碰撞:{0}和{1},是否碰撞:{2}", childA.gameObject.name, childB.gameObject.name, isXCollision && isYCollision));
        childA.transform.parent = childAParent;
        childB.transform.parent = childBParent;
        return(isXCollision && isYCollision);
    }
示例#4
0
 public void AddDragSlot(DragComponentSlot dragChild)
 {
     DragChildList.Add(dragChild);
 }