【问题标题】:Why is my transform.position setter called via OnMouseDown() so slow?为什么我通过 OnMouseDown() 调用的 transform.position 设置器这么慢?
【发布时间】:2019-02-04 17:48:22
【问题描述】:

我的代码中有以下方法:

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

当点击游戏对象时,该方法被调用。改变立方体的位置需要很长时间(不超过一秒,但仍然很长,至少半秒)。确实会影响用户的游戏体验。

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

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

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

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

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

【问题讨论】:

  • 嗯...这应该是即时的。你的帧率是多少?
  • 大约 10 fps。
  • 我想我们需要更多信息。您能否告诉我们更多关于您的硬件规格的信息,3D 对象是高多边形的吗?您还可以删除分析器的屏幕截图吗?也许是因为低端规格和高多边形物体会导致 10fps 的延迟?仅当您可能具有较高的多边形时,最后一个。
  • 听起来由于您的机器规格,您的输入滞后很多,其他输入操作是否需要同样多的时间?我的女儿在她电源严重不足的笔记本电脑上玩行尸走肉(告密者),并且至少有半秒的输入延迟(即使帧速率不是我见过的最差的)

标签: c# unity3d


【解决方案1】:

除非你的转换树有数百个子深度,否则这应该是即时的,它是 Unity 设计用来快速完成的事情之一,所以我认为这与你导入的网格有关。不应该有太多的顶点、太多的材质和太多的对象。 您可以尝试使用 3D 编辑器包(blender?)浏览您的对象并将块组合成单个对象。

如果移动对象时统一滞后,这可能意味着它有太多单独的变换需要处理。如果你的场景很激烈,你可以通过“baknig”来获得很多性能,将单个对象组合成更大的网格(那些在 gpu 上运行并且花费 gpu 时间而不是 cpu 时间)。

您导入的一个或多个网格也可能有太多的顶点/三角形。如果您目前有 10fps,您可能希望以较轻的网格为目标,并且尽可能少的单独游戏对象(理想情况下,您希望环境只是几个组合的网格(以启用剔除),而不是数千个对象)

【讨论】:

    【解决方案2】:

    解决方案

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

    【讨论】:

    • 没有意义,用户并没有移动对象,只是在鼠标点击时设置位置,应该是瞬时的。
    • 哦,对不起,我误解了这个问题,感谢您消除我的误解,我希望现在的答案能 100% 有意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    相关资源
    最近更新 更多