Unity移动设备30fps锁定

时间:2017-10-31 08:53:08

标签: c# unity3d

从昨天起,我的团结游戏在Android设备上锁定了30fps。之前它像150fps ..我禁用了v-sync。这是我昨天添加的唯一脚本:

public static class SaveLoadProgress {

public static void Save()
{
    LevelManager levelManager = GameObject.Find ("GameManager").GetComponent<LevelManager> ();
    BinaryFormatter bf = new BinaryFormatter();
    FileStream file = File.Create (Application.persistentDataPath + "/savedProgress.1912");
    bf.Serialize(file, levelManager.levelReached);
    file.Close();
}

public static void Load() 
{
    LevelManager levelManager = GameObject.Find ("GameManager").GetComponent<LevelManager> ();
    if(File.Exists(Application.persistentDataPath + "/savedProgress.1912")) 
    {
        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Open(Application.persistentDataPath + "/savedProgress.1912", FileMode.Open);
        levelManager.levelReached = (int)bf.Deserialize(file);
        file.Close();
    }
}
}

我不知道这可能是问题所在。 我把它添加到了GameManager:

    void Awake()
{
    Application.targetFrameRate = -1;
    QualitySettings.vSyncCount = 0;
}

剖析器显示了这个:

https://i.gyazo.com/33a4f6d2f87899568472b1f890bca1ec.png

如何从30fps解锁?

3 个答案:

答案 0 :(得分:6)

默认情况下,根据当前平台,unity会锁定特定值的fps。 Documentation表示Android的默认值是30,大多数Android设备都使用它。它也说:

  

默认的targetFrameRate是一个特殊值-1,表示游戏应该以平台的默认帧速率呈现。

正如文章中所述,移动设备为30。

此外,在编辑器中运行游戏时,你可以拥有尽可能多的fps,它可能是150或更多,但是超过60(iPhone和一些Andoids的最大值)是非常糟糕的做法。如果你有超过60 fps,你实际上看不出差异,因为设备的显示实际上不能渲染每秒超过60帧,但它需要电池和CPU资源以及所有这些计算(额外的60+ fps)是没用的甚至是坏的。

要使你的fps超过30,你可以像在代码中那样将它设置为60:

Application.targetFrameRate = 60;

此外,v-sync主要不支持移动设备,因此您不需要为此烦恼。

答案 1 :(得分:0)

不是答案,而是更多@vmchar答案的扩展注释:

我不同意VSync在移动设备上不起作用。我们将Application.targetFrameRate设置为60,但是CPU破坏GPU仍然存在问题。设置垂直同步会强制其等待。帧速率从https://imgur.com/a/lE0LedF变为https://imgur.com/a/EPq6q7T

团结不建议同时使用两者:

  

Application.targetFrameRate是一个“软” vsync,可用于在没有设置硬件vsync的情况下(例如在服务器上)限制模拟速率。最好不要将targegFrameRate与vSyncCount一起使用,因为CPU帧可能会漂移并导致渲染命令稍后被调度并错过下一个vsync。

尽管在编辑器中不使用VSync设置,所以那里仍然存在问题。

全线程:https://forum.unity.com/threads/gfx-presentframe-taking-4x-as-long-but-only-for-intermittent-periods.538254

答案 2 :(得分:0)

如其他答案所述,如果Unity将您的帧率锁定为30左右。矿井被锁定为30 FPS,只需在您的Application.targetFrameRate = 60;方法中添加Start(),或者在应用程序生存期内设置帧速率即可。

void Start()
{
    Application.targetFrameRate = 60;
}