ノートの端の書き残し

UnityやらC#やら。設計が得意かもしれない。

UnityでGUIDをいじって楽する

Unityの適当なシーン(.unity)やプレハブをテキストで開いてみると、

m_Script: {fileID: 何らかの数字列, guid: 何らかの文字列, type: 3}

こんな行が見つかるはずです。 「テキストファイルで開く」ができない場合は Edit -> Project Setting -> Editor -> Asset SerializationのModeをForce Textにしましょう。

さて、このguid何かというと、アセットのIDです。 Projectの中のどのAssetを参照しているのかがこれで特定できるようになっています。 m_Script: の行に書いてあるので、何かスクリプトを参照しているようですね。 fileIDに関しては今回は説明しませんが、こちらのブログでわかりやすく説明されています。 渋谷ほととぎす通信 Unity Prefabの中身(YAML)を読んで参照関係を正しく理解する

www.shibuya24.info

.unityや.prefabは先ほど書いたようにどのアセットを参照するかをGUIDで持っていましたが、ということはアセット側は全部自分のGUIDを持っているということですね。これは.metaファイルを見ることで確認することができます。付け加えるならば、GUIDはmetaファイルが生成されたタイミングで生成されます。GUIDは

docs.unity3d.com

こちらを用いることで取得できます。 尚、ファイルパスを参考にしてGUIDは生成されているようですが、同じパスだからといって同じGUIDが生成されるわけではありません。
というか生成されるたびに変わります。
あくまでもこれはパスを指定したらそのmetaファイルに書いてあるGUIDを取得してくる便利関数です。

ここまでGUIDの基礎知識を得たところで、ということは、.unityや.prefabの持っているアセット参照用guidを置換してしまえばアセットの参照を置換することにもなるのでは? と思うはず。
実際その通りです。 この画像やっぱりこっちの新しいのに置き換えたいなぁ……でも結構いろんなシーンで使ってて、どこで使われているか探すの大変だなぁ。
そういう際は.unityと.prefabの古い画像のguidを全検索し、新しい画像のguidに置換してやるだけでOK!
ただのテキストファイルの編集なので、なんでも好きなもの使って直接書き換えてやりましょう!
私は諸事情あってエディタ拡張で作らざるを得なかったのでC#で書きました。