开发平台:Unity 2020.3.7f1c1
关键词:FindMainCamera
问题背景
ModelViewer
是开发者基于UnityEngine
编写的相机控制组件。ModelView.Update
中调度52次并触发3次GC.Collect
。显然并不期望并尽可能避免 Update 造成的GC 问题。- 事实上
FindMainCamera
并不属于脚本内部直接调用所造成。而是通过 Unity API 间接调用造成。
追溯触发 FindMainCamera 来源
这似乎是 Camera.main
造成的。在 ModelView.Update
中引用 Main Camera 检测鼠标是否触碰在 UI 上时造成的。Camera.main
估计类似于 Camera.FindObjectWithTag("MainCamera").GetComponent<Camera>()
形式,每帧执行 FindMainCamera 方法。实际上,Main Camera 的查找仅一次就足够。
解决方式
使用全局变量存储 Main Camera 对象。避免高频下使用 Camera.Main
进行 Main Camera 引用。