うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Texture の Read/Write Enabled 変更する Scope

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);
                // 何かしらの処理
            }
        }
    }
}