Tagapamahala ng Unity Package

Ang pagkakaisa ay isang plataporma na medyo matagal na at patuloy na umuunlad. Gayunpaman, kapag nagtatrabaho dito kasama ang ilang proyekto nang sabay-sabay, maaari ka pa ring makaranas ng mga kahirapan sa paggamit ng mga karaniwang source (.cs), library (.dll) at iba pang asset (mga larawan, tunog, modelo, prefab). Sa artikulong ito ay pag-uusapan natin ang ating karanasan sa katutubong solusyon sa naturang problema para sa Unity.

Tagapamahala ng Unity Package

Mga Pamamaraan sa Pamamahagi ng Pinagsasaluhang Resource

Mayroong higit sa isang paraan upang magamit ang mga nakabahaging mapagkukunan para sa iba't ibang mga proyekto, ngunit ang bawat diskarte ay may mga kalamangan at kahinaan nito.

1. Pagdoble - duplicate namin ang mga mapagkukunan sa pagitan ng mga proyekto "sa pamamagitan ng kamay."

Pros:

  • Angkop para sa lahat ng uri ng mapagkukunan.
  • Walang mga problema sa dependency.
  • Walang mga problema sa mga asset GUID.

Cons:

  • Mga higanteng repositoryo.
  • Walang posibilidad ng bersyon.
  • Nahihirapang subaybayan ang mga pagbabago sa mga nakabahaging mapagkukunan.
  • Kahirapan sa pag-update ng mga nakabahaging mapagkukunan.

2. Mga submodules ng Git — pamamahagi ng mga ibinahaging mapagkukunan sa pamamagitan ng mga panlabas na submodules.

Pros:

  • Maaari kang magtrabaho kasama ang mga mapagkukunan.
  • Maaari mong ipamahagi ang mga asset.
  • Walang mga problema sa dependency.

Cons:

  • Kinakailangan ang karanasan sa Git.
  • Ang Git ay hindi masyadong palakaibigan sa mga binary file - kakailanganin mong ikonekta ang LFS.
  • Access control para sa mga repositoryo.
  • Kahirapan sa pag-upgrade at pag-downgrade ng mga bersyon.
  • Posible ang mga banggaan ng GUID at walang malinaw na pag-uugali sa bahagi ng Unity upang malutas ang mga ito.

3. NuGet - pamamahagi ng mga shared library sa pamamagitan ng NuGet packages.

Pros:

  • Maginhawang trabaho sa mga proyektong hindi nakadepende sa Unity.
  • Maginhawang bersyon at paglutas ng dependency.

Cons:

  • Ang Unity ay hindi maaaring gumana sa mga pakete ng NuGet sa labas ng kahon (sa GitHub maaari mong mahanap ang NuGet Package Manager para sa Unity, na nag-aayos nito, ngunit may ilang mga nuances).
  • Mga kahirapan sa pamamahagi ng iba pang uri ng mga ari-arian.

4. Unity Package Manager - pamamahagi ng mga ibinahaging mapagkukunan sa pamamagitan ng katutubong solusyon para sa Unity.

Pros:

  • Native interface para sa pagtatrabaho sa mga package.
  • Proteksyon laban sa pag-overwrit ng mga .meta file sa mga package dahil sa mga salungatan sa GUID.
  • Posibilidad ng bersyon.
  • Kakayahang ipamahagi ang lahat ng uri ng mapagkukunan para sa Unity.

Cons:

  • Maaari pa ring mangyari ang mga salungatan sa GUID.
  • Walang dokumentasyon para sa pagpapatupad.

Ang huling pamamaraan ay may higit na mga pakinabang kaysa sa mga disadvantages. Gayunpaman, hindi ito masyadong sikat ngayon dahil sa kakulangan ng dokumentasyon, at samakatuwid ay tatalakayin natin ito nang detalyado.

Tagapamahala ng Unity Package

Ang Unity Package Manager (UPM) ay isang tool sa pamamahala ng package. Ito ay idinagdag sa Unity 2018.1 at ginamit lamang para sa mga pakete na binuo ng Unity Technologies. Gayunpaman, simula sa bersyon 2018.3, naging posible na magdagdag ng mga custom na pakete.

Tagapamahala ng Unity Package
Interface ng Unity Package Manager

Ang mga pakete ay hindi napupunta sa mga pinagmumulan ng proyekto (direktoryo ng mga asset). Sila ay nasa isang hiwalay na direktoryo %projectFolder%/Library/PackageCache at hindi makakaapekto sa proyekto sa anumang paraan, ang tanging pagbanggit nila sa source code ay nasa file packages/manifest.json.

Tagapamahala ng Unity Package
Mga package sa project file system

Mga mapagkukunan ng package

Maaaring gumamit ang UPM ng ilang source ng package:

1. File system.

Pros:

  • Bilis ng pagpapatupad.
  • Hindi nangangailangan ng mga tool ng third party.

Cons:

  • Hirap sa versioning.
  • Ang nakabahaging pag-access sa file system ay kinakailangan para sa lahat ng nagtatrabaho sa proyekto.

2. Git repository.

Pros:

  • Ang kailangan mo lang ay isang Git repository.

Cons:

  • Hindi ka maaaring lumipat sa pagitan ng mga bersyon sa pamamagitan ng UPM window.
  • Hindi gumagana sa lahat ng Git repository.

3. npm repository.

Pros:

  • Ganap na sumusuporta sa pag-andar ng UPM at ginagamit upang ipamahagi ang mga opisyal na pakete ng Unity.

Cons:

  • Kasalukuyang binabalewala ang lahat ng string na bersyon ng mga pakete maliban sa "-preview".

Sa ibaba ay titingnan natin ang pagpapatupad ng UPM + npm. Ang bundle na ito ay maginhawa dahil binibigyang-daan ka nitong magtrabaho kasama ang anumang uri ng mapagkukunan at pamahalaan ang mga bersyon ng package, at ganap ding sinusuportahan ang native na interface ng UPM.

Maaari mo itong gamitin bilang isang npm repository Verdaccio. May isang detalyado ang babasahin, at ilang utos lang ang kailangan para patakbuhin ito.

Pag-setup ng kapaligiran

Una kailangan mong i-install node.js.

Paglikha ng isang pakete

Upang lumikha ng isang pakete, kailangan mong ilagay ang file package.json, na maglalarawan nito, sa direktoryo na may mga nilalaman ng paketeng ito. Kailangan mong gawin ang sumusunod:

Pumunta sa direktoryo ng proyekto na gusto naming gumawa ng isang pakete.

Patakbuhin ang npm init command at ipasok ang mga kinakailangang halaga sa panahon ng dialog. Para sa pangalan, tukuyin ang pangalan sa reverse domain format, halimbawa com.plarium.somepackage.
Upang maginhawang ipakita ang pangalan ng package, idagdag ang displayName property sa package.json at punan ito.

Dahil ang npm ay js-oriented, ang file ay naglalaman ng mga pangunahing katangian at mga script na hindi namin kailangan, na hindi ginagamit ng Unity. Mas mainam na alisin ang mga ito upang hindi makalat ang paglalarawan ng pakete. Ang file ay dapat magmukhang ganito:

  1. Pumunta sa direktoryo ng proyekto na gusto naming gumawa ng isang pakete.
  2. Patakbuhin ang npm init command at ipasok ang mga kinakailangang halaga sa panahon ng dialog. Para sa pangalan, tukuyin ang pangalan sa reverse domain format, halimbawa com.plarium.somepackage.
  3. Upang maginhawang ipakita ang pangalan ng package, idagdag ang displayName property sa package.json at punan ito.
  4. Dahil ang npm ay js-oriented, ang file ay naglalaman ng mga pangunahing katangian at mga script na hindi namin kailangan, na hindi ginagamit ng Unity. Mas mainam na alisin ang mga ito upang hindi makalat ang paglalarawan ng pakete. Ang file ay dapat magmukhang ganito:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Buksan ang Unity at bumuo ng .meta file para sa package.json (Hindi nakikita ng Unity ang mga asset na walang .meta file, ang mga package para sa Unity ay nagbubukas ng read-only).

Nagpapadala ng package

Upang ipadala ang package kailangan mong patakbuhin ang command: npm publish --registry *адрес до хранилища пакетов*.

Pag-install at pag-update ng mga package sa pamamagitan ng Unity Package Manager

Para magdagdag ng package sa isang proyekto ng Unity, kailangan mo:

  1. Idagdag sa file manifest.json impormasyon tungkol sa pinagmulan ng mga pakete. Upang gawin ito kailangan mong idagdag ang ari-arian scopedRegistries at ipahiwatig ang mga saklaw at ang pinagmulang address kung saan hahanapin ang mga partikular na saklaw.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Pumunta sa Unity at buksan ang window ng Package Manager (ang pagtatrabaho sa mga custom na pakete ay hindi naiiba sa pagtatrabaho sa mga built-in).
  3. Piliin ang Lahat ng Package.
  4. Hanapin ang package na kailangan mo at idagdag ito.

Tagapamahala ng Unity Package

Paggawa gamit ang mga mapagkukunan at pag-debug

Upang ang mga mapagkukunan ay konektado sa proyekto, kailangan mong lumikha Kahulugan ng Assembly para sa pakete.

Ang paggamit ng mga pakete ay hindi nililimitahan ang iyong mga opsyon sa pag-debug. Gayunpaman, kapag nagtatrabaho sa mga pakete sa Unity, hindi ka maaaring pumunta sa IDE sa pamamagitan ng pag-click sa isang error sa console kung naganap ang error sa package. Ito ay dahil sa ang katunayan na ang Unity ay hindi nakikita ang mga script bilang hiwalay na mga file, dahil kapag ginagamit ang Assembly Definition ay kinokolekta ang mga ito sa isang library at kasama sa proyekto. Kapag nagtatrabaho sa mga mapagkukunan mula sa isang proyekto, ang pag-click sa IDE ay magagamit.

Script sa isang proyekto na may nakakonektang package:

Tagapamahala ng Unity Package
Script mula sa package na may gumaganang breakpoint:

Tagapamahala ng Unity Package

Mga agarang pag-aayos sa mga pakete

Ang mga unity package na idinagdag sa isang proyekto ay read-only, ngunit maaaring i-edit sa cache ng package. Upang gawin ito kailangan mo:

  1. Pumunta sa package sa cache ng package.

    Tagapamahala ng Unity Package

  2. Gawin ang mga kinakailangang pagbabago.
  3. I-update ang bersyon sa file package.json.
  4. Magpadala ng package npm publish --registry *адрес до хранилища пакетов*.
  5. I-update ang bersyon ng package sa naitama sa pamamagitan ng interface ng UPM.

Mga salungatan sa pag-import ng package

Ang mga sumusunod na salungatan sa GUID ay maaaring mangyari kapag nag-i-import ng mga pakete:

  1. Pakete - pakete. Kung, kapag nag-import ng isang package, natuklasan na ang mga naidagdag na package ay naglalaman ng mga asset na may parehong GUID, ang mga asset na may tumutugmang GUID mula sa na-import na package ay hindi idaragdag sa proyekto.
  2. Ang isang pakete ay isang proyekto. Kung, kapag nag-import ng isang package, natuklasan na ang proyekto ay naglalaman ng mga asset na may katugmang mga GUID, kung gayon ang mga asset mula sa package ay hindi idaragdag sa proyekto. Gayunpaman, ang mga asset na umaasa sa kanila ay magsisimulang gumamit ng mga asset mula sa proyekto.

Paglilipat ng mga asset mula sa isang proyekto patungo sa isang pakete

Kung ililipat mo ang isang asset mula sa isang proyekto patungo sa isang package habang bukas ang Unity, mapapanatili ang functionality nito, at magsisimulang gamitin ang asset mula sa package ang mga link sa mga umaasang asset.

Mahalagang: Kapag kinokopya ang isang asset mula sa isang proyekto patungo sa isang pakete, ang "Package - Project" na salungatan na inilarawan sa seksyon sa itaas ay magaganap.

Mga posibleng solusyon sa mga salungatan

  1. Muling pagtatalaga ng mga GUID gamit ang sarili nating mga algorithm kapag ini-import ang lahat ng asset para maalis ang mga banggaan.
  2. Pagdaragdag ng lahat ng asset sa isang proyekto at pagkatapos ay hatiin ang mga ito sa mga pakete.
  3. Paglikha ng isang database na naglalaman ng mga GUID ng lahat ng mga asset at pagsasagawa ng pagpapatunay kapag nagpapadala ng mga pakete.

Konklusyon

Ang UPM ay isang bagong solusyon para sa pamamahagi ng mga nakabahaging mapagkukunan sa Unity, na maaaring maging isang karapat-dapat na alternatibo sa mga kasalukuyang pamamaraan. Ang mga rekomendasyong inilarawan sa artikulo ay batay sa mga totoong kaso. Umaasa kami na mahanap mo silang kapaki-pakinabang.

Pinagmulan: www.habr.com

Magdagdag ng komento