Gitなどのバージョン管理システムを使えない環境において、Unity Package(.unitypackage)のエクスポート・インポートでアセットをやり取りする場合、既存プロジェクトの何が更新され、何が更新されないのかを検証しました。
検証用データの準備
Unityプロジェクトを新規作成し、以下の3種類のパッケージを作成しました。
Pack01:初期状態
「A」「B」「C」というフォルダを作成し、それぞれに「A」「B」「C」の画像ファイルを配置してパッケージをエクスポートしました。

Pack02:階層を変更
「Common」フォルダを新規作成してABCの画像ファイルを移動し、元のフォルダを削除した状態でエクスポートしました。

Pack03:画像と設定を更新
ABCの画像の色を変更し、インスペクターの設定(Packing TagをTESTに変更)も変更した状態でエクスポートしました。

インポートの検証結果
Pack01をインポート
インポート画面で緑色の「New」バッジが表示され、新規アセットとして正常にインポートされました。

Pack02をインポート
「all assets from this package are already in your project」とダイアログに表示され、更新対象が存在しないと判定されてインポートできませんでした。

Pack03をインポート
更新アイコンが表示され、画像データおよびインポート設定の上書きに成功しました。
ただし、プロジェクト内のフォルダ階層はPack01の配置のまま維持されます。

Unityのほかの記事は、まとめからご覧いただけます。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
環境設定の記事は、ほかにもあります。




検証結果まとめ
- アセットファイル本体およびインポート設定は上書き更新される
- フォルダ階層は変更されない(metaファイルのGUIDで同一アセットと判定されるため)
- ファイル名も変更されない(ファイル名を変更していてもGUIDが一致していれば中身だけが更新される)
参考:https://docs.unity3d.com/jp/530/Manual/AssetPackages.html
階層や命名を変更したい場合
パッケージのインポートではなく、AssetDatabase APIを用いたスクリプトを実行することで、プロジェクト内のアセット階層やファイル名を変更できます。
using UnityEngine;
using UnityEditor;
public class MoveAssets : MonoBehaviour
{
[MenuItem("Sample/MoveAssetsToDirectory")]
private static void Example()
{
AssetDatabase.MoveAsset("Assets/A/Sample.png", "Assets/B/Sample.png");
}
}参考:https://docs.unity3d.com/jp/current/Manual/AssetDatabase.html
よくある質問:パッケージのインポートで更新されるもの
この記事では、何を検証していますか?
Gitなどのバージョン管理システムを使えない環境で、Unity Package(.unitypackage)のエクスポート・インポートでアセットをやり取りする場合に、既存プロジェクトの何が更新され、何が更新されないのかを検証しています。
どんなパッケージで検証しましたか?
Unityプロジェクトを新規作成し、3種類のパッケージを作成しています。Pack01は初期状態(「A」「B」「C」のフォルダにA・B・Cの画像を配置)、Pack02は階層を変更(「Common」フォルダを作成して画像を移動し、元のフォルダを削除)、Pack03は画像と設定を更新(画像の色とPacking Tagの設定を変更)した状態です。
Pack01をインポートすると、どうなりますか?
インポート画面で緑色の「New」バッジが表示され、新規アセットとして正常にインポートされました。
階層を変更したパッケージ(Pack02)は、インポートできますか?
記事の検証では、「all assets from this package are already in your project」とダイアログに表示され、更新対象が存在しないと判定されてインポートできませんでした。
画像や設定を更新したパッケージ(Pack03)は、どうなりますか?
更新アイコンが表示され、画像データおよびインポート設定の上書きに成功しました。ただし、プロジェクト内のフォルダ階層は、Pack01の配置のまま維持されます。
インポートで、更新されるもの・されないものは何ですか?
記事のまとめでは、アセットファイル本体およびインポート設定は上書き更新され、フォルダ階層は変更されません。metaファイルのGUIDで同一アセットと判定されるため、ファイル名を変更していても、GUIDが一致していれば中身だけが更新されます。
階層やファイル名を変更したいときは、どうすればよいですか?
パッケージのインポートではなく、AssetDatabase APIを用いたスクリプトを実行することで、プロジェクト内のアセット階層やファイル名を変更できます。詳しい内容は、記事内の参考リンク(Unity公式マニュアル)を参照してください。
この検証は、どのUnityのバージョンで行われていますか?
記事には、検証したUnityのバージョンの記載がありません。バージョンによって動作が異なる場合があるため、お使いの環境では、少数のアセットで試してから使い、最新の仕様は、Unityの公式マニュアルで確認してください。
