UnityWebRequestTexture
を利用して画像をロードしますが
これは EditorWindow では コルーチン を利用できないので EditorApplication.update
を利用して画像のロードを待ちます
private void LoadTexture(string path) { var request = UnityWebRequestTexture.GetTexture(path); request.SendWebRequest(); EditorApplication.CallbackFunction callback = null; callback = () => { if (!request.isDone) return; if (request.isHttpError || request.isNetworkError) { Debug.LogError(request.error); } else { _Texture = ((DownloadHandlerTexture)request.downloadHandler).texture; } EditorApplication.update -= callback; }; EditorApplication.update += callback; }
サンプル
おなじみイラストやさんからお借りしてロードボタンを押すと画像が表示されます
using UnityEditor; using UnityEngine; using UnityEngine.Networking; public class SampleEditorWindow : EditorWindow { [SerializeField] private Texture2D _Texture; private const string Path = "https://1.bp.blogspot.com/-tWP38QNcn04/X1CK4cXnvjI/AAAAAAABavY/W2xyveWsZCggkTecEC_tEjaBBhCTUmXkQCNcBGAsYHQ/s400/daidougei_cigar_box_woman.png"; private void OnGUI() { if (GUILayout.Button("Load")) { LoadTexture(Path); } if (_Texture != null) { var rect = GUILayoutUtility.GetRect( 0, 0, GUILayout.MaxWidth(200), GUILayout.MaxHeight(200) ); EditorGUI.DrawTextureTransparent(rect, _Texture); } } private void LoadTexture(string path) { var request = UnityWebRequestTexture.GetTexture(path); request.SendWebRequest(); EditorApplication.CallbackFunction callback = null; callback = () => { if (!request.isDone) return; if (request.isHttpError || request.isNetworkError) { Debug.LogError(request.error); } else { _Texture = ((DownloadHandlerTexture)request.downloadHandler).texture; } EditorApplication.update -= callback; }; EditorApplication.update += callback; } }