团结起来,让我们假设我的场景中有一些游戏对象对摄像机不可见,因此在游戏运行时不会渲染。
游戏运行时,这些游戏对象会消耗计算机/移动资源吗?
在哪里可以找到有关此类用法的详细信息?
团结起来,让我们假设我的场景中有一些游戏对象对摄像机不可见,因此在游戏运行时不会渲染。
游戏运行时,这些游戏对象会消耗计算机/移动资源吗?
在哪里可以找到有关此类用法的详细信息?
Answers:
您需要的是Unity确实具有的内存分析器。此处:http://docs.unity3d.com/Manual/ProfilerMemory.html
但是您的假设基本上是正确的,如果游戏对象在相机中不可见,则不会绘制游戏对象,并且它使用的资源较少,但仍然必须消耗一些资源。gameObject仍然存在于内存中,包括所有纹理,模型脚本等。它还通过Update和FixedUpdate方法(以及此处介绍的其他各种方法)仍然消耗CPU时间。
但是通常最主要的减慢是绘图,需要使用少量的CPU时间来确定对象是否在相机视锥范围内(边界),但是没有完成绘图。
我认为您还应该了解有关“平截头剔除”或“隐藏表面去除”的信息:http : //en.wikipedia.org/wiki/Hidden_surface_determination
这是优化游戏的重要环节,因为即使您的对象不在给定帧的视锥范围内(即可见),也会为它们启动一些绘制调用(着色器),从而降低性能。
简短的回答是“是”。任何准备在游戏中使用的东西都会占用内存。
要考虑的另一件事是帧速率的成本:
分别绘制的5个具有5个单独纹理的对象需要在它们之间进行状态更改。您可以通过卸载未使用的纹理来节省一些内存。
通过将所有单独的纹理加载到单个图集纹理中,内存占用空间变得固定,您将无法再卸载单个纹理。创建完成后,只需将地图集绑定一次即可绘制所有对象。
另一个示例是简单的顶点和索引缓冲区。如果许多点经常在可见和不可见之间切换,则将“陈旧”的点保留在顶点缓冲区中并仅上载新的索引缓冲区会更快。
在许多其他情况下,增加前期存储成本比许多状态更改更为可取。
如果旋转相机,除非您知道,否则绝对不会销毁那些物体,否则该相机不会旋转回去检查该物体。” –卡图
以侧面滚动条为例,如果您只能向右移动(地图仅向左滚动),则从屏幕左侧滚动的任何对象都可以永久卸载,因为您将不再使用它。此外,可以在对象从右侧滚动到视图之前立即加载对象的内容。
很多答案主要是考虑问题的图形方面。
事实是它们将占用各种资源,与绘制对象相比它们的成本是不确定的。它并没有像某些答案所暗示的那样使您的组件进行比绘制更昂贵的操作,但是您可以最大程度地减少它们使用的资源量。还请记住,GameObject占用少量内存,组件也是如此。这些组件也可能正在做占用大量内存的事情。
最小化屏幕外组件影响的最简单方法是基于OnBecameVisible和OnBecameInvisible回调的系统。
void OnBecameVisible()
{
myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
myComplexComponent.enabled = false;
}
当然,这种方法的用途非常有限,因为很多时候您会希望屏幕外的对象影响游戏。但是,您可以在这种模式下扩展一个细粒度的系统,该系统能够最大程度地减少最昂贵的计算的影响。即使只是一些简单的操作(例如,当对象不在屏幕上时降低脚本后面的路径质量),从长远来看也可以节省大量费用。
它需要内存来保持活动状态并更新其位置和其他属性。
但是由于它不可见,因此不会消耗计算机/移动图形资源。
程序中的任何东西都会消耗资源。您不认为程序仅基于希望和梦想,对吗?
问题应该是游戏对象消耗多少资源,为此,我认为这是一个非常可靠的答案:http : //answers.unity3d.com/questions/280455/how-much-memory-a-gameobject-消耗.html
简而言之,他们自己消耗微不足道的资源。但是,为什么您只想让一堆游戏对象什么也不做呢?归根结底,您实际上要使这些游戏对象“做什么”,这将导致任何类型的开销,并且视情况而定需要多少资源。