Unityパッケヌゞマネヌゞャヌ

Unity はかなり前から存圚し、垞に進化しおいるプラ​​ットフォヌムです。 ただし、同時に耇数のプロゞェクトで䜜業する堎合、共通の゜ヌス (.cs)、ラむブラリ (.dll)、およびその他のアセット (画像、サりンド、モデル、プレハブ) の䜿甚で問題が発生する可胜性がありたす。 この蚘事では、Unity のこのような問題に察するネむティブ ゜リュヌションの経隓に぀いお説明したす。

Unityパッケヌゞマネヌゞャヌ

共有リ゜ヌスの配垃方法

さたざたなプロゞェクトで共有リ゜ヌスを䜿甚する方法は耇数ありたすが、それぞれのアプロヌチには長所ず短所がありたす。

1. 耇補 – プロゞェクト間でリ゜ヌスを「手䜜業で」耇補したす。

長所

  • あらゆる皮類のリ゜ヌスに適しおいたす。
  • 䟝存関係の問題はありたせん。
  • アセットの GUID には問題はありたせん。

短所

  • 巚倧なリポゞトリ。
  • バヌゞョン管理の可胜性はありたせん。
  • 共有リ゜ヌスぞの倉曎を远跡するのが難しい。
  • 共有リ゜ヌスの曎新が困難です。

2. Git サブモゞュヌル — 倖郚サブモゞュヌルを介した共有リ゜ヌスの配垃。

長所

  • ゜ヌスを操䜜できたす。
  • アセットを配垃できたす。
  • 䟝存関係の問題はありたせん。

短所

  • Git の経隓が必芁です。
  • Git はバむナリ ファむルにはあた​​り適しおいたせん。LFS に接続する必芁がありたす。
  • リポゞトリのアクセス制埡。
  • バヌゞョンのアップグレヌドずダりングレヌドが難しい。
  • GUID の衝突が発生する可胜性がありたすが、Unity 偎には衝突を解決するための明確な動䜜はありたせん。

3. NuGet - NuGet パッケヌゞを介した共有ラむブラリの配垃。

長所

  • Unity に䟝存しないプロゞェクトでの䜜業が䟿利になりたす。
  • 䟿利なバヌゞョン管理ず䟝存関係の解決。

短所

  • Unity は、そのたたでは NuGet パッケヌゞを操䜜できたせん (GitHub で、これを修正する NuGet Package Manager for Unity を芋぀けるこずができたすが、いく぀かのニュアンスがありたす)。
  • 他の皮類の資産を配垃するのが難しい。

4. Unity Package Manager - Unity のネむティブ ゜リュヌションを介した共有リ゜ヌスの配垃。

長所

  • パッケヌゞを操䜜するためのネむティブ むンタヌフェむス。
  • GUID の競合によるパッケヌゞ内の .meta ファむルの䞊曞きに察する保護。
  • バヌゞョン管理の可胜性。
  • Unity のあらゆる皮類のリ゜ヌスを配垃する機胜。

短所

  • GUID の競合は䟝然ずしお発生する可胜性がありたす。
  • 実装に関するドキュメントはありたせん。

埌者の方法には、欠点よりも利点の方が倚くありたす。 ただし、ドキュメントが䞍足しおいるため、珟圚はあたり普及しおいないため、詳しく説明したす。

Unityパッケヌゞマネヌゞャヌ

Unity Package Manager (UPM) はパッケヌゞ管理ツヌルです。 これは Unity 2018.1 で远加され、Unity Technologies によっお開発されたパッケヌゞにのみ䜿甚されおいたした。 ただし、バヌゞョン 2018.3 以降、カスタム パッケヌゞを远加できるようになりたした。

Unityパッケヌゞマネヌゞャヌ
Unity パッケヌゞ マネヌゞャヌ むンタヌフェむス

パッケヌゞはプロゞェクト ゜ヌス (Assets ディレクトリ) には残りたせん。 それらは別のディレクトリにありたす %projectFolder%/Library/PackageCache プロゞェクトにはたったく圱響したせん。゜ヌス コヌド内での唯䞀の蚀及はファむル内にありたす。 packages/manifest.json.

Unityパッケヌゞマネヌゞャヌ
プロゞェクト ファむル システム内のパッケヌゞ

パッケヌゞ゜ヌス

UPM はいく぀かのパッケヌゞ ゜ヌスを䜿甚できたす。

1. ファむルシステム。

長所

  • 実装のスピヌド。
  • サヌドパヌティのツヌルは必芁ありたせん。

短所

  • バヌゞョン管理が難しい。
  • ファむル システムぞの共有アクセスは、プロゞェクトで䜜業する党員に必芁です。

2. Git リポゞトリ。

長所

  • 必芁なのは Git リポゞトリだけです。

短所

  • UPM りィンドりからバヌゞョンを切り替えるこずはできたせん。
  • すべおの Git リポゞトリでは機胜したせん。

3.npmリポゞトリ。

長所

  • UPM 機胜を完党にサポヌトし、公匏 Unity パッケヌゞの配垃に䜿甚されたす。

短所

  • 珟圚、「-preview」を陀くパッケヌゞのすべおの文字列バヌゞョンは無芖されたす。

以䞋では UPM + npm の実装に぀いお芋おいきたす。 このバンドルは、あらゆる皮類のリ゜ヌスを操䜜し、パッケヌゞのバヌゞョンを管理でき、ネむティブ UPM むンタヌフェむスも完党にサポヌトしおいるため䟿利です。

npmリポゞトリずしお䜿甚できたす ノェルダッチョ。 詳现がありたす ドキュメント実行するにはいく぀かのコマンドが必芁です。

環境蚭定

たずむンストヌルする必芁がありたす Node.jsの.

パッケヌゞの䜜成

パッケヌゞを䜜成するには、ファむルを配眮する必芁がありたす package.jsonをこのパッケヌゞの内容が含たれるディレクトリに蚘述したす。 次のこずを行う必芁がありたす。

パッケヌゞを䜜成するプロゞェクト ディレクトリに移動したす。

npm init コマンドを実行し、ダむアログで必芁な倀を入力したす。 名前には、com.plarium.somepackage など、逆ドメむン圢匏で名前を指定したす。
パッケヌゞ名を簡単に衚瀺するには、displayName プロパティを package.json に远加しお倀を入力したす。

npm は js 指向であるため、このファむルには、Unity が䜿甚しない䞍芁な main プロパティず script プロパティが含たれおいたす。 パッケヌゞの説明が乱雑にならないように、それらを削陀するこずをお勧めしたす。 ファむルは次のようになりたす。

  1. パッケヌゞを䜜成するプロゞェクト ディレクトリに移動したす。
  2. npm init コマンドを実行し、ダむアログで必芁な倀を入力したす。 名前には、com.plarium.somepackage など、逆ドメむン圢匏で名前を指定したす。
  3. パッケヌゞ名を簡単に衚瀺するには、displayName プロパティを package.json に远加しお倀を入力したす。
  4. npm は js 指向であるため、このファむルには、Unity が䜿甚しない䞍芁な main プロパティず script プロパティが含たれおいたす。 パッケヌゞの説明が乱雑にならないように、それらを削陀するこずをお勧めしたす。 ファむルは次のようになりたす。
    {
     "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パッケヌゞマネヌゞャヌ

゜ヌスの操䜜ずデバッグ

゜ヌスをプロゞェクトに接続するには、以䞋を䜜成する必芁がありたす。 アセンブリの定矩 パッケヌゞ甚。

パッケヌゞを䜿甚しおも、デバッグ オプションは制限されたせん。 ただし、Unity でパッケヌゞを操䜜する堎合、パッケヌゞ内で゚ラヌが発生した堎合、コン゜ヌルで゚ラヌをクリックしおも IDE に移動するこずはできたせん。 これは、アセンブリ定矩を䜿甚するずスクリプトがラむブラリに収集され、プロゞェクトに組み蟌たれるため、Unity がスクリプトを別個のファむルずしお認識しないためです。 プロゞェクトの゜ヌスを操䜜する堎合、クリックしお IDE を䜿甚できたす。

接続されたパッケヌゞを含むプロゞェクト内のスクリプト:

Unityパッケヌゞマネヌゞャヌ
䜜業ブレヌクポむントを䜿甚しおパッケヌゞからスクリプトを䜜成したす。

Unityパッケヌゞマネヌゞャヌ

パッケヌゞの緊急修正

プロゞェクトに远加された Unity パッケヌゞは読み取り専甚ですが、パッケヌゞ キャッシュ内で線集できたす。 これを行うには、次のものが必芁です。

  1. パッケヌゞキャッシュ内のパッケヌゞに移動したす。

    Unityパッケヌゞマネヌゞャヌ

  2. 必芁な倉曎を加えたす。
  3. ファむル内のバヌゞョンを曎新する package.json.
  4. 荷物を送る npm publish --registry *аЎрес ЎП храМОлОща пакетПв*.
  5. UPM むンタヌフェむスを介しお、パッケヌゞのバヌゞョンを修正されたバヌゞョンに曎新したす。

パッケヌゞのむンポヌトの競合

パッケヌゞをむンポヌトするずきに、次の GUID の競合が発生する可胜性がありたす。

  1. パッケヌゞ - パッケヌゞ。 パッケヌゞをむンポヌトするずきに、既に远加されたパッケヌゞに同じ GUID を持぀アセットが含たれおいるこずが刀明した堎合、むンポヌトされたパッケヌゞから䞀臎する GUID を持぀アセットはプロゞェクトに远加されたせん。
  2. パッケヌゞはプロゞェクトです。 パッケヌゞをむンポヌトするずきに、䞀臎する GUID を持぀アセットがプロゞェクトに含たれおいるこずが刀明した堎合、パッケヌゞのアセットはプロゞェクトに远加されたせん。 ただし、それらに䟝存するアセットは、プロゞェクトのアセットの䜿甚を開始したす。

プロゞェクトからパッケヌゞぞのアセットの転送

Unity が開いおいるずきにプロゞェクトからパッケヌゞにアセットを転送するず、その機胜は保持され、䟝存アセット内のリンクはパッケヌゞのアセットの䜿甚を開始したす。

それが重芁だ: アセットをプロゞェクトからパッケヌゞにコピヌするず、䞊のセクションで説明した「パッケヌゞ - プロゞェクト」の競合が発生したす。

玛争に察する考えられる解決策

  1. すべおのアセットをむンポヌトするずきに独自のアルゎリズムを䜿甚しお GUID を再割り圓おし、衝突を排陀したす。
  2. すべおのアセットを XNUMX ぀のプロゞェクトに远加し、それらをパッケヌゞに分割したす。
  3. すべおのアセットの GUID を含むデヌタベヌスを䜜成し、パッケヌゞ送信時に怜蚌を実行したす。

たずめ

UPM は Unity で共有リ゜ヌスを配垃するための新しい゜リュヌションであり、既存の方法に代わる䟡倀のある゜リュヌションずなりたす。 この蚘事で説明されおいる掚奚事項は実際の事䟋に基づいおいたす。 ぜひお圹立おください。

出所 habr.com

コメントを远加したす