UNITY3D-Android设备上的松散mouselook

时间:2019-01-31 16:06:00

标签: android unity3d optimization mobile lag

我正在为Android设备开发在线多人fps游戏。

我的游戏中有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;
                    }

                        }
                    }
                }

0 个答案:

没有答案