Как я могу перестать получать положение мыши элементов пользовательского интерфейса в Unity2D?

#unity3d #input

#unity3d #ввод

Вопрос:

Я создаю мобильную игру, в которой есть простой круг с прикрепленной к нему ручкой, им можно управлять и его можно поворачивать с помощью положения мыши, я использую приведенный ниже код для управления ручкой.

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

В этой мобильной игре пользователь может поворачивать игрока, перетаскивая его по экрану, и может перемещать игрока, прикладывая силу в направлении, противоположном направлению точки огня, всякий раз, когда нажата кнопка добавления силы, но проблема в том, что всякий раз, когда я нажимаю кнопку, игрок принимает ввод.Наведите курсор мыши на положение этой кнопки и повернитепо направлению к кнопке, вот почему она всегда будет двигаться в одном направлении, противоположном кнопке. Я хотел знать, что я могу сделать, чтобы не получать Input.MousePosition кнопки, которая находится на холсте и может изначально получить положение только в пространстве камеры. Любой ответ будет оценен, заранее спасибо!

Ответ №1:

Вы можете использовать EventSystem.IsPointerOverGameObject. Этот метод проверит, находится ли ваш указатель (мышь / джойстик) на каком-либо из элементов пользовательского интерфейса. Добавьте условие if перед получением положения мыши.

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