仕事で古いUnityプロジェクトを捨て、新しいUnityプロジェクトに必要な部分だけ移転するということをしました。
プロジェクトのベース部分の仕様を変更するため、ベースを別プロジェクトで開発しそこに既存のものを載せるためにこういうことが必要になりました。
はじめから設計をちゃんとしてこういうことが起こらないようにしろよという話ですが、そうもいかないこともあるでしょう。
これはやり方がわかっていればそこまで時間がかからないのですが、わからずにやると泥沼なので、是非シェアしたいと思います。
ExportPackageを使う
Unityの素敵機能、ExportPackageを使いましょう。
ExportPackageを使うと、Unityプロジェクト上のファイルを依存関係にあるファイルを自動で発見し、ひとまとめにして出力することができます。
使い方
Projectタブのアセットを選択して右クリック→ExportPackageで出せます。

すると選択したアセットに関連付けられたアセットが自動でリストアップされて表示されます。

ExportPackageの仕様
ExportPackageを開く際に選択していたアセットが関連付けられているアセットを自動でリストアップします。
複数のアセットを選択していた場合は、いずれか一つでも関連づいているアセットをすべてリストアップします。
例えばSceneファイルを選択した場合、
- Sceneファイル
- Sceneファイルが持っているプレファブ
- Sceneファイルが持っているcsファイル
- プレファブにアタッチされているcsファイル
- プレファブにアタッチされているリソースファイル
- csファイルと依存関係のあるcsファイル
- csファイルと依存関係のあるcsファイルと依存関係のあるcsファイル
- ...
とアタッチされているorコードで関連付けられているものを全部持ってきてくれます。
つまり、とりあえず動きます。
ただし、csファイルからResources.Loadで呼び出しているものは取得してくれません。
まあResources.Load関数をプロジェクトで検索して後で必要な物だけ手動で持ってくればいいと思います。これだけならすぐ終わるので。
具体的な使い方
関連するもの全部持ってきてくれる
→今後いらない物も全部持ってくる
ということなので、ExportPackageする前に切断部分を決めて、依存関係を切っておきましょう。
とはいえどことどこが依存しているとか全部把握しているのは難しいと思うので、ExportPackageをまず見て、要らなそうな部分をなんとなく察し、そこの担当者と一緒にレガシーな部分をそぎ落として行きましょう。
また、特定のSceneを抜き出したいのであればそのSceneを選択。特定の機能を抜き出したいのであればその機能の中核となるcsファイルを選択してExportPackageするといいと思います。
追記:もう一つのExportPackageの出し方
ちなみに上のパネルから、Assets/ExportPackageを選択する方法もあります↓

この方法でExportPackageすると、恐らくはプロジェクト内のすべてのcsファイルとそれに関連付けられたプレファブ、リソースが自動で出力されます。
そのためUnityプロジェクトすべてを移したい場合に有効です。今回の目的には前に示した方法の方がいいですね。