Unity在运行时运行很多对象,运行缓慢

时间:2017-02-15 10:32:29

标签: unity3d

我创建了一个简单的项目,其中约。在场景中创建了7000个立方体(使用VR摄像头),但问题是当我移动摄像头以查看所有立方体时,FPS变得非常糟糕,类似于5-6帧。我的PC是i7与GTX 1070,我认为它必须毫无问题地绘制数十万个立方体。真的,我看到了我的世界,看起来没有问题画立方体))

所以问题是,是否可以优化场景,以便所有立方体都被绘制成一个电话或其他东西,以提供良好的性能?

我实际上让所有立方体都是静态的,并且没有纹理只有标准材料...

以下是现在的样子: enter image description here

我使用默认的Directional Light,最好不要更改标准着色器,因为它可以很好地处理光线。

以下是我如何生成多维数据集:

private void AddCube(Vector3 coords)
{
    var particle = (Transform)MonoBehaviour.Instantiate(prototype.transform, holder.transform);

    SetScale(particle);
    SetPosition(particle, coords);

    cubes.Add(particle.gameObject);
    particle.gameObject.isStatic = true;

}

private void SetScale(Transform particle)
{
    particle.localScale = new Vector3(Scale, Scale, Scale);
}

private void SetPosition(Transform particle, Vector3 coords)
{
    particle.position = coords;
}

这是统计数据的屏幕截图: Stats screenshot 我有41 fps,因为我将相机移离立方体,以便为统计面板提供干净的背景。实际上,在我制作了多维数据集“静态”之后FPS取决于屏幕上是否可见的立方体。

1 个答案:

答案 0 :(得分:6)

问题很可能是由您实例化的单个对象的数量引起的。如果多维数据集在生成后没有改变它们的变换,你应该能够使用StaticBatchingUtility将它们组合成一个批处理。

生成多维数据集后调用此方法。

StaticBatchingUtility.Combine(GameObject cubesRoot);
相关问题