本文為博主原創(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()) {