Unityで作業をしていて、ファイル名の変更で少しひっかかったのでメモ。
ファイル名の変更とGUID
Unityでファイル操作を行う場合、ファイルの移動やリネームはUnityエディタで行う必要があります。
というのも、Unityは全てのファイル(アセット)にGUID(グローバル単位のユニークなID)を割り振り管理しているのですが、
Unity以外でファイルの移動やリネームを行った場合「ファイルが移動した」ではなく「ファイルが1つ消え、新しく別のファイルが作成された」と判断されGUIDが新しく割り振られます。そして結果としてGUIDから参照しているアセットがmissingになる為です。
なのでUnityが「移動した」「改名した」と判断できる、もしくは「改名してない」と判断できるようUnityエディタ上で変更するのが望ましいのですが、今回すこし問題が出ました。
つまり、対象のファイルが結構たくさんあった場合です。
GUIDを操作しないようにファイル名を変更する
missingにしないためには、GUIDが変化しないようにリネームする必要がありますが、数が多いと非常に面倒です。たとえばキャラクター名をYukoとTokoで勘違いしてた場合など、ほぼすべてのファイル名の一部に変更が入ります。
GUIDが更新されるタイミングは色々とありますが、基本的には.metaファイルが新しく生成されたタイミングですので、.metaファイルが新しく生成されない限りはGUIDが更新されません。
なので、ファイルを更新する際「ファイルと同名のメタファイルも同じ名前に更新」すれば、GUIDが更新されずmissingになる事はありません。少なくともmetaで管理してる方式ならば。
このmetaファイルですが、初期設定では隠しファイルなので、表示してやるのが色々と良さそうです。
表示するにはメニューバー>ProjectSettings>EditorのVersion ControlのModeをVisible Meta Filesに設定です。
本当はエディタ拡張でやろうと思いましたが、普通に.meta更新した方が楽だし応用が効いたのでお蔵入り。