时间:2021-05-20
本文实例为大家分享了Unity中Instantiate实例化物体卡顿问题的解决方法,供大家参考,具体内容如下
一、前言
当在执行多次Instantiate实例化物体时,会卡顿严重甚至在移动端会导致程序崩溃
因为Instantiate会产生大量的GC,使CPU过高,导致崩溃
下面是一段测试代码:当我们按下按键时实例化100000个预制体
using UnityEngine; public class Test : MonoBehaviour{ public GameObject prefab; private void Update() { if (Input.GetKeyDown(KeyCode.A)) { Generate(); } } private void Generate() { for (int i = 0; i < 100000; i++) { Instantiate(prefab); } }}运行后通过profiler查看性能
发现在实例化物体的那一帧产生了3.8MB的GC,而正常来说每帧的GC不能超过2KB,产生如此高的GC在移动端会导致内存溢出从而崩溃闪退。更可怕的是这一帧用时1519.24毫秒也就是1.5秒所以程序在此帧会出现卡顿现象
二、解决方法
卡顿或程序崩溃的原因就是在某一帧中产生了大量的GC
所以可以把一帧的操作分帧进行
三、协程中几种yield reutrn的执行顺序
using UnityEngine;using System.Collections; public class Test : MonoBehaviour{ private void Start() { StartCoroutine(WaitForNull()); StartCoroutine(WaitForEndFrame()); StartCoroutine(Wait0()); StartCoroutine(WaitForFixedUpdate()); } private IEnumerator WaitForNull() { Debug.Log("[1]WaitForNull:" + Time.frameCount); yield return null; Debug.Log("[2]WaitForNull:" + Time.frameCount); } private IEnumerator WaitForEndFrame() { Debug.Log("[1]WaitForEndFrame:" + Time.frameCount); yield return new WaitForEndOfFrame(); Debug.Log("[2]WaitForEndFrame:" + Time.frameCount); } private IEnumerator Wait0() { Debug.Log("[1]Wait0:" + Time.frameCount); yield return 0; Debug.Log("[2]Wait0:" + Time.frameCount); } private IEnumerator WaitForFixedUpdate() { Debug.Log("[1]WaitForFixedUpdate:" + Time.frameCount); yield return new WaitForFixedUpdate(); Debug.Log("[2]WaitForFixedUpdate:" + Time.frameCount); } private void Update() { Debug.Log("update"); } private void FixedUpdate() { Debug.Log("FixedUpdate"); } private void LateUpdate() { Debug.Log("LateUpdate"); }}经过测试,得出以下结论
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了Unity实现俄罗斯方块第3部分,供大家参考,具体内容如下解决穿透问题逻辑部分1、在物体进行移动的过程中更新格子的信息,原来的所占据的位置信
ios7.0.6卡顿怎么办?下文将会告诉大家苹果ios7.0.6卡顿解决方法,升级ios7.0.6之后,用户普遍反映卡顿现象严重,有什么办法能够减轻卡顿现象呢?
本文实例为大家分享了Unity实现物体沿任意轴向旋转,供大家参考,具体内容如下一、创建一个需要旋转的物体二、编写控制该物体的脚本usingUnityEngine
Win10怎么解决鼠标间歇性失灵卡顿?解决Win10鼠标间歇性失灵卡顿的方法是什么呢,感兴趣的小伙伴跟随小编一起学习下文吧。解决Win10鼠标间歇性失灵卡顿的方
当我们的电脑配置不高的时候,在使用PR剪辑视频的时候难免就会遇到卡顿的问题,那么今天我们就来和大家讲一个最简单的解决PR剪辑卡顿的方法。工具/原料Premier