为什么通过OnMouseDown()调用的transform.position setter这么慢?

时间:2019-02-03 17:46:42

标签: c# unity3d

我的代码中具有以下方法:

private void OnMouseDown()
{
    cube.transform.position = new Vector3(0, 1, 0);
}

当单击gameObject时,将调用此方法。更改立方体的位置需要很长时间(不超过一秒钟,但仍然很长,至少半秒钟)。确实会影响用户的游戏体验。

如果我不更改立方体的位置,但是例如改变它的材质,它仍然很慢。因此,我知道这与OnMouseDown()事件中的行无关。

但是请注意,我的场景中确实有大约35个导入的3D网格,以及50多个原始游戏对象。这与方法缓慢有关吗?因为当我只用两个gameObjects创建一个空的Unity项目时,该方法很快。

是因为我的整个场景吗?有任何想法吗?谢谢!

如果有人也知道如何加快速度,我很想知道!

编辑:如果我删除所有3D网格,则该方法很快...

2 个答案:

答案 0 :(得分:1)

除非您的transfom树深深地扎着孩子,这应该是即时的,这是Unity旨在快速完成的事情之一,因此我认为这与您导入的网格有关。不应有太多的折点,太多的材料和太多的对象。 您可以尝试使用3D编辑器包(blender?)浏览对象,并将这些块组合成单个对象。

如果在移动对象时团结滞后,则可能意味着它有太多单独的变换要处理。如果您的场景很紧张,则可以通过“ baknig”场景来获得很多性能,将单个对象组合成更大的网格(那些驻留在gpu上并且花费gpu时间而不是cpu时间)。

您导入的一个或多个网格也可能有太多的顶点/三角形。如果您当前的速度为10fps,则可能希望使用更轻的网格物体,并尽可能减少单独的GameObject(理想情况下,您希望环境是几个组合的网格物体(以便启用剔除),而不是数千个对象)

答案 1 :(得分:0)

解决方案

尝试检查是否使用了重材,这会减慢该过程。当将对象添加到项目中时,游戏速度变慢,并且破坏了游戏的整体效率。当我在项目中使用过重的模型时,会发生这种情况,这会降低游戏的整体速度。我用轻型卡车模型代替了它们,问题解决了。