Не удается решить проблемы с хитбоксами в мобильной игре, созданной в Unity - PullRequest
0 голосов
/ 29 октября 2019

Я занимаюсь разработкой игры, в которой объекты падают с верхней части экрана, и вы пытаетесь нажать на них, прежде чем они достигнут нижней части экрана. Код работает нормально, когда я играл в игру в редакторе (с сенсорными элементами управления, переключенными на элементы управления мышью), за исключением того, что когда я запускаю игру на телефоне, игра, кажется, регистрирует успешный удар, только если слегка коснуться передобъект в направлении, в котором он движется, и не регистрирует попадание, если вы нажмете на заднюю часть или центр объекта. Я собирал и запускал игру более 10 раз, каждый раз пытаясь решить эту проблему, но, похоже, ничего не помоглоВ настоящее время моя теория состоит в том, что мой код для сенсорных элементов управления слишком много работает и / или имеет избыточность, и к тому времени, когда он проверяет, находится ли объект в месте касания, объект переместился в другое место. ,Любые мысли о том, почему блоки хитов отключены, и есть ли лучший способ обнаружения попаданий с помощью сенсорного экрана?

   void FixedUpdate()
     {
         if (IsTouch())
         {
             CheckTouch(GetTouchPosition());
         }
     }


    // Returns true if the screen is touched
         public static bool IsTouch()
         {
             if (Input.touchCount > 0)
             {
                 if (Input.GetTouch(0).phase == TouchPhase.Began)
                 {
                     return true;
                 }
             }
             return false;
         }


     // Gets the position the touch
         private Vector2 GetTouchPosition()
         {
             Vector2 touchPos = new Vector2(0f, 0f);
             Touch touch = Input.GetTouch(0);

             if (Input.GetTouch(0).phase == TouchPhase.Began)
             {
                 touchPos = touch.position;
             }

             return touchPos;
         }

     // Checks the position of the touch and destroys the ball if the 
        ball is touched
         private void CheckTouch(Vector2 touchPos)
         {
             RaycastHit2D hit = 
             Physics2D.Raycast(Camera.main.ScreenToWorldPoint(
             (Input.GetTouch(0).position)), Vector2.zero);

             if (hit.collider != null)
              {
                    destroy(hit.collider.gameObject);
              }
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...