我用鼠标在屏幕上移动图像并将其放置在所需位置。我在屏幕底部有一个面板,我想检测图像何时在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");
}
}
答案 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);
}
}
注意:在智能手机上键入内容,因此没有保修,但我希望这个主意会清楚