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

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

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

解決問題思路

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

老外的寫法

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

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())
            {