美文网首页程序员
关于Unity的Physics优化GC与cpu耗时

关于Unity的Physics优化GC与cpu耗时

作者: AngerCow | 来源:发表于2020-07-02 18:04 被阅读0次

    最近在优化项目Physics时,发现Physics的使用有一些需要注意的地方,这里记录一下。
    我们可以查看或者自己测试Physics的耗时与GC情况,这里网上有现成的测试数据可供参考,这里就不做测试了。可以看以下链接:
    https://blog.csdn.net/weixin_34199405/article/details/94698726
    我们来看以下的表(表取自上面文章):

    Physics GC与耗时
    由表我们可以看出每个检测的函数都有对应无GC版本,比如:RaycastAll对应RaycastNonAlloc,(新的api已经有变化,所以不是RaycastAllTest,现在是RaycastAll,其它函数想对应变化,自己对照看)。其中耗时跟着GC成正比上升,所以我们优化了GC后,对应该的耗时也会下降。
    接下来是看如何使用XXXXNonAlloc来实现与其对应函数的相同功能,同时优化代码。
    要正确的使用一个api肯定是要看官方的文档,这是最基本的

    Physics.RaycastAll

    Physics.RaycastAll描述

    返回的是所有的碰撞但可能是无顺序。会产生GC。

    Physics.RaycastNonAlloc

    Physics.RaycastNonAlloc描述

    返回的是满足射线检测条件的碰撞个数,需要传 RaycastHit[] 数组来接收碰撞信息。且部分有序。不会产生GC。

    下面是范例:

    demo
    这里使用时我总结出一些要注意的地方:
    1.RaycastNonAlloc传入的RaycastHit[]必须初始化,不然检测不到返回数据。这样我们最好提取出来,new数组也是会产生GC的,所以我们要避免可复用的变量去new。不然我们失去使用这个函数优化的意义了。
    2.可以利用RaycastNonAlloc返回的int来减少遍历次数。虽然这些能优化出来的东西九牛一毛。但是优化就是这样的,积少成多。,这是优化时最忌讳的。这也是规范与书写高质量代码的好习惯。好的习惯要从日常养成。
    前路漫漫,共勉之。有什么问题或者理解有误可留言探讨。

    相关文章

      网友评论

        本文标题:关于Unity的Physics优化GC与cpu耗时

        本文链接:https://www.haomeiwen.com/subject/bvbrqktx.html