Unity

UnityのGUIDとは何なのか?

More than 1 year has passed since last update.


GUIDとは何なのか?


GUIDとは

UnityではAssetsディレクトリで管理するAssetファイル(シーン・Prefab・スクリプト・ディレクトリ・リソースetc)全てにこのGUID(全世界のUnityプロジェクト内で唯一のID)が割り振られていて、Inspectorから他のPrefab等のAssetファイル参照時もAssetファイル内では単にGUIDが書かれている。つまり、ファイルパスではなく、このGUIDでアセットを管理している。


オブジェクト同士の関係?

Editor上で設定されたオブジェクト同士の関係はmetaファイルに別のAssetのGUIDを書き込むことで保存されている。GUIDがあるからこそ、Unityが配布するサンプルパッケージなどの互換性を保つことができている。PrefabのMaterialがMissingになったり、MaterialからTextureが剥がれたりするのはだいたいGUIDが正常では無くなっているからである。


表示の違い

Noneと最初から何もセットされていない状態で、Missingは何かがセットされていたがセットされていたGUIDが存在しない状態である。


GUIDとUUIDの違い

UUIDとはUniversally Unique Identifierのこと。ソフトウェア上で端末などのオブジェクトを一意に識別するために使用される。UUIDは128ビットの数値だが、16進法で表現されることが多い。元来、分散システム上で統制がなくても作成できる識別子として設計されており、将来にわたって重複や偶然の一致が起こらない前提で用いることができる。GUID(Globally Unique Identifier)またはグローバル一意識別子は、マイクロソフトによるUUIDの実装の一つである。広く普及しているため、UUIDの別名としても使われる。GUIDは16バイト(128ビット)の2進数値である。


GUIDの生成方法?

AssetDatabase.GUIDToAssetPathでGUIDからファイルパスを取得できたり、AssetDatabase.AssetPathToGUIDでファイルパスからGUIDを生成できるが、ファイルパスをGUID生成時に使用しているわけではないので重複していなければ適当な文字列でも問題はない(ただし自前でGUIDを作成するとどこで重複が発生するか不明のためUnityの自動生成に任せるか、Unity上でツールを構築する方が安全である)。


参考サイト

すいません、結構前に書いた記事なので、どこから情報を引っ張ってきたかはこれ以上覚えてないです…。