С точки зрения игры, скорость камеры идеальна, но во время тестирования в телефонах скорость камеры намного ниже

В моей игре скорость камеры идеальная, как я и хотел.

В телефонах во время тестирования моей игровой камеры скорость очень низкая. Я не знаю, как это исправить и какова основная причина этой проблемы.

Это скрипт, который я прикрепил к основной камере.

public float translation;
public float highspeed;//highest speed of the camera
public float incfactor;//increasing ,multiplying number
public bool ismoving = false;

private float timer = 0f;
private Rigidbody2D dia;

private void Start()
{
    dia = GetComponent<Rigidbody2D>();
}

private void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
        if (hit.collider != null)
        {

            if (hit.collider.tag == "dialogue")
            {
                Destroy(hit.collider.gameObject);
                ismoving = true;
            }
        }
    }

    if (ismoving == true)
    {
        Updatemove();
    }
}

public void Updatemove()
{
    timer += Time.deltaTime;

    if (timer > 1f && translation < highspeed)
    { //after 1 second has passed...
        timer = 0; // reset timer
        translation += incfactor; //increase speed by 0.5
    }

    transform.Translate(0, translation, 0);
}

1 ответ

Решение

Ты звонишь Updatemove в Update который называется каждый кадр.

Но чем ты Translate на фиксированное значение translation который зависит от кадра (более низкая частота кадров => меньше вызовов => более медленное движение)

Ваш объект будет двигаться со скоростью (translation * framerate) / seconds

чтобы устранить это framerate фактор и получить стабильную, независимую от устройства скорость translation / seconds Вы должны умножить на Time.deltaTime,

так что лучше

public void Updatemove() 
{   
    timer += Time.deltaTime;

    if (timer > 1f && translation < highspeed) 
    { //after 1 second has passed...
        timer = 0; // reset timer
        translation += incfactor ; //increase speed by 0.5
    }

    transform.Translate(0, translation * Time.deltaTime, 0);
}

поскольку Time.deltaTime это довольно небольшое значение (1/ частота кадров = 0,017 (для 60 кадров в секунду)), вам, вероятно, придется увеличить incfactor более или менее в 60

Другие вопросы по тегам