【发布时间】:2015-03-09 06:49:53
【问题描述】:
我正在尝试在关卡加载后立即在屏幕上生成图块。这个问题与使我的算法尽可能高效有关。
- 我之前在做什么: 在 Update() 函数中(Update() 函数的这一部分仅在游戏开始时调用一次s),我只是在屏幕上将图块实例化 12,000 次以创建整个地图游戏。在下面的代码中,x[i] 和 y[i] 是我在另一个函数中递增的网格坐标值。
缺点:关卡加载时间较长。 优点:加载关卡后,fps 保持一致且较高。
void Update()
{
if (loadThisSectionOnce = false)
{
loadThisSectionOnce = true;
for (int i = 0; i <= 12000; i++)
{
tiles[i] = Instantiate(tile, new Vector3(x[i], y[i], transform.rotation) as GameObject;
}
}
}
- 我现在要做的事情:我只想让玩家周围的图块被实例化,并且随着玩家四处游走,其他图块将被实例化,以便在游戏最初加载时,并非所有图块都同时加载(因此加载时间更短 - 更动态)。
void Update()
{
var distance = Vector2.Distance(new Vector2(x[i], y[i], PlayerPosition);
if (distance < 20.0F)
{
for (int i = 0; i <= 12000; i++)
{
tiles[i] = Instantiate(tile, new Vector3(x[i], y[i], transform.rotation) as GameObject;
}
}
}
注意:这次没有布尔变量来确保 Update() 函数的这一部分只被调用一次,但它被每帧调用一次。
优点:耶!仅生成玩家周围的图块 + 关卡加载时间非常快。 缺点:每帧都会调用一个 FOR 循环(迭代高达 12000 次!),因此游戏运行时每秒帧数 (fps) 非常低。
我需要什么?:如何让我的第二次尝试更有效率?有什么办法吗?感谢您的帮助!
【问题讨论】:
标签: c# unity3d procedural-generation