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