2016-05-01 5 views
0

私は文字通りユニティC#レイキャスティングの光を研究していましたが、私は何も表示しません。私はチュートリアル、オンラインリソース、スタックオーバーフローに関する質問を勉強しました。そしてUnityが実際にレイキャストを実際に使用しようとするすべての私の試みを最終的に認識することを期待して、単語をコピーしました。ここでは単に私のために動作しませんレイキャストを使用したスクリプトの例です:ユニティC#レイキャストマウスクリック

if (mouseDown) { 
    print ("mouse is down"); 
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
    RaycastHit hit; 
    if (Physics.Raycast(ray, out hit)) { 
     print ("response???"); 
    } 
} 

動作するはずです、私はこのように感じる...しかし、それはありません。 mouseDownは正常に機能していますが、オブジェクトをクリックするとマウスの位置からオブジェクトへのrayhitの認識を拒否します。私はまた、プロジェクトが2Dであることに言及する必要があります。助言がありますか?

+3

2Dの場合は、2Dレイキャストも使用する必要があります。ドキュメント:http://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html –

+0

正しいトラック@GunnarBで私を取得していただきありがとうございます。しかし、レイキャスト関数のパラメータは本当に私を混乱させるものです.RaycastHit変数はどこに配置しますか?私はそれをパラメータの1つとして見ません。また、私はlayerMaskの目的と最小と最大深度のパラメータについて混乱しています。私のためにこれを明確にすることができますか?私は本当にあなたの助けに感謝します – DrakeTruber

+0

私はあなたが私が上にしようとしているものを達成するために関数を使用する方法の例を教えてください? @ GunnarB。 – DrakeTruber

答えて

3

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

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

:あなたがタッチを検出したいゲームオブジェクト場合

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

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

} 

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

.IF #2は、プロジェクトが3D代わりの2Dとして作成された、動作しませんでした。プロジェクトを削除し、新しいプロジェクトを作成して、今度は2Dを選択してください。 #2答えは2D colliderが付いている限り有効です。

+1

'Gunnar B.'のコメントを見ると、その理由がわかります。彼が何を言っているのか分からないと思う。それを簡潔にするために、彼は 'RaycastHit'を' RaycastHit2D'に変更すべきだと伝えています。また、 'Physics.Raycast'は' Physics2D.Raycast'に変更する必要があります。単語「2D」を有するものは、「2D」のものである。これは、あなたのゲームが3Dではなく2Dであるためです。それらを2Dに変更するときは、パラメータを少し変更する必要があります。それでおしまい。 – Programmer

+1

本当に、Gunnar B.があなたがそれを綴るまで私が本当に理解していなかったと思います。私はUnityの新しいブランドです。Unity C#のこれらの単純な側面は、私が好きなほど簡単には実現しません。 @ GunnarBに特別なおかげです。 – DrakeTruber

+1

@DrakeSwartzy youtube上のUnity 2D prrojectチュートリアルに従ってそれを終えたら、2D面でうまくいくでしょう。そのコードは2D用ではなく3D用です。ハッピーコーディング! – Programmer

関連する問題