首页 > 解决方案 > Unity 仅检测图像碰撞 OnEndDrag

问题描述

我用鼠标在屏幕上移动图像并将其放置在我想要的位置。我在屏幕底部有一个面板,我想检测图像何时触及内部OnEndDrag

我知道我可以使用

void OnCollisionEnter2D(Collision2D collision) { 
    if (collision.gameObject.tag == "Panel") { 
        Destroy(gameObject); 
    } 
}

但是我想检查一下:

public void OnEndDrag(PointerEventData eventData)
{
    if (this.gameObject.tag != "Clone")
    {
        transform.gameObject.SetActive(false);
    }
}

*** 更新我已根据建议更新我的代码。Debug.Log("Image is over panel");但是,当我将图像放在面板上时,我无法获得。我将脚本附加到图像上,并且面板上有一个 Box Collider 2D。

public void OnEndDrag(PointerEventData eventData)
{
    //Getting corners of Image
    Vector3[] corners = new Vector3[4];
    GetComponent<RectTransform>().GetWorldCorners(corners);

    Debug.Log("World Corners");
    for (var i = 0; i < 4; i++)
    {
        Debug.Log("World Corner " + i + " : " + corners[i]);
    }

    var bottomLeft = corners[0];
    var topRight = corners[2];

    var panelCollider = Physics2D.OverlapArea(bottomLeft, topRight);

    if (panelCollider && panelCollider.gameObject.tag == "Panel")
    {
        Debug.Log("Image is over panel");
    }
}

标签: c#unity3d

解决方案


您可以使用 egPhysics2D.OverlapArea和分数使用 egRectTransform.GetWorldCorners取决于您的设置。大概是这样的

public void OnEndDrag(PointerEventData eventData)
{
    if (gameObject.tag == "Clone") return;

    var corners = GetComponent<RectTransform>().GetWorldCorners();

    var bottomLeft = corners[0];
    var topRight = corners[2];

    var collider = Physics2D.OverlapArea(bottomLeft, topRight);

    if(collider && collider.gameObject.tag == "Panel")
    {
        Destroy(gameObject);
    }    
    else
    {
        gameObject.SetActive(false);
    }
}  

注意:在智能手机上打字,所以没有保修,但我希望这个想法很清楚


推荐阅读