2017-04-20 1 views
0

클릭 할 수 있도록 설계된 collider2d가있는 gameobject가 있으며 플레이어가 움직이는 동안 카메라를 따라갈 UI 버튼이 있습니다. 가끔씩 겹칠 수 있습니다. 중복되는 부분이있을 때 사용자가 겹침 영역을 클릭하면 사용자가 해당 객체 (raycast2d 히트)를 클릭하여 버튼을 클릭하지 못하게해야합니다.raycast2d가

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 ​​개체가 위에있을 때 클릭하지 않으려는 게임 개체에서이 개체를 참조해야합니다. 게임 객체에서 은 이런 식으로 뭔가 :

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

제 질문은 당신이 참조하는 코드가 UI 버튼을 클릭 할 경우 경우, 감지하는 방법은, 클릭 할 수있는 UI 버튼을 방지하는 방법입니다 내가 맞췄 니? – armnotstrong