c# - 更改为随机背景导致 android 滞后
问题描述
我正在尝试更改游戏的背景并且它正在工作,但也会导致 android 滞后。
我绑定了两种不同的解决方案,但结果相同。首先,背景变化由一个 int 变量管理,该变量具有两个数字之间的随机值和一个每秒增加 10f 的浮点数,用作分数。
这里还有一些其他代码,但我已经单独删除了它们,似乎是导致滞后的背景代码。
这是当前代码:
rand1 = Random.Range(0, 4);
rand2 = Random.Range(4, 8);
rand3 = Random.Range(8, 12);
//start off with a random blue background
BGlist[rand1].SetActive(true);
// BGmesh.material = BGmat[rand]; //OTHER SOLUTION - change material of mesh renderer
}
void Update()
{
//Set starttext to false if the character move
if (lvlmang.left || lvlmang.right)
{
startText.SetActive(false);
//every second score and speed increases
aliveTime += Time.deltaTime;
if (aliveTime >= 1)
{
scores += 10f;
scores2 += 10f;
speedManager += 10f;
speedManager2 += 10f;
speedManager3 += 10f;
scoreText.text = scores.ToString();
scoreText2.text = scores2.ToString();
aliveTime -= (int)aliveTime; //reset
}
}
//Increase speed after 8 seconds
if (speedManager == 80f)
{
pControl.speed += 0.25f;
speedManager = 0f;
}
//start screen fade every 30 seconds (preparing for background change)
if (speedManager2 == 300f)
{
fadingBG.StartFading();
speedManager2 = 0f;
}
if (speedManager3 == 310f || speedManager3 == 1213)
{
//Random yellow background
//Set the previous backgrounds game object to false
BGlist[0].SetActive(false);
BGlist[1].SetActive(false);
BGlist[2].SetActive(false);
BGlist[3].SetActive(false);
BGlist[rand2].SetActive(true); //Random yellow background
//BGmesh.material = BGmat[rand]; // OTHER SOLUTION - change material of mesh renderer
fadingBG.StopFading();
speedManager3 += 1f;
}
if (speedManager3 == 611f || speedManager3 == 1514)
{
//Random red background
//Set the previous backgrounds game object to false
BGlist[4].SetActive(false);
BGlist[5].SetActive(false);
BGlist[6].SetActive(false);
BGlist[7].SetActive(false);
BGlist[rand3].SetActive(true); //Random red background
// BGmesh.material = BGmat[rand];
fadingBG.StopFading();
speedManager3 += 1f;
}
if (speedManager3 == 912f || speedManager3 == 1815)
{
//Random blue background
//Set the previous backgrounds game object to false
BGlist[8].SetActive(false);
BGlist[9].SetActive(false);
BGlist[10].SetActive(false);
BGlist[11].SetActive(false);
BGlist[rand1].SetActive(true); //Random blue background
// BGmesh.material = BGmat[rand];
fadingBG.StopFading();
speedManager3 += 1f;
}
}
因此,我尝试更改网格渲染器的材质,并为我设置为活动和虚假的每个背景制作单独的游戏对象。
我正在使用网格渲染器来制作跟随相机的无限滚动背景。
解决方案
主要问题是您在更新中调用 Random 并且会破坏性能(我知道,因为几年前我犯了同样的错误)。当您知道要生成多个随机值时,您应该只执行一次(例如在开始中)将它们存储在一个数组中并稍后使用它们。如果您的数组为空,您可以再次调用该方法以生成多个随机值 1 次。记住永远不要在更新中调用 Random,避免在每一帧都进行任何硬计算(这不仅包括 Random,还尽可能避免)。
推荐阅读
- ios - 在获取消息列表firebase时获取重复数据
- jenkins - 詹金斯工作的 Ansible 提示
- docker - 将 Docker 容器中创建的目录共享到另一个 Docker 容器?
- java - RabbitMQ 主题交换消息排序
- r - R 的设施位置优化包?
- mysql - sqoop 导出失败 - 导出作业失败
- react-native - 使用来自另一个屏幕的数据将值绑定到 TextInput - React Native
- python-3.x - 有没有办法自动获取日期
- javascript - 失踪 ; 在语句节点js之前
- ios - (SwiftUI) 如何访问我在 ViewBuilder 中的一个数组中找到的匹配项?