Texture の Read/Write Enabled 変更して 戻すには 似た処理を 2回書く必要があったので
それなら Scope にしてしまえと思ったので作成してみました
using UnityEditor; using UnityEngine; public class TextureReadableScope : GUI.Scope { private string _path; private bool _isChange; public TextureReadableScope(Texture2D texture) { _path = AssetDatabase.GetAssetPath(texture); _isChange = SetReadable(true); } protected override void CloseScope() { if (!_isChange) return; SetReadable(false); } private bool SetReadable(bool enable) { var importer = AssetImporter.GetAtPath(_path) as TextureImporter; if (importer.isReadable == enable) return false; importer.isReadable = enable; importer.SaveAndReimport(); return true; } }
使い方
private void Test() { // この Scope の間だけ true になる using (new TextureReadableScope(_texture)) { for (var x = 0; x < _texture.width; x++) { for (var y = 0; y < _texture.height; y++) { var color = _texture.GetPixel(x, y); // 何かしらの処理 } } } }