Unity C # нажмите и проведите пальцем по Android - PullRequest
0 голосов
/ 08 сентября 2018

Я сейчас играю в простую игру в единстве с препятствиями, это бесконечная игра, и игрок может прыгать, двигаться вправо и влево, чтобы избежать этих препятствий. Игра работает с устройствами asus и huawei, а на samsung - нет. На устройствах Samsung плеер не прыгает, когда я касаюсь экрана, но смахивание работает.

Мой код:

void change()
{
    if (Input.touchCount > 0)

    {

        Touch touch = Input.touches[0];



        switch (touch.phase)

        {

            case TouchPhase.Began:

                startPos = touch.position;

                break;



            case TouchPhase.Ended:



                float swipeDistHorizontal = (new Vector3(touch.position.x, 0, 0) - new Vector3(startPos.x, 0, 0)).magnitude;

                if (swipeDistHorizontal > minSwipeDistX)

                {

                    float swipeValue = Mathf.Sign(touch.position.x - startPos.x);

                    if (swipeValue > 0)
                        {//right swipe

                        anim.Play(change_Line_Animation);
                        transform.localPosition = second_PosOfPlayer;

                        SoundManager.instance.PlayMoveLineSound();

                    }
                    else if (swipeValue < 0)
                    {//left swipe

                        anim.Play(change_Line_Animation);
                        transform.localPosition = first_PosOfPlayer;

                        SoundManager.instance.PlayMoveLineSound();

                    }


                }

                else {

                      if (!player_Jumped){

                          anim.Play(jump_Animation);
                          player_Jumped = true;

                          SoundManager.instance.PlayJumpSound();
                      }

                }

                break;
        }
    }
}

Эта функция вызывается в функции update ().

Спасибо

1 Ответ

0 голосов
/ 08 сентября 2018

Поскольку я новичок здесь, я не могу использовать комментарии, чтобы задавать дополнительные вопросы. Что именно не работает при использовании Samsung?

Вы могли бы упростить вычисления, хотя.

                float swipeValue = touch.position.x - startPos.x; //Mathf.Sign(touch.position.x - startPos.x);

                if (swipeValue > 0)
                    {//right swipe

                    anim.Play(change_Line_Animation);
                    transform.localPosition = second_PosOfPlayer;

                    SoundManager.instance.PlayMoveLineSound();

                }
                else if (swipeValue < 0)
                {//left swipe

                    anim.Play(change_Line_Animation);
                    transform.localPosition = first_PosOfPlayer;

                    SoundManager.instance.PlayMoveLineSound();

                }

Вам не нужен Math.Sign, если сравнивать только с> или <0. </p>

            case TouchPhase.Began:

              startPos = touch.position.x; // startPos could be float

            break;

и, следовательно,

float swipeDistHorizontal = Mathf.Abs(touch.position.x - startPos);

Если в игре используется только горизонтальное смахивание, вам не нужны векторы для хранения и вычисления дельты смахивания.

Если вы предоставите больше информации, я с радостью помогу вам.

...