unity仅检测图像碰撞OnEndDrag

时间:2019-08-11 22:24:33

标签: c# unity3d

我用鼠标在屏幕上移动图像并将其放置在所需位置。我在屏幕底部有一个面板,我想检测图像何时在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");
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用例如Physics2D.OverlapArea,并使用例如RectTransform.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);
    }
}  

注意:在智能手机上键入内容,因此没有保修,但我希望这个主意会清楚