Вот некоторый код, который откроет диалоговое окно единого файла и загрузит выбранную текстуру в материал присоединенного объекта.
string path = EditorUtility.OpenFilePanel("Load an image", "", "png");
if (string.IsNullOrEmpty(path)) {
return;
}
// Load the images bytes from file (this is a synchronous call!)
byte[] bytes = null;
try {
bytes = System.IO.File.ReadAllBytes(path);
} catch (System.Exception e) {
Debug.LogError(e.Message);
return;
}
// Load the bytes into a Unity Texture2D
Texture2D _tex = new Texture2D(2,2);
_tex.LoadImage(bytes);
// Apply this texture to the object
Renderer r = (target as Component).gameObject.GetComponent<Renderer>();
if (r != null) {
r.material.SetTexture("_MainTex", _tex);
}
Последняя часть, только для демонстрации, будет работать только наскрипт, полученный из Editor
, потому что он использует target
для поиска присоединенного средства визуализации.Вам решать, что делать с текстурой в вашем EditorWindow
скрипте.
Кроме того, не забывайте явно вызывать DestroyImmediate
для вашей текстуры, когда она вам больше не нужна, так как вы можете в итогеутечка памяти в коде вашего редактора.