Я работаю над многопользовательской онлайн-игрой в жанре 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;
}
}
}
}