Packageとは?
すごくざっくりいうと、Assetのデータを外部にエクスポートする仕組み。
Sceneやprefabを.packageというファイルにまとめてエクスポートしてくれる。
ただエクスポートするだけじゃなく、Unity内部で持っている参照関係や、Imageコンポーネントで使っている画像データを自動で検出してまとめてエクスポートしてくれたりするすごいやつ。(例えばSceneをエクスポートすると、Sceneの中に入っている画像やスクリプトだけ取り出してpackageの中に含めてくれる。賢い。)
Unityエディタ内で作成したデータを受け渡す際に必須になる機能。
なぜPackageを使うの?生のファイルの受け渡しではダメなの?
ダメ。
なぜかというと、Unityエディタ内で紐づいているファイル同士がバラバラになってしまうから。
UnityではmetaファイルとUUID,Sceneビューからの参照情報などを使ってデータの依存関係を管理しているが、手動でファイルを移動させるとこのUUIDが書き換わってしまい、参照が切れた状態になって設定が狂ってしまう。packageを使うとこの参照情報を保った状態で受け渡しを行えるため、packageを使う必要がある。
参照切れは小さなファイルなら手でも直せるが、GameObjectの数が数百に登る大きなファイルであれば参照切れを手で修正するのはほとんど不可能。絶対package使ってね。
※ 興味がある場合は「.metaファイル」「UUID」などでググると有益な情報がヒットするかも。
Packageを使ってみよう
今回はメッセージウィンドウのprefabを作ってpackageで出力してみる。
Unity package の使い方
パッケージ作成手順
適当なプロジェクトデータを用意して、下記のようなメッセージウィンドウを作成。
Hierarchy ViweからGameObjectのMessageWindowをAsset Viewの任意のディレクトリにD&Dし、Prefab化する。
ちなみにPrefabというのはインスタンスの情報を保存したテンプレートのようなもの。
画面上部からAssets->Export package...をクリック。このとき、Backgroundに使用した画像が含まれていることを確認。
ダイアログでExportをクリックする。
package完成!
Packageをインポートする
Packageは別のプロジェクトにインポートできる。
Packageインポート手順
別のプロジェクトを開いて、作成したPackageをダブルクリックする。
インポート完了!
prefab,Package化の単位
基本は共通化する部品をprefabにする(ボタンとか.)
こうすることで、packageを読み込むだけで変更が反映されて欲しい部分全てに変更が反映されるようになる。
さらなる学習のために
prefabの分け方は勉強すると良い。特に2019以降でprefabのワークフローは今までと大きく変わったので、調べる際には最新の情報を参照すること!
関連トピック
Atomic Design:UIを原子、分子などの単位に分けて、それらを組み合わせることで再利用性を高めようという設計パラダイム。webフロントエンドの分野で主流。
コンポーネント志向:コンポーネントという単位で機能を区切り、それらを組み合わせる事でソフトウェアを構成する設計パラダイム。Unityはコンポーネント志向に基づいて作られている。
Unity公式ドキュメント:Unity2019からprefabを入れ子構造にすることができるようになり、再利用性が飛躍的に高まった。知っておくと非常に便利なので、発展的な知識を得たい場合は必読。