(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



ScriptableObject等のアセットの名前をプログラムから変更したい時はAssetDatabase.RenameAsset 【Unity】【エディタ拡張】


このエントリーをはてなブックマークに追加



この記事でのバージョン
Unity 2019.4.17f1


はじめに

Unityのアセットの名前はProject上で簡単に変える事が出来ますし、

しかも名前を変えても他からの参照が切れたりもしません。

f:id:kan_kikuchi:20210121070537g:plain


今回はこれと同じ事をプログラムでやりたい時の話です!


AssetDatabase.RenameAsset

結論から言うとUnityでアセットの名前を変えたい時はAssetDatabase.RenameAssetを使います。



具体的には以下のような感じで、対象のパスをAssetDatabase.GetAssetPathで取得し、

RenameAssetの第1引数にそのパス、第2引数に新しい名前(パスではなく)を指定する感じです。

//ResourcesからSampleScriptableObject取得
var sample = Resources.Load<SampleScriptableObject>("SampleScriptableObject");
    
//SampleScriptableObjectのパス取得
var path = AssetDatabase.GetAssetPath(sample);
    
//名前変更
AssetDatabase.RenameAsset(path, $"NewSample");    
f:id:kan_kikuchi:20210121071806g:plain


ちなみにnameを編集することも出来ますが、

データ上の名前は変わってるぽいのですがファイル名が変わりません。

SampleScriptableObject.name = "SampleScriptableObjectTest";
f:id:kan_kikuchi:20210121070625j:plain


また、File.Moveで名前を変更する事も可能ですが

この場合はmetaファイルも一緒にリネームしないと参照が切れますし、

Unity上で変更が即反映されなかったりもします。

//ResourcesからSampleScriptableObject取得
var sample = Resources.Load<SampleScriptableObject>("SampleScriptableObject");
    
//SampleScriptableObjectのパス取得
var path = AssetDatabase.GetAssetPath(sample);
    
//名前変更(metaファイルは変わってないので参照は切れる、Unity上での更新もされない)
File.Move(path, path.Replace("SampleScriptableObject", "NewSample"));
f:id:kan_kikuchi:20210121074022g:plain