[英]Unity Physics2D.Raycast having trouble with large 2D colliders
我有一個非常簡單的Unity組件,用於檢查鼠標屏幕位置是否在2D對撞機內。
var screenRay = Camera.main.ScreenPointToRay(new Vector3(eventData.position.x, eventData.position.y, 0.0f));
RaycastHit2D hit = Physics2D.Raycast(screenRay.origin, screenRay.direction);
if (hit)
{
Debug.Log("hit something");
}
我將Image對象添加到在“屏幕空間:相機”中渲染的Canvas,並將Box Collider 2D組件添加到圖像。
上面的代碼在鼠標指針位於Box Collider 2D內部但不在外部時記錄“命中”,這就是我想要的。
但是,僅當盒對撞機的尺寸小於120 x 120時,這才是正確的。 如果是那個大小或更大,我開始在屏幕上的任何地方獲取日志輸出-Physics2D.Raycast在整個屏幕上返回內容。 Physics2D.Raycast似乎認為對撞機突然占據了整個屏幕,但實際上並沒有,甚至還沒有關閉。 將對撞機縮小到115 x 115可以解決此問題,但是正如您可以想象的那樣,我不希望在某些對撞機尺寸上出現特殊行為。 圖片尺寸為100x100。 如果我將對撞機的大小設置為1x1(幾乎看不到),則Raycaster會在整個100x100的圖像上命中目標。
圖像的尺寸無效。 有誰知道為什么這個魔術大小突然大於指定的大小?
編輯:CircleCollider2D有相同的問題-如果半徑超過100左右,我突然在整個屏幕上與它碰撞。
Physics2D.Raycast打算在2D空間中使用。 當我在3D空間中使用UI元素時,Physics2D.Raycast無法按預期工作,因此應改用GetRayIntersection。 這段代碼運行良好:
var screenRay = Camera.main.ScreenPointToRay(new Vector3(eventData.position.x, eventData.position.y, 0.0f));
RaycastHit2D hit = Physics2D.GetRayIntersection(screenRay);
if (hit)
{
Debug.Log("hit something");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.