Я занимаюсь разработкой игры, в которой объекты падают с верхней части экрана, и вы пытаетесь нажать на них, прежде чем они достигнут нижней части экрана. Код работает нормально, когда я играл в игру в редакторе (с сенсорными элементами управления, переключенными на элементы управления мышью), за исключением того, что когда я запускаю игру на телефоне, игра, кажется, регистрирует успешный удар, только если слегка коснуться передобъект в направлении, в котором он движется, и не регистрирует попадание, если вы нажмете на заднюю часть или центр объекта. Я собирал и запускал игру более 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);
}
}