2017-04-20 18 views
0

私はクリック可能に設計されたcollider2dでゲームオブジェクトを持っています。また、プレーヤーが動いている間にカメラに従うUIボタンがあります。オーバーラップエリアをクリックしたときに、ユーザーがオブジェクトをクリックしたいと思っています(これはraycast2dヒットによって行われました)ので、ボタンをクリックしないようにしてください。クリック可能なゲームオブジェクトのレイキャスト注入のunity2d raycast2dヒット時にUiボタンがクリックされるのを防ぐ

スクリプトは以下の通りである:

private void checkTouch() 
    { 
     if (Input.touchCount > 0 || Input.GetMouseButtonDown(0)) 
     { 
      Vector2 rayPos = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y); 
      RaycastHit2D hit = Physics2D.Raycast(rayPos, Vector2.zero, 0f); 
      if (hit) 
      { 
       Debug.Log(hit.collider.gameObject + "is hit"); 
       IInputBehavior inputBehavior = hit.collider.gameObject.GetComponent<IInputBehavior>(); 
       //IInputVehavior was a self-desgined C# interface which has a `OnClick()` method. 

       if (inputBehavior != null) 
       { 
        //here we should prevent the UIButton to be clicked, but how? 

        inputBehavior.OnClick(); 
       } 
      } 
     } 
    } 

答えて

0

わかりましたので、私はあなたの正確なコードを与えることができないので、私は仕事でだが、私は正しい方向にあなたを指すことができます。もともとキャンバスを作ったときには、(どこかのシーンでゲームオブジェクトとして)イベントシステムが生成されているはずです。ゲームオブジェクト内でこれを参照する必要があります。私の質問があれば、あなたは、参照コードはUIボタンがクリックされた場合に検出する方法で、クリックされるUIボタンを防ぐ方法である

if(GetComponent<EventSystem>().IsPointerOverGameObject) { 
    // The mouse is obscured by a UI element 
} else { 
    // The mouse is not over a UI element 
} 

https://docs.unity3d.com/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html

+0

:それはこのようなものです、あなたのゲームオブジェクトで 私はあなたを得た? – armnotstrong

関連する問題