最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity中Instantiate實(shí)例化物體卡頓問題的解決

 更新時(shí)間:2020年10月28日 17:05:05   作者:LLLLL__  
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)離線計(jì)時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Unity中Instantiate實(shí)例化物體卡頓問題的解決方法,供大家參考,具體內(nèi)容如下

一、前言

當(dāng)在執(zhí)行多次Instantiate實(shí)例化物體時(shí),會卡頓嚴(yán)重甚至在移動端會導(dǎo)致程序崩潰
因?yàn)镮nstantiate會產(chǎn)生大量的GC,使CPU過高,導(dǎo)致崩潰

下面是一段測試代碼:當(dāng)我們按下按鍵時(shí)實(shí)例化100000個(gè)預(yù)制體

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);
  }
 }
}

運(yùn)行后通過profiler查看性能

發(fā)現(xiàn)在實(shí)例化物體的那一幀產(chǎn)生了3.8MB的GC,而正常來說每幀的GC不能超過2KB,產(chǎn)生如此高的GC在移動端會導(dǎo)致內(nèi)存溢出從而崩潰閃退。更可怕的是這一幀用時(shí)1519.24毫秒也就是1.5秒所以程序在此幀會出現(xiàn)卡頓現(xiàn)象

二、解決方法

卡頓或程序崩潰的原因就是在某一幀中產(chǎn)生了大量的GC
所以可以把一幀的操作分幀進(jìn)行

using UnityEngine;
using System.Collections;
 
public class Test : MonoBehaviour
{
 public GameObject prefab;
 
 private void Update()
 {
  if (Input.GetKeyDown(KeyCode.A))
  {
   StartCoroutine(Generate());
  }
 }
 
 private IEnumerator Generate()
 {
  int tempCount = 0;
  for (int i = 0; i < 100000; i++)
  {
   if (tempCount <= 5000)
   {
    Instantiate(prefab);
    tempCount++;
   }
   else
   {
    tempCount = 0;
    yield return new WaitForEndOfFrame();
    Instantiate(prefab);
   }
  }
 }
}

三、協(xié)程中幾種yield reutrn的執(zhí)行順序

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");
 }
}

經(jīng)過測試,得出以下結(jié)論

  • WaitForFixedUpdate在一幀的FixedUpdate后Update前調(diào)用
  • WaitForNull和Wait0在一幀的Update后LateUpdate前調(diào)用
  • WaitForEndFrame在會在一幀的LateUpdate后調(diào)用

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實(shí)現(xiàn)簡單串口通信的示例詳解

    C#實(shí)現(xiàn)簡單串口通信的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)串口通信的相關(guān)知識,文中示例代碼介紹的非常詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴們可以跟隨小編一起了解一下
    2023-10-10
  • C# wpf Grid中實(shí)現(xiàn)控件拖動調(diào)整大小的示例代碼

    C# wpf Grid中實(shí)現(xiàn)控件拖動調(diào)整大小的示例代碼

    本文主要介紹了C# wpf Grid中實(shí)現(xiàn)控件拖動調(diào)整大小的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 利用C#實(shí)現(xiàn)AOP常見的幾種方法詳解

    利用C#實(shí)現(xiàn)AOP常見的幾種方法詳解

    AOP面向切面編程(Aspect Oriented Programming),是通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。下面這篇文章主要給大家介紹了關(guān)于利用C#實(shí)現(xiàn)AOP常見的幾種方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • C#多線程系列之線程的創(chuàng)建和生命周期

    C#多線程系列之線程的創(chuàng)建和生命周期

    這篇文章介紹了C#多線程系列之線程的創(chuàng)建和生命周期,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Unity3D UI Text得分?jǐn)?shù)字增加的實(shí)例代碼

    Unity3D UI Text得分?jǐn)?shù)字增加的實(shí)例代碼

    這篇文章主要介紹了Unity3D UI Text得分?jǐn)?shù)字增加方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C# 并發(fā)控制框架之單線程環(huán)境下實(shí)現(xiàn)每秒百萬級調(diào)度

    C# 并發(fā)控制框架之單線程環(huán)境下實(shí)現(xiàn)每秒百萬級調(diào)度

    本文介紹了一款專為工業(yè)自動化及機(jī)器視覺開發(fā)的C#并發(fā)流程控制框架,通過模仿Go語言并發(fā)模式設(shè)計(jì),支持高頻調(diào)度及復(fù)雜任務(wù)處理,已在多個(gè)項(xiàng)目中驗(yàn)證其穩(wěn)定性和可靠性
    2024-10-10
  • C#操作注冊表的方法詳解

    C#操作注冊表的方法詳解

    這篇文章主要介紹了C#操作注冊表的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了C#針對注冊表的創(chuàng)建、打開、讀取、寫入、修改、刪除等技巧,需要的朋友可以參考下
    2015-12-12
  • C# 中如何使用Thread

    C# 中如何使用Thread

    這篇文章主要介紹了C# 中使用 Thread的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#實(shí)現(xiàn)微信公眾號群發(fā)消息(解決一天只能發(fā)一次的限制)實(shí)例分享

    C#實(shí)現(xiàn)微信公眾號群發(fā)消息(解決一天只能發(fā)一次的限制)實(shí)例分享

    經(jīng)過幾天研究網(wǎng)上的代碼和謝燦大神的幫忙,今天終于用C#實(shí)現(xiàn)了微信公眾號群發(fā)消息,現(xiàn)在分享一下
    2013-09-09
  • C#精確計(jì)算年齡的方法分析

    C#精確計(jì)算年齡的方法分析

    這篇文章主要介紹了C#精確計(jì)算年齡的方法,實(shí)例分析了C#計(jì)算時(shí)間的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評論

凤山县| 台南县| 图们市| 元谋县| 宾阳县| 襄樊市| 苏尼特左旗| 吉林市| 逊克县| 天峨县| 罗山县| 徐汇区| 聊城市| 永嘉县| 眉山市| 平塘县| 家居| 扎鲁特旗| 佛学| 水富县| 岑巩县| 民权县| 东乌珠穆沁旗| 平利县| 淮安市| 大连市| 拜城县| 武隆县| 淳化县| 寿光市| 苍南县| 天门市| 白沙| 庄浪县| 清远市| 岱山县| 澜沧| 永顺县| 兴安县| 秦安县| 大洼县|