2016-05-18 3 views
2

PaddleSpriteRendererでレンダリングされています。彼らにはBoxColliderが付いていて、完璧に動作します。ただし、異なる解像度では正しく縮尺されません。だから私はキャンバスにImageを使用するように切り替えました。彼らは完全に拡大します。しかし、Paddleの場合、BoxColliderを正しくスケールすることはできません。私はインターネットを検索し、いくつかの解決策を見つけましたが、それらは完全に間違っていました。ここに私が見たものの大部分に基づく結論がありました。ユニティのキャンバスで画像を拡大するコライダー

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

これは全く機能しませんでした。

ここには、明らかでない場合に必要なイメージがあります。それは私が起こるために必要なものである、

enter image description here

緑色のボックスは、そのイメージで正しいサイズであるが、それは何が起こるかではありません。

本質的にはののサイズにスケールする方法が必要です。 (:それはとにかく動作しませんので、Paddleは、スクリプトを持って、私はちょうどそれを切り取っ注):また

enter image description here

注意ここで

PaddleCanvasの検査官のイメージです。私が2つのGameObjects、ボールとパドルの間の衝突をチェックしているので、私が衝突者を必要とする理由があります。これはポンです。

+0

UI要素にコライダーを使用しないでください。 UI要素をクリックしたい場合は、Buttonコンポーネントを代わりに使用してください。 –

+0

私はそれについてはわかりませんが、私はそれが助けることができると思う、スプライトレンダラとオブジェクトのboxcollider2Dからスプライトを持っている、あなたはスプライトの変更を変更する解決策のサイズを取得する何らかの方法で、 GetComponent ()。sprite.bounds.sizeを使用して、GetComponent ()。bounds.sizeを取得し、スプライト境界からboxcolliderの新しい境界を作成します。方程式を半分にするか、ボックスの衝突範囲を上げる –

答えて

5

SpriteからImageに切り替えたので、 ImageからBox Collider 2Dを削除する必要があります。画像はColliderが動作する必要はありません。画像にImageスクリプトが添付されていることを確認し、Raycast Targetが選択されていることを確認してください。

下記のコードを削除してください。

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

これでゲームロジックコードを変更する必要があります。 Spriteのクリック検出コードはすべて#1から#2に変更する必要があります。

SPRITE VS IMAGE/RAWIMAGE CLICK DETECTION

あなたがタッチを検出しようとしているオブジェクトがImage/Canvasある.IF、これはこれを行う方法はありません。 Image/Canvasでタッチを検出するには、IPointerDownHandlerまたはIPointerClickHandlerから派生し、次に関数を実装する必要があります。

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); 
    } 
} 

を、あなたは、2DテクスチャまたはスプライトにCollider2Dを添付する必要があります。コライダーが2Dテクスチャまたはスプライトを覆っていることを確認してください。コライダーのサイズを変更してください。これは2Dゲームなので、使用しているcollider2Dで終わる必要があります。たとえば、Box Colliderがあり、Box Collider 2Dがあります。 Box Collider 2Dを添付する必要があります。スプライト/テクスチャに追加します。