通常、Unityに同じ名前のファイルをドラッグ&ドロップしたとしても新しいファイルが作られてしまい、上書きはできません。
そのため、metaファイルの内容を維持したままファイルの上書きをするのにMacのFinderやWindowsのExplorerを利用している方も多いのではないでしょうか。
今回、新しいファイルで置き換えるか両方とも残すか選べるようにする拡張を作成したので紹介します。
目次
ダウンロード
GitHubよりダウンロードできます
GitHubの使い方が分からない方はこちらのツイートを参考にして下さい
Unityの拡張についてGitHubよくわからんから導入できない!という声をよく見るので
右上あたりにある緑色の「Code」ボタンを押し、一番下に「Download ZIP」があるので押す
あとはパッケージによりますが、僕が公開しているものはAssetsフォルダ以下のどこでもいいので丸ごと配置すればOKです pic.twitter.com/KeWJ7UPxPF
— AMAGAMI@Unityエンジニア (@ina_amagami) August 27, 2021
特徴
従来の拡張
新しいファイルが作成されてしまうこと自体は防ぐことができません。
例えば「Effect.png」というファイルをドラッグ&ドロップした時、既に存在する場合は「Effect 1.png」というファイルが作られます。
このように後ろに番号が付いたファイルが追加されたか調べることで、上書きを実現している拡張は今までも存在しました。
しかし、対応できないケースがあります。
問題は既にナンバリングが振られているファイル群だ。このナンバリングを付与する仕組みは、ファイル末尾にナンバーが振られている場合はナンバーを増やしてコピーしてしまう。その為、例えばitem1.png のようなファイル名の場合、 item2.png としてしまう。こうなると、item2を追加したのか、追加したら2になったのか判断ができない為、上書きコピーする事ができない。 – テラシュールブログから引用
ファイルの中身を比較する
上記の問題に対応するため、AssetPostprocessorを利用し新しく作成されたファイルの中身と、ドラッグ&ドロップしたファイルの中身を比較して、一致していたら「中身が同じなのに別の名前でインポートされた」と判断するようにしました。
これによって、どのように番号が振られたとしても対応することができます。
上書きを実行した場合はUnityによって追加されたファイルは削除します。
複数ファイル対応
複数ファイルのドラッグ&ドロップにも対応しています。
注意点
他にAssetPostprocessorを利用している場合
Overwriterによってファイルが削除された後、他のPostprocessorが作動することがあります。
その場合、処理対象のファイルが存在するかどうか調べてから処理しないとエラーになります。
プレハブは未対応
NestedPrefabの影響かと思われますが、インポートが終わらなくなる問題があるため除外しています。
フォルダは未対応
同じ名前のフォルダごとインポートしたら中身を全て上書き…という機能はありません。中身を全て選択してインポートして下さい。
同じ内容のファイルを同時にインポートできない
ファイルの中身を比較している関係上、全く同じ内容のファイルを一度に2つ以上インポートしようとすると上書きは動作しません。
インポートしようとした場合はこのように拡張が停止するメッセージが出るため、そのままインポートを実行すれば新しくファイルが作られます。
そもそも同じ内容のファイルを複数インポートすること自体、アセットを使いまわしてデータを削減する考え方に反しているので気にしないことにしています。
あくまで同時にインポートしようとした場合なので、1つずつインポートすれば上書きも可能です。