0

在我的游戏中,相机的速度是我想要的完美。

在手机中,在测试我的游戏相机速度时,速度非常慢。我不知道如何解决这个问题,这个问题的根本原因是什么。

这是我附加到主摄像机的脚本。

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);
}
4

1 回答 1

2

您正在调用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 fps))你可能不得不incfactor或多或少地增加你的一个因子60

于 2019-02-19T18:14:53.367 回答