用于卸载地图未使用区域的统一最佳实践

问题描述 投票:-1回答:1

我想知道减少游戏世界中不需要每帧更新的区域的CPU和内存开销的最佳方法。

我刚刚开始考虑这个问题,因为我目前正在使用Raycasts实现阴影检测系统。

我的问题是这个:

  • 我的关卡中大约有100盏灯,每帧上都会向附近的角色发送光线广播,以确定这些角色是否在阴影中。

我的游戏是一款低聚PC游戏,我了解到Raycasting的开销并不那么大。因此,这不是主要问题。但是我仍然不确定最佳的优化方法。

我一直在想一些解决方案,但不确定每个说法是否有“标准”。

1。如果玩家距离太远,则退出更新循环

void Update() {
   if (Vector3.Distance(playerPos, transform.position) > someRadius) {
       return
   }
}

这是最明显的解决方案,更令人担忧。

  1. 此更新循环仍会占用CPU周期,每个帧针对每个亮点执行2次计算。

2。当玩家离得太远时,禁用Light gameObjects]

此方法在CPU开销方面更为有效,因为将被否定。但是,我仍在占用不必要的内存。

为了使该解决方案更具可扩展性,我必须设计某种“启用器”,该“启用器”跟踪应根据玩家位置启用/禁用的游戏对象。

但是到现在,我知道我正在重新发明轮子,并非常确定为此制定了行业标准。

是否有启用/禁用的替代方法?

[我看到很多游戏开发人员都在谈论从内存中物理卸载游戏区域并将这些区域写入磁盘(当玩家不在附近时。

我想知道这是通过简单地销毁并重新实例化这些对象来实现的。

问题

Unity对此有意见吗?

here页列出了一个示例,类似于我的第一个解决方案。但是他们在这里谈论的是每帧数十万次的更新。

也许我不需要像我想的那么担心

谢谢!

我想知道减少游戏世界中不需要每帧更新的区域的CPU和内存开销的最佳方法。我刚刚开始考虑这个问题,因为我...

unity3d game-development
1个回答
0
投票

如果您不想渲染不在相机区域内的对象,则遮挡剔除

© www.soinside.com 2019 - 2024. All rights reserved.