Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Unity在空场景中占用100%的CPU_Performance_Unity3d_Exe_Cpu_Cpu Usage - Fatal编程技术网

Performance Unity在空场景中占用100%的CPU

Performance Unity在空场景中占用100%的CPU,performance,unity3d,exe,cpu,cpu-usage,Performance,Unity3d,Exe,Cpu,Cpu Usage,为什么当我们用unity3d构建游戏场景时,它会使用100%的CPU 我的意思是,这不是一个有很多对象和东西的场景或者一个空场景的问题,在这两种情况下CPU的使用率都是100% 为什么? 我怎样才能减少它 我想减少CPU使用的原因是: 我想在一个专用服务器上运行多个exe,用于我用unityUNET制作的多人游戏,在这个场景中,除了一些函数和syncvars之外,我什么都没有,即使我没有更新函数。。。 我只是想让这个exe文件使用更少的CPU来更好地运行并提高性能 这是否可以减少CPU使用量?在

为什么当我们用unity3d构建游戏场景时,它会使用100%的CPU

我的意思是,这不是一个有很多对象和东西的场景或者一个空场景的问题,在这两种情况下CPU的使用率都是100%

为什么?

我怎样才能减少它

我想减少CPU使用的原因是: 我想在一个专用服务器上运行多个
exe
,用于我用unity
UNET
制作的多人游戏,在这个场景中,除了一些函数和
syncvars
之外,我什么都没有,即使我没有更新函数。。。 我只是想让这个
exe
文件使用更少的CPU来更好地运行并提高性能


这是否可以减少CPU使用量?

在Unity中运行场景时,仅当对象在摄影机中可见时才渲染对象。渲染场景时,Unity会自动减少其CPU需求。当然也有一些例外,但Unity足够智能,可以减少不必要的cpu使用。
您的问题可能是由多个因素造成的,每个因素都有自己的解决方案。没有一个通用的。例如,您可能有多个具有巨大纹理的游戏对象,或者您正在使用后期处理软件包渲染场景(这会消耗内存/cpu)。或者可能是您的计算机功能不够强大,并且您的目标受众不会有这个问题

没有足够的数据来帮助您追踪问题所在,而这可能是由许多事情造成的。尝试使用unity profiler跟踪CPU峰值的原因

Unity profiler

首先使用unity profiler。这是Unity的一个内置工具,可以让您检查应用程序的哪个部分正在使用什么资源、它的智能性以及它的使用时间

如果您转到window>Profiler,您将看到“CPU使用情况”,分为更小的子类别和一个图形来可视化CPU使用情况。您可以单击图中的任意位置,以获得该帧中所有cpu使用的概览

概览屏幕显示了大量信息,您首先要查看的是“总计”和“时间毫秒”。Total是以百分比表示的CPU使用总量。时间是以毫秒为单位的时间

使用这些数据找出占用所有CPU的脚本/操作,并从中开始优化


有关unity的CPU档案器的更多信息,请参见

,了解CPU使用情况。可能您正在运行的唯一进程是Unity场景,因此PC使用Unity的100%CPU,因为它不需要为其他“繁重”应用程序分配资源(我猜不是100%,因为系统的其他必要进程也必须运行)。我想如果你运行两个场景,每一个大约50%

除此之外,为了使你的场景更有效率,你可以尝试以下方法使你的游戏更有效率。可能还有一些,您可能不会全部应用。但您可以将其作为起点考虑:

1-静态配料

场景中可能有大量静态几何体,如墙、椅子、灯光和网格,这些几何体永远不会移动。在编辑器中将它们标记为静态。确保将它们标记为光照贴图静态,以便获得烘焙的光照贴图纹理。可以将标记为静态的对象批处理到一个组合网格中,而不是对每个单独的对象进行绘制调用。静态批处理有一个关键要求:所有对象必须使用相同的材质。如果有使用木材材质的静态墙和使用钢材质的静态椅子,则这些墙将批处理为一个使用一个组合网格的绘制调用,这些椅子将使用各自的单独网格进行单独的绘制调用

2-纹理贴图集

如前所述,每种材质都会引起抽签通知。您可能会假设木门和钢椅可能需要单独的材质,因为它们使用单独的纹理。但是,如果它们可以使用相同的着色器,则可以使用纹理地图集创建两个对象都可以使用的材质。纹理图集只是包含所有较小纹理的较大纹理。与几十种材质加载几十种纹理不同,您可以让一种材质只加载一种纹理。每个对象都可以映射为在地图集的不同坐标上使用纹理。您可以在艺术管道中手动执行此操作,但我发现Juan Sebastian的Pro Draw调用优化器非常有用。它会自动生成纹理地图集并在新对象中交换,而不会影响您的资源

3-动态配料

移动的非静态对象可以动态批处理到单个绘图调用中。我注意到这是CPU密集型的,并且是在每一帧上计算的,但是这是一个很好的优化。这仅适用于顶点少于900个且使用相同材质的对象。使用纹理贴图为您的动态对象创建单个材质,您可以获得廉价的动态批处理

4-LOD

LOD组是提高性能的廉价方法。使用具有多个LOD的资源,并为远离摄影机的对象渲染较低细节的几何体。随着摄影机靠近,Unity可以在每个LOD之间自动淡出

5-填充率、透支和剔除

这涉及到一个我不太熟悉但值得注意的主题:减少透支,最远的对象首先被绘制到一个像素,然后用每个较近的对象在顶部重新绘制像素。这在普通1080p PC显示器上算不上什么问题,但对于具有超高分辨率显示器的VR和移动设备来说却是一个重大问题。大量的透照加上大量的像素会降低填充率。纹理过滤是GPU的关键限制指标之一。一些解决方案提供了开箱即用的遮挡剔除和平截体