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
