2016-05-18 90 views
2

我有兩個PaddleSpriteRenderer的呈現。他們附有BoxCollider,他們完美地工作。但是,它們不能以不同的分辨率正確縮放。所以我轉而在畫布上使用Image。它們完美地縮放。但是,我似乎無法使用Paddle正確縮放BoxCollider。我搜索了互聯網並找到了一些解決方案,但他們完全錯誤。這是我基於大部分我看到的結論:Scaling Box Collider to Image in Unity in Canvas

GetComponent<BoxCollider2D>().size = gameObject.GetComponent<RectTransform>().sizeDelta; 

這根本不起作用。

這是我需要的圖片,以防萬一它不明確。

enter image description here

綠框是圖像中的正確的大小,但不是發生了什麼,這就是我需要的情況發生。

所以,基本上我需要一種方法來在BoxCollider2D縮放到ImageCanvas大小。

這裏是PaddleCanvas城管的形象(注:Paddle有劇本,我就剪下來,因爲它沒有工作,反正):

enter image description here

還要注意:我需要對撞機的原因是我正在檢查兩個GameObjects,球和槳之間的碰撞。這是Pong。

+0

不要在UI元素上使用碰撞器。如果您想單擊UI元素,請使用Button組件。 –

+0

我不確定,但我認爲它可以幫助,你有精靈渲染和boxcollider2D精靈在一個對象上,你希望boxcollider2D以某種方式進行縮放,作爲分辨率改變你的精靈變化,獲得大小使用GetComponent ()。sprite.bounds.size並類似地獲取GetComponent ()。bounds.size,並從sprite邊界爲boxcollider創建一個新的邊界。將等式減半或增加你的盒子對撞邊界 –

回答

5

由於您從Sprite轉換爲Image。您必須從Image中刪除Box Collider 2D。圖像不需要碰撞器來工作。只要確保圖像附有Image腳本,並確保選擇了Raycast目標

刪除下面的代碼。

GetComponent<BoxCollider2D>().size = gameObject.GetComponent<RectTransform>().sizeDelta; 

您現在必須更改您的遊戲邏輯代碼。您的所有Sprite點擊檢測代碼必須從#1更改爲#2

SPRITE VS IMAGE/RAWIMAGE CLICK DETECTION

。如果你想檢測觸摸與是Image/Canvas的對象,那麼這不是如何做到這一點。要使用Image/Canvas檢測觸摸,您必須使用必須從IPointerDownHandlerIPointerClickHandler派生出來,然後實現它們的功能。

public class YourClass : MonoBehaviour,IPointerDownHandler,IPointerClickHandler 
{ 
    public void OnPointerClick(PointerEventData eventData) 
    { 
     Debug.Log("Clicked"); 
    } 

    public void OnPointerDown(PointerEventData eventData) 
    { 
     Debug.Log("Down"); 
    } 

} 

。現在,如果遊戲對象要檢測觸摸與僅僅是一個2D紋理或雪碧,然後使用下面的代碼:

if (Input.GetMouseButtonDown(0)) 
{ 
    Vector2 cubeRay = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
    RaycastHit2D cubeHit = Physics2D.Raycast(cubeRay, Vector2.zero); 

    if (cubeHit) 
    { 
     Debug.Log("We hit " + cubeHit.collider.name); 
    } 
} 

對於這個工作,你必須重視Collider2D的2D紋理或雪碧。確保對撞機通過重新確定對撞機的大小來覆蓋2D紋理或Sprite。由於這是2D遊戲,因此您正在使用的任何collider必須以2D結尾。例如,有一個Box Collider,並且有一個Box Collider 2D。您必須附上Box Collider 2D。到雪碧/紋理。