c# - 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");
}
}
解决方案
您可以使用 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);
}
}
注意:在智能手机上打字,所以没有保修,但我希望这个想法很清楚
推荐阅读
- angular - 从 Angular 版本 4 迁移到版本 10 后分页中断
- statistics - 在这种情况下,二项式检验或逻辑回归是最好的假设检验吗?
- javascript - 批量删除非活动垃圾箱
- c - C程序输出奇怪的字符
- python - 带有女服务员和 Translogger 的 Python 记录器
- python - 如何将 git 命令的输出转换为 Python 变量
- java - 过滤具有绑定值JavaFX的表
- javascript - 如果不需要填写所有输入,如何禁用按钮?
- angularjs - 角度自定义验证器错误错误
- apache-kafka - 如何使用 kafka connect 定义 MQTT 客户端 ID