本文為博主原創(chuàng)文章,歡迎轉(zhuǎn)載,請保留出處:http://blog.csdn.net/andrewfan

Unity編輯器中何時需要協(xié)程

當(dāng)我們定制Unity編輯器的時候,往往需要啟動額外的協(xié)程或者線程進行處理。比如當(dāng)執(zhí)行一些界面更新的時候,需要大量計算,如果用戶在不斷修正一個參數(shù),比如從1變化到2,這種變化過程要經(jīng)歷無數(shù)中間步驟,調(diào)用N多次Update,如果直接在Update中不斷刷新,界面很容易直接卡死。所以在一個協(xié)程中進行一些優(yōu)化,只保留用戶最后一次參數(shù)修正,省去中間步驟,就會好很多。這屬于Unity編輯器的內(nèi)容,也屬于優(yōu)化的內(nèi)容,還是放在優(yōu)化中吧。

解決問題思路

Unity官網(wǎng)的questions里面也有很多人在搜索這個問題,不過后來是看到有個人提到了這個方法。問題的關(guān)鍵點就是“EditorApplication.update ”,有個這樣的方法,你把要執(zhí)行的協(xié)程傳遞給它就可以在編輯器下自動執(zhí)行循環(huán)調(diào)用。

老外的寫法

當(dāng)然,后來我也找到一個老外的寫法,代碼貼出來如下:

using UnityEngine;using UnityEditor;using System.Collections;using System.Collections.Generic;using System.Runtime.CompilerServices;public static class EditorCoroutineRunner{    private class EditorCoroutine : IEnumerator
    {        private Stack<IEnumerator> executionStack;        public EditorCoroutine(IEnumerator iterator)        {            this.executionStack = new Stack<IEnumerator>();            this.executionStack.Push(iterator);
        }        public bool MoveNext()        {
            IEnumerator i = this.executionStack.Peek();            if (i.MoveNext())
            {                
        
		

網(wǎng)友評論