渋谷ほととぎす通信

「Unityをわかりやすく」初心者のためのゲーム作りブログ

【罠】Unityプロジェクトのファイルを削除するとき必ずチェックすべき2つのポイント

【罠】Unityプロジェクトのファイルを削除するとき必ずチェックすべき2つのポイント

こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • Unityプロジェクトのファイルって消しても大丈夫?
  • ファイル削除の前に何かやるべきことはある?
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    Unityで開発していると不要なファイルが出てきますよね。

    • 不要な画像
    • 不要なマテリアル
    • 不要なスクリプト
    • 不要なサウンド

    などなど。
    Unityプロジェクトには必要なファイルだけ置いておきたい。
    それでなくてもファイルはどんどん増えていきます。
    いつの間にかゴミ屋敷になることも。

    本記事ではUnityプロジェクトからファイルを削除するときの注意点を紹介します。
    結論、いきなりファイルを消すのは危険です。ダメ絶対。

    ということで、安全なファイルの削除方法の解説をします。

    使用箇所がないことを確認してUnityプロジェクトから削除しよう

    はじめに結論を簡単にまとめます。

    Unityプロジェクトからファイル削除方法

    ①スクリプトはエディタから参照(使用箇所)を確認

    ②削除したいファイルのGUIDで確認

    ③参照(使用箇所)がなくなったことを確認して削除する

    気軽にファイルを消すと事故の元。
    「ゴミファイルだと思っていたら実は使っていた」 みたいなことはよくあります。

    とくにチーム開発の場合に多い事故ですが、
    個人開発でも 1ヶ月前の自分の行動なんて覚えてない ですよね。

    本記事ではUnityプロジェクトからファイルを消す前にやるべき2点を紹介します。
    これを理解すればもう怖くありません。
    バンバン消せます。

    ファイル削除に不安の方はぜひ最後まで読んでみてください。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    【注意】シーンやPrefab、各種アセットで使われている

    あなたが今Unityプロジェクトから削除しようとしているそのファイル。
    どんなところで使われているでしょうか。

    例えば画像だったら以下の可能性があります。

    1. シーン内のImageコンポーネント内
    2. Prefabの中
    3. ScriptableObjectの中
    4. Materialの中
    5. Resourcesフォルダ内からスクリプト参照

    パッと思いつくだけで5種類の可能性があります。
    つまりファイルを削除する前にこれらの可能性を考えておく必要があるのです。

    ファイルの追加は簡単ですが、削除って意外と大変なんですね。

    スクリプト同士の参照の有無で削除してはダメ

    スクリプトファイル(C#ファイル)はどうでしょうか。
    みなさんVisual StudioやRiderといったプログラミングエディタを使っていると思います。

    👉 【2022年版】Visual StudioをインストールしてUnityで使う方法

    たいていのエディタではファイルの参照を検索することができますよね。
    つまりそのスクリプトがどこから呼ばれているのかが分かるのです。

    しかし残念なことに、これだけではすべての使用箇所は洗い出せません。
    その他これらの可能性があるのです。

    1. シーン内の単独で動作するスクリプト
    2. Prefabの中
    3. ScriptableObjectの中

    結論、プログラミングエディタでの参照は検索しつつも最終的には違う方法で検出する必要があるのです。

    ファイル固有のGUIDで参照を解決する

    ファイルの使用箇所は GUIDで検索するのが確実 です。
    GUIDとは、 ファイル固有のID で重複することはありません。

    UnityはGUIDを使って参照関係を保存しています。
    つまりそのGUIDを使えばどこで使用しているかという情報が手に入るということです。

    まずはそのGUIDの確認方法から紹介します。

    Unityプロジェクトから削除するために重要なGUIDの確認方法

    GUIDはmetaファイルで確認します。

    例として、 HelloWorld.cs というスクリプトファイルのmetaファイルを開いてみます。
    metaファイルはファイルと同じ場所にUnityが自動生成。

    【罠】Unityプロジェクトのファイルを削除するとき必ずチェックすべき2つのポイント_0

    HelloWorld.csと同じ階層の HelloWorld.cs.meta がmetaファイルです。

    このHelloWorld.cs.metaをテキストエディタで開いてみます。

    【罠】Unityプロジェクトのファイルを削除するとき必ずチェックすべき2つのポイント_1

    guid: 7442b0c5f6c2141a5806db74c2a11ecb と書かれた部分の
    7442b0c5f6c2141a5806db74c2a11ecb がHelloWorld.csのGUIDです。

    このようにファイルのGUIDを調べるときは、
    metaの中身をテキストファイルで見てみましょう。

    これからこのGUIDを使って参照を調べていきます。
    今回調べたGUIDをしっかり覚えておいてくださいね。

    Unityプロジェクトからファイル削除する前にGUIDで参照確認

    ここからはUnityではなく、シェルスクリプトを使っていきます。
    もしこの記事を読んでいるのが非エンジニアの方であれば、
    この記事をエンジニアに見せて対応してもらってください。

    もちろん、非エンジニアの方にも伝わるように努力して書いていこうと思います。

    今回はMac環境でのお話ですがWindows環境でも動きます。

    まずターミナルを開きます。
    アプリケーション > ユーティリティ > ターミナル をダブルクリック。

    【罠】Unityプロジェクトのファイルを削除するとき必ずチェックすべき2つのポイント_2

    黒または白いスクリーンに文字しかない画面が表示されたと思います。
    オオバはダークモードなので黒のターミナルです。

    【罠】Unityプロジェクトのファイルを削除するとき必ずチェックすべき2つのポイント_3

    まず cd と打ちます。
    cd の後ろに スペース があるので注意。

    今開いているUnityプロジェクトのAssetsフォルダをターミナルにドラッグアンドドロップ。

    【罠】Unityプロジェクトのファイルを削除するとき必ずチェックすべき2つのポイント_4

    そのあとにリターンキーを押してください。

    これで準備は完了です。

    GUIDでファイルを検索

    grep -l 7442b0c5f6c2141a5806db74c2a11ecb -r .  
    

    👆のようにターミナルに打ってみましょう。
    7442b0c5f6c2141a5806db74c2a11ecbの部分は自分が調べたいGUIDに書き換えてください。

    最後にリターンキーを押します。
    するとGUIDにヒットしたファイルリストが表示されます。
    そのファイルが使用箇所ということです。

    【罠】Unityプロジェクトのファイルを削除するとき必ずチェックすべき2つのポイント_5

    👆こんな感じです。

    【罠】Unityプロジェクトのファイルを削除するとき必ずチェックすべき2つのポイント_6

    検索結果はこんな感じ。

    検索したファイル自身のmetaもヒットしてしまう ため、
    使用箇所は合計2箇所だったということがわかりました。

    • ./HelloWorld.prefab
    • ./Sample.unity

    prefabの中シーンの中 で使われていたということでした。
    実際にこのスクリプトを削除する際はprefabとシーンの方を何か対応を入れることになるでしょう。
    あらかじめ削除するスクリプトをPrefabとシーン側から外しておくなど。

    このように GUIDを使えば確実にオブジェクトの参照をクリアにすることができる のです。

    まとめ : Unityプロジェクトのファイルを削除するときチェックすべきポイントまとめ

    最後に記事の内容を簡単にまとめます。

    Unityからファイルを削除時のまとめ

    ①削除する前に参照関係をしっかり確認しよう

    ②Unityの参照関係はGUIDで管理されている

    ③GUIDはmetaファイルに格納されている

    ④grepを使ってGUID検索すると使用箇所がわかる

    こんな感じです。
    シェルやターミナルを使う時点で少しテクニカルで難しかったかもしれません。
    読んでみてわかったと思うのですが、そんなに難しいことはしていないのです。

    Unityプロジェクトからファイルを削除するのは意外と大変でしたね。
    だからこそ日々あまりポンポンごみになりそうなファイルは追加しないほうがよいのです。

    そして参照関係がどこで作られているかパッと見では全くわかりませんでした。
    GUIDが参照の鍵だということも理解できたと思います。

    今後Unityプロジェクトの中身を整理するタイミングで、ファイル削除の機会が訪れた時この記事のことを思い出してください。

    というか読み直してみてください。
    削除する前には 参照関係を解決する必要 があります。
    それだけ覚えておけばとりあえず大丈夫です。

    この記事があなたのUnity開発の助けになると嬉しいです。

    オススメ記事
    検証環境
    • Unity2020.3.26f1