Light Black
Light Black

Reputation: 3

How can I stop getting mouse position of UI Elements in Unity2D?

I'm making a mobile game where there is a simple circle with a handle attached to it, it can be controlled and can be rotated with mouse position, I'm using below code for handle control.

  
     public class Controller : MonoBehaviour
     {
     
         private float m_force = 0.04f; 
     //  amount of force for the player (circle and handle both)
         public GameObject firePoint;  // It is the tip of the handle which will shoot bullets
         public float senstivity = 1f;
     // senstivity control
     
     
     
         
         public void ControlSenstivity(float index)
         {
             senstivity = index;
         }
         void Update()
           {
            
            
            
             //Get the Screen positions of the object
             Vector2 positionOnScreen = Camera.main.WorldToViewportPoint(transform.position) ;
           
               //Get the Screen position of the mouse 
               Vector2 mouseOnScreen = Camera.main.ScreenToViewportPoint(Input.mousePosition) ;
     
            
               //Get the angle between the two points
             float angle = AngleBetweenTwoPoints(positionOnScreen, mouseOnScreen) ;
     
     
        
     // it will control the rotation of player (circle and handle both)
                 transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, angle) * senstivity);
             
         }
     
           float AngleBetweenTwoPoints(Vector3 a, Vector3 b)
           {
               return Mathf.Atan2(a.y - b.y, a.x - b.x) * Mathf.Rad2Deg ;
           } 
     
     // Below function for adding force to the player (both the circle and the handle), this function I added for mobile input whenever the button is pressed
     
         public void AddForce()
         {
     
             
          
             transform.Translate(-firePoint.transform.localPosition.x, 0, 0 * m_force);
     
         }
         
     }
      

In this mobile game the user can rotate the player by dragging on the screen and can move the player by exerting force in the opposite direction of fire point whenever the add force button is pressed but the problem is that whenever I press the button the player takes Input.mousePosition of that button position and get rotated towards the button, that's why it will always move in one direction that is opposite of button. I wanted to know what can I do to not get Input.mousePosition of button which is in the canvas and can originally get position only of camera space. Any response will be appreciated, Thanks in advance!

Upvotes: 0

Views: 981

Answers (1)

SeLeCtRa
SeLeCtRa

Reputation: 627

You can use EventSystem.IsPointerOverGameObject. This method will check if your pointer(mouse/joystick) is on any of the UI elements. Add if condition before getting mouse position.

// This will ignore all UI game objects
if (!EventSystem.current.IsPointerOverGameObject())
{
    //Get the Screen positions of the object
    Vector2 positionOnScreen = Camera.main.WorldToViewportPoint(transform.position);
}

Upvotes: 0

Related Questions