实例化一个Prefab比较卡可能的原因
Posted 时光不染
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实例化一个Prefab比较卡可能的原因相关的知识,希望对你有一定的参考价值。
被自己蠢哭了,最简单的知识点到用的时候死活想不起来,记录一下加深印象
遇到这个问题时,我的第一反应是:一个Prefab很卡?不是应该很多个才会卡?很多个的话预加载啊,分帧加载啊,对象池啊。一个的话,难不成prefab很大,顶点数太多😂😂😂?思路顿时向歪路一路飞向天际。。
首先先说结论:
最大的可能是Prefab
的Awake
或OnEnable
方法做了太多操作。
当你实例化一个Prefab
时,不是加载显示出来就算完了,还会进行初始化,也就是完成Awake
,OnEnable
方法
以下方法做演示
1.实例化一个prefab,并输出真实时间
void Start()
Debug.Log($"开始时间:time1 = Time.realtimeSinceStartup");
Instantiate(Resources.Load("prefab"),this.transform) ;
Debug.Log($"结束时间:time2 = Time.realtimeSinceStartup");
Debug.Log($"间隔:time2 - time1");
2.在Awake或OnEnable里加入一个高耗时的方法。我这里加了个递归运算。
float time1 = 0;
private void Awake()
Debug.Log("Awake");
private void OnEnable()
time1 = Time.realtimeSinceStartup;
RecUrcive(40);
Debug.Log($"运算时间:Time.realtimeSinceStartup - time1");
Debug.Log("OnEnable");
private void Start()
Debug.Log("Start");
public int RecUrcive(int index)
if (index<3)
return 1;
else
return RecUrcive(index - 2) + RecUrcive(index - 1);
3.下图是没有加高耗时方法时的加载时间,间隔0.058秒
并且可以看出,在完成加载之前,调用了Awake
和OnEnable
方法
4.下图是加了高耗时方法的加载时间,间隔1.2秒
总结,Awake
和OnEnable
方法尽量不要做太多初始化无关的操作,会大大延长加载时间
以上是关于实例化一个Prefab比较卡可能的原因的主要内容,如果未能解决你的问题,请参考以下文章
unity 怎么让一个prefab一直在新实例化的prefab下面