当前位置: 代码迷 >> 综合 >> Unity Hololens 2 优化处理方案 整理
  详细解决方案

Unity Hololens 2 优化处理方案 整理

热度:78   发布时间:2023-11-18 04:45:40.0

首先

1.Edit > Project Settings > Quality   级别选最低 Very Low  (根据情况选择)

2.Window > Rendering > Lighting Settings > Realtime Global Illumination . Baked Global Illumination  关闭全局实时光和烘培光

3.(16可能会导致的问题:Mask失效,模型透明看不见,shader未知BUG)在此面板的深度格式设置下选择16 位深度,尤其是 HoloLens 开发。与 24 位相比,选择 16 位将显著降低带宽要求,因为需要移动/处理的数据更少

4.避免 GetComponent(string)
使用 GetComponent() 时,会产生少量不同的重载。 必须始终使用基于类型的实现,切勿使用基于字符串的搜索重载。 在场景中按字符串进行搜索,比按类型进行搜索的开销要高得多。
(正确)Component GetComponent(Type type)
(正确)T GetComponent<T>()
(错误)Component GetComponent(string)>

5.建议在初始化时 缓存 对所有相关组件和 GameObject 的引用,因为重复函数调用(如 GetComponent() 和 Camera.main)相对于存储指针的内存成本更昂贵。 . Camera.main 仅在后台使用 FindGameObjectsWithTag() ,但而它会以很高的开销在场景图中搜索具有“MainCamera”标记的 camera 对象

6.某些 Unity API 虽然很有用,但其执行开销可能很高。 其中的大部分 API 都涉及到在整个场景图中搜索 GameObject 的匹配列表。 一般情况下,若要避免这些操作,可以缓存引用,或者实现 GameObject 的管理器组件,以在运行时跟踪引用。应该消除 SendMessage() 和 BroadcastMessage() 的所有开销。

尽量少使用的API: GameObject.SendMessage()

                         GameObject.BroadcastMessage()

                         Object.Find()

                         Object.FindWithTag()

                         Object.FindObjectOfType()

                         Object.FindObjectsOfType()

                         Object.FindGameObjectsWithTag()

                         Object.FindGameObjectsWithTag()

7.要避免装箱操作  

列如错误做法:bool myVar = true; object boxedMyVar = myVar;

请确保使用强类型列表(例如 List<int>),而不是 List<object> 或 ArrayList

8.删除空Update

在应用程序中保留以下代码看似没有妨碍,尤其是因为每个 Unity 脚本都要通过此 Update 方法自动初始化,但这些空回调的开销可能非常高。 Unity 在 UnityEngine 代码与应用程序代码之间的非托管和托管代码边界之间来回操作。 通过此桥梁进行上下文切换会产生相当高的开销,即使没有要执行的操作。 如果应用具有数百个 GameObject 以及包含空重复性 Unity 回调的组件,则此操作特别容易造成问题。

9.避免使用网格碰撞体,其开销要比基元碰撞体高出太多。

最终测试完成删除所有删除不再需要的 Debug.Log() 调用,因为它们仍会在应用的所有生成版本中执行

10.使用对象池

11.如果全息应用通常需要大量的内存,请考虑在加载阶段(例如,在演示加载或过渡屏幕时)调用 System.GC.Collect()

 详情请查看官方地址:针对 Unity 的性能建议 - Mixed Reality | Microsoft Docs

  相关解决方案