はじめに
Unity エディタでは、プロジェクト内のアセットを管理するために、GUID (Globally Unique Identifier) が使用されています。GUID とは、128ビットの一意な識別子で、アセットを正確に特定するために使用されます。
本記事では、Unity 上で選択したアセットの GUID をクリップボードにコピーする拡張をご紹介します。
目次
Unity の GUID とは?
Unity でプロジェクトを作成する際、各アセット(画像、スクリプト、プレハブなど)は一意の識別子を持ちます。これをGUID(Globally Unique Identifier)と呼びます。GUID は一見するとランダムな文字列のように見えますが、これにより Unity はプロジェクト内のあらゆるアセットを正確に識別できます。
あなたがアセットを別のフォルダに移動したとしても、Unity はその GUID を使って、そのアセットがどこに移動したのかを追跡できます。つまり、GUID は Unity がアセットの追跡と管理を行うための重要な要素です。
GUID はなぜ必要なの?
これが無いとどうなるかを考えてみましょう。例えば、あるアセットを参照しているスクリプトがあり、そのアセットを別の場所に移動すると、スクリプトはそのアセットを失い、エラーを発生させます。しかし、GUID のおかげで Unity はアセットの移動を追跡でき、スクリプトは正常に動作を続けます。
なお、アセットの GUID は一度作成されると変更することはありません(アセットを削除して再インポートした場合を除く)。
アセットの GUID を簡単にコピーするエディタ拡張を作ってみる
Unity の Project ビューにて現在選択中のアセットを、右クリックから簡単に GUID をクリップボードにコピーするエディタ拡張を実装します。
新しい C# スクリプトを作成し、以下のコードを書きます。
using UnityEngine;
using UnityEditor;
#if UNITY_EDITOR
public class CopyAssetGUID
{
[MenuItem("Assets/GUIDをクリップボードにコピー", false)]
private static void Execute()
{
int instanceID = Selection.activeInstanceID;
string path = AssetDatabase.GetAssetPath(instanceID);
if (string.IsNullOrEmpty(path))
{
Debug.LogError("アセットが選択されていないか、選択されたオブジェクトがアセットではありません。");
return;
}
string guid = AssetDatabase.AssetPathToGUID(path);
GUIUtility.systemCopyBuffer = guid;
}
}
#endif
コードを詳しく見ていきましょう。
- まず、
#if UNITY_EDITOR
ディレクティブを使用しています。このコードは Unity エディタ内でのみ実行されることを意味します。 MenuItem
属性を使用して、”Assets” メニューに新しい項目 “GUIDをクリップボードにコピー” を追加しています。これにより、Unity エディタの Assets メニューから直接この機能を呼び出せます。- 最後に、
Execute
関数がメニュー項目から呼び出される処理を定義しています。選択されたアセットのインスタンスID を取得し、それを使ってアセットのパスを特定します。アセットのパスが存在する場合、それを GUID に変換し、クリップボードにコピーします。パスが存在しない場合はエラーメッセージをログに出力します。
これで Unity エディタの Project ビューにある対象のアセットを選択し、右クリックから「GUIDをクリップボードにコピー」を選ぶと、そのアセットの GUID がクリップボードにコピーされるようになります。
また、メニューの「Assets 」内にも項目が追加され、ここからでも GUID のコピーが可能です。
おわりに
以上が Unity のエディタ拡張機能を使って、アセットのGUIDを簡単にコピーする方法です。
これは非常に便利な機能であり、特に大きなプロジェクトで作業する際にはアセット管理を効率化するのに役立つでしょう。Unity エディタを拡張することで、あなた自身のワークフローに合わせてエディタをカスタマイズできます。是非活用してみてください。