Unityパッケージマネージャー

Unityは長い間存在してきたプラットフォームであり、常に進化しています。 ただし、複数のプロジェクトで同時に作業しても、一般的なソース(.cs)、ライブラリ(.dll)、およびその他のアセット(画像、サウンド、モデル、プレハブ)を使用する際に問題が発生する可能性があります。 この記事では、Unityのこのような問題に対するネイティブソリューションの使用経験について説明します。


共有リソースの配布方法


異なるプロジェクトで共有リソースを使用する方法は複数ありますが、それぞれのアプローチには長所と短所があります。

1.複製-プロジェクト間でリソースを複製します。

長所:


短所:


2. Gitサブモジュール -外部サブモジュールを介した共有リソースの配布。

長所:


短所:


3. NuGet-NuGetパッケージを介した共有ライブラリの配布。

長所:


短所:

4. Unity Package Manager-Unityのネイティブソリューションを介した共有リソースの配布。

長所:


短所:


後者の方法には、欠点よりも利点があります。 ただし、ドキュメントが不足しているため、現時点ではあまり人気がないため、詳細に説明します。

Unityパッケージマネージャー


Unity Package Manager(以降UPM)はパッケージ管理ツールです。 Unity 2018.1に追加され、Unity Technologiesが開発したパッケージにのみ使用されました。 ただし、バージョン2018.3以降、カスタムパッケージを追加できるようになりました。


Unity Package Managerインターフェイス

パッケージはプロジェクトソース(Assetsディレクトリ)に分類されません。 これらは別のディレクトリ%projectFolder%/Library/PackageCacheあり、プロジェクトに影響を与えることはありません;ソースで言及しているのはpackages/manifest.jsonファイルのみです。


プロジェクトファイルシステムのパッケージ

パッケージソース


UPMはいくつかのパッケージソースを使用できます。

1.ファイルシステム。

長所:


短所:


2. Gitリポジトリ。

長所:


短所:


3. npmリポジトリ。

長所:


短所:


以下では、UPM + npmの実装を見ていきます。 このバンドルは、あらゆる種類のリソースを操作したり、パッケージバージョンを管理したり、ネイティブUPMインターフェイスを完全にサポートしたりできるため、便利です。

Verdaccioをnpmリポジトリとして使用できます。 それについての詳細なドキュメントがあり、起動するのに数個のコマンドが必要です。

環境設定


まず、 node.jsをインストールする必要があります。

パッケージ作成


パッケージを作成するには、このパッケージの内容を含むディレクトリに、それを記述するpackage.jsonファイルを配置する必要があります。 以下を行う必要があります。

  1. パッケージを作成するプロジェクトディレクトリに移動します。
  2. npm initコマンドを実行し、ダイアログ中に必要な値を入力します。 nameには、逆ドメインの形式で名前を指定します(例: com.plarium.somepackage
  3. パッケージ名を簡単に表示するには、 displayNameプロパティをpackage.json追加してデータを入力します。
  4. npmはjs指向なので、ファイルにはUnityが使用しないmainscriptsを必要としないプロパティが含まれています。 パッケージの説明を詰まらせないように、それらを削除することをお勧めします。 ファイルは次のようになります。

     { "name": "com.plarium.somepackage", "displayName": "Some Package", "version": "1.0.0", "description": "Some Package Description", "keywords": [ "Unity", "UPM" ], "author": "AUTHOR", "license": "UNLICENSED" } 

  5. Unityを開き、package.jsonの.metaファイルを生成します(Unityは、.metaファイルのないアセット、Unityのパッケージは読み取り専用で表示されません)。

パッケージを送信しています


パッケージを送信するには、コマンドnpm publish --registry * *ます。

Unity Package Managerを介したパッケージのインストールと更新


Unityプロジェクトにパッケージを追加するには、次のものが必要です。

  1. manifest.jsonファイルにパッケージソース情報を追加します。 これを行うには、 scopedRegistriesプロパティを追加し、特定のスコープが検索されるスコープとソースアドレスを指定します。

     "scopedRegistries": [ { "name": "Main", "url": "   ", "scopes": [ "com.plarium" ] } ] 
  2. Unityに移動して、パッケージマネージャーウィンドウを開きます(カスタムパッケージの操作は、組み込みパッケージの操作と変わりません)。
  3. すべてのパッケージを選択します。
  4. 必要なパッケージを見つけて追加します。


ソースとデバッグの操作


ソースをプロジェクトに接続するには、パッケージのアセンブリ定義を作成する必要があります。

パッケージを使用しても、デバッグ機能は制限されません。 ただし、Unityでパッケージを操作する場合、パッケージでエラーが発生した場合、コンソールでエラーをクリックしてIDEに移動することはできません。 これは、アセンブリ定義を使用するときにスクリプトがライブラリに収集され、プロジェクトに接続されるため、Unityはスクリプトを個別のファイルとして認識しないためです。 プロジェクトのソースコードを操作する場合、クリックでIDEに移行できます。

パッケージが接続されたプロジェクト内のスクリプト:


ブレークポイントが機能するパッケージのスクリプト:


緊急パッチの修正


プロジェクトに追加されたUnityパッケージは読み取り専用ですが、パッケージキャッシュで編集できます。 これを行うには、以下を行う必要があります。

  1. パッケージキャッシュのパッケージに移動します。


  2. 必要な変更を加えます。
  3. package.jsonファイルのバージョンを更新します。
  4. パッケージnpm publish --registry * *
  5. UPMインターフェイスを使用して、パッケージバージョンを修正済みのバージョンに更新します。

パッケージのインポートの競合


パッケージをインポートすると、次のGUIDの競合が発生する可能性があります。

  1. パッケージ-パッケージ。 パッケージをインポートするときに、既に追加されたパッケージに同じGUIDのアセットがあるように見える場合、インポートされたパッケージから一致するGUIDのアセットはプロジェクトに追加されません。
  2. パッケージはプロジェクトです。 パッケージをインポートするときに、一致するGUIDを持つプロジェクトに資産があるように見える場合、パッケージの資産はプロジェクトに追加されません。 ただし、それらに依存するアセットは、プロジェクトのアセットの使用を開始します。

プロジェクトからパッケージへのアセットの転送


Unityを開いた状態でプロジェクトからパッケージにアセットを転送すると、その機能は保持され、依存アセットのリンクはパッケージのアセットを使用し始めます。

重要 :アセットをプロジェクトからパッケージにコピーすると、上記のセクションで説明したように、競合する「パッケージ-プロジェクト」が発生します。

可能な競合解決策


  1. 衝突を避けるために、すべてのアセットをインポートするときに、独自のアルゴリズムに従ってGUIDを再割り当てします。
  2. すべてのアセットを1つのプロジェクトに追加し、その後にパッケージに分割します。
  3. すべての資産のGUIDを含むデータベースの作成、およびパケット送信時の検証。

おわりに


UPMは、共有リソースをUnityに配布するための新しいソリューションであり、既存の方法に代わる価値のある方法です。 この記事で説明されている推奨事項は、実際のケースに基づいて作成されました。 それらが役に立つことを願っています。

Source: https://habr.com/ru/post/J445432/


All Articles