从昨天起,我的团结游戏在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;
}
剖析器显示了这个:
如何从30fps解锁?
答案 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设置,所以那里仍然存在问题。
答案 2 :(得分:0)
如其他答案所述,如果Unity将您的帧率锁定为30左右。矿井被锁定为30 FPS,只需在您的Application.targetFrameRate = 60;
方法中添加Start()
,或者在应用程序生存期内设置帧速率即可。
void Start()
{
Application.targetFrameRate = 60;
}