この記事でのバージョン
Unity 2019.4.17f1
はじめに
Unityのアセットの名前はProject上で簡単に変える事が出来ますし、
しかも名前を変えても他からの参照が切れたりもしません。
今回はこれと同じ事をプログラムでやりたい時の話です!
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");
ちなみにnameを編集することも出来ますが、
データ上の名前は変わってるぽいのですがファイル名が変わりません。
SampleScriptableObject.name = "SampleScriptableObjectTest";
また、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"));