UNITY3D - Laggy mouselook на устройствах Android - PullRequest
0 голосов
/ 31 января 2019

Я работаю над многопользовательской онлайн-игрой в жанре fps для устройств Android.

В моей игре 12 игроков, 6 игроков в одной стороне и 6 игроков в другой, и они убивают друг друга.

Все в порядке, но есть проблема в моей игре, а именно, когда игроки находятся на сцене, взгляд мыши выглядит медленным.

вот мой код:

public void MyUpdate()
{
    the_time = Time.deltaTime;

    if (Input.touches.Length > 0)
    {
        foreach (Touch t in Input.touches)
        {
            if (t.position.x > Screen.width / 2)
            {
                if (t.phase == TouchPhase.Began)
                {
                    delta = t.deltaPosition;
                }
                if (t.phase == TouchPhase.Began || t.phase == TouchPhase.Moved)
                {
                    delta = -t.deltaPosition;
                    ROTX_ROTY.x += (delta.y * sensitivityX * current_speed_offset_vertical * the_time);
                    ROTX_ROTY.y -= delta.x * sensitivityY * current_speed_offset * the_time;

                    ROTX_ROTY.x = Mathf.Clamp(ROTX_ROTY.x, -clampAngle, clampAngle);

                    MyTransform.rotation = Quaternion.AngleAxis(ROTX_ROTY.y,Vector3.up);
                    x_rot_transform.localRotation = Quaternion.AngleAxis(ROTX_ROTY.x, Vector3.right);
                }
                else if (t.phase == TouchPhase.Ended)
                {
                    delta = t.deltaPosition;
                }
            }
        }
    }
}

Кто-нибудь знает, как я могу решить эту проблему?Потому что это отставание только в моем мышином взгляде.Другие вещи, такие как ходьба, стрельба работает отлично!

Есть ли способ оптимизировать этот код для мобильных телефонов?

Например, я использую Quaternion.AngleAxis вместо Quaternion.Euler, потому что он немного быстрее... Но после всего этого у меня каждые несколько секунд отстает игра.

///////////////////// ОБНОВЛЕНИЯ:

Я изменил часть своего кода и изменил оператор IF на switch case, но моя проблема не решена.

if (Input.touches.Length > 0)
                {
                    foreach (Touch t in Input.touches)
                    {
                        if (t.position.x > Screen.width / 2)
                        {
                            switch (t.phase)
                    {
                        case TouchPhase.Moved:
                            delta = -t.deltaPosition;
                            ROTX_ROTY.x += (delta.y * sensitivityX * current_speed_offset_vertical * the_time);
                            ROTX_ROTY.y -= delta.x * sensitivityY * current_speed_offset * the_time;

                            ROTX_ROTY.x = Mathf.Clamp(ROTX_ROTY.x, -clampAngle, clampAngle);

                            MyTransform.rotation = Quaternion.AngleAxis(ROTX_ROTY.y, Vector3.up);
                            x_rot_transform.localRotation = Quaternion.AngleAxis(ROTX_ROTY.x, Vector3.right);
                            break;
                        default:
                            delta = t.deltaPosition;
                            break;
                    }

                        }
                    }
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...