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