Unity Package Manager

Το Unity είναι μια πλατφόρμα που υπάρχει εδώ και αρκετό καιρό και εξελίσσεται συνεχώς. Ωστόσο, όταν εργάζεστε σε αυτό με πολλά έργα ταυτόχρονα, μπορείτε να αντιμετωπίζετε δυσκολίες στη χρήση κοινών πηγών (.cs), βιβλιοθηκών (.dll) και άλλων στοιχείων (εικόνες, ήχους, μοντέλα, προκατασκευασμένα). Σε αυτό το άρθρο θα μιλήσουμε για την εμπειρία μας με μια εγγενή λύση σε ένα τέτοιο πρόβλημα για το Unity.

Unity Package Manager

Μέθοδοι διανομής κοινών πόρων

Υπάρχουν περισσότεροι από ένας τρόποι χρήσης κοινών πόρων για διαφορετικά έργα, αλλά κάθε προσέγγιση έχει τα πλεονεκτήματα και τα μειονεκτήματά της.

1. Διπλασιασμός - αντιγράφουμε πόρους μεταξύ έργων "με το χέρι".

Πλεονεκτήματα:

  • Κατάλληλο για όλους τους τύπους πόρων.
  • Κανένα πρόβλημα εξάρτησης.
  • Δεν υπάρχουν προβλήματα με τα GUID στοιχείων.

Μειονεκτήματα:

  • Γιγαντιαία αποθετήρια.
  • Δεν υπάρχει δυνατότητα έκδοσης.
  • Δυσκολία παρακολούθησης αλλαγών σε κοινόχρηστους πόρους.
  • Δυσκολία ενημέρωσης κοινόχρηστων πόρων.

2. Υπομονάδες Git — διανομή κοινόχρηστων πόρων μέσω εξωτερικών υπομονάδων.

Πλεονεκτήματα:

  • Μπορείτε να εργαστείτε με τις πηγές.
  • Μπορείτε να διανείμετε περιουσιακά στοιχεία.
  • Κανένα πρόβλημα εξάρτησης.

Μειονεκτήματα:

  • Απαιτείται εμπειρία Git.
  • Το Git δεν είναι πολύ φιλικό με δυαδικά αρχεία - θα πρέπει να συνδέσετε το LFS.
  • Έλεγχος πρόσβασης για αποθετήρια.
  • Δυσκολία με την αναβάθμιση και την υποβάθμιση εκδόσεων.
  • Οι συγκρούσεις GUID είναι πιθανές και δεν υπάρχει σαφής συμπεριφορά εκ μέρους του Unity για την επίλυσή τους.

3. NuGet - διανομή κοινόχρηστων βιβλιοθηκών μέσω πακέτων NuGet.

Πλεονεκτήματα:

  • Βολική εργασία με έργα που δεν εξαρτώνται από το Unity.
  • Βολική έκδοση εκδόσεων και ανάλυση εξάρτησης.

Μειονεκτήματα:

  • Το Unity δεν μπορεί να λειτουργήσει με πακέτα NuGet out of the box (στο GitHub μπορείτε να βρείτε το NuGet Package Manager για Unity, το οποίο το διορθώνει, αλλά υπάρχουν κάποιες αποχρώσεις).
  • Δυσκολίες στη διανομή άλλων τύπων περιουσιακών στοιχείων.

4. Unity Package Manager - διανομή κοινόχρηστων πόρων μέσω μιας εγγενούς λύσης για το Unity.

Πλεονεκτήματα:

  • Εγγενής διεπαφή για εργασία με πακέτα.
  • Προστασία από την αντικατάσταση αρχείων .meta σε πακέτα λόγω διενέξεων GUID.
  • Δυνατότητα έκδοσης.
  • Δυνατότητα διανομής όλων των τύπων πόρων για το Unity.

Μειονεκτήματα:

  • Μπορούν ακόμα να προκύψουν διενέξεις GUID.
  • Δεν υπάρχει τεκμηρίωση για υλοποίηση.

Η τελευταία μέθοδος έχει περισσότερα πλεονεκτήματα παρά μειονεκτήματα. Ωστόσο, δεν είναι πολύ δημοφιλές τώρα λόγω έλλειψης τεκμηρίωσης, και ως εκ τούτου θα σταθούμε σε αυτό λεπτομερώς.

Unity Package Manager

Το Unity Package Manager (UPM) είναι ένα εργαλείο διαχείρισης πακέτων. Προστέθηκε στο Unity 2018.1 και χρησιμοποιήθηκε μόνο για πακέτα που αναπτύχθηκαν από την Unity Technologies. Ωστόσο, ξεκινώντας με την έκδοση 2018.3, κατέστη δυνατή η προσθήκη προσαρμοσμένων πακέτων.

Unity Package Manager
Διασύνδεση Unity Package Manager

Τα πακέτα δεν καταλήγουν στις πηγές του έργου (κατάλογος Assets). Βρίσκονται σε ξεχωριστό κατάλογο %projectFolder%/Library/PackageCache και δεν επηρεάζουν με κανέναν τρόπο το έργο, η μόνη αναφορά τους στον πηγαίο κώδικα είναι στο αρχείο packages/manifest.json.

Unity Package Manager
Πακέτα στο σύστημα αρχείων έργου

Πηγές πακέτου

Η UPM μπορεί να χρησιμοποιήσει διάφορες πηγές πακέτων:

1. Σύστημα αρχείων.

Πλεονεκτήματα:

  • Ταχύτητα υλοποίησης.
  • Δεν απαιτεί εργαλεία τρίτων.

Μειονεκτήματα:

  • Δυσκολία στην έκδοση.
  • Απαιτείται κοινόχρηστη πρόσβαση στο σύστημα αρχείων για όλους όσους εργάζονται με το έργο.

2. Αποθετήριο Git.

Πλεονεκτήματα:

  • Το μόνο που χρειάζεστε είναι ένα αποθετήριο Git.

Μειονεκτήματα:

  • Δεν μπορείτε να κάνετε εναλλαγή μεταξύ εκδόσεων μέσω του παραθύρου UPM.
  • Δεν λειτουργεί με όλα τα αποθετήρια Git.

3. αποθετήριο npm.

Πλεονεκτήματα:

  • Υποστηρίζει πλήρως τη λειτουργικότητα UPM και χρησιμοποιείται για τη διανομή επίσημων πακέτων Unity.

Μειονεκτήματα:

  • Αυτήν τη στιγμή αγνοεί όλες τις εκδόσεις συμβολοσειράς των πακέτων εκτός από το "-preview".

Παρακάτω θα δούμε την υλοποίηση UPM + npm. Αυτό το πακέτο είναι βολικό επειδή σας επιτρέπει να εργάζεστε με οποιονδήποτε τύπο πόρων και να διαχειρίζεστε εκδόσεις πακέτων, ενώ υποστηρίζει επίσης πλήρως την εγγενή διεπαφή UPM.

Μπορείτε να το χρησιμοποιήσετε ως αποθετήριο npm Verdaccio. Υπάρχει αναλυτική την τεκμηρίωση, και απαιτούνται μόνο μερικές εντολές για να το εκτελέσετε.

Ρύθμιση περιβάλλοντος

Πρώτα πρέπει να εγκαταστήσετε node.js.

Δημιουργία πακέτου

Για να δημιουργήσετε ένα πακέτο, πρέπει να τοποθετήσετε το αρχείο package.json, που θα το περιγράψει, στον κατάλογο με τα περιεχόμενα αυτού του πακέτου. Πρέπει να κάνετε τα εξής:

Μεταβείτε στον κατάλογο του έργου που θέλουμε να δημιουργήσουμε ένα πακέτο.

Εκτελέστε την εντολή npm init και εισαγάγετε τις απαιτούμενες τιμές κατά τη διάρκεια του διαλόγου. Για όνομα, καθορίστε το όνομα σε μορφή αντίστροφου τομέα, για παράδειγμα com.plarium.somepackage.
Για να εμφανίσετε εύκολα το όνομα του πακέτου, προσθέστε την ιδιότητα displayName στο package.json και συμπληρώστε το.

Δεδομένου ότι το npm είναι προσανατολισμένο στο js, το αρχείο περιέχει τις ιδιότητες main και scripts που δεν χρειαζόμαστε, τις οποίες το Unity δεν χρησιμοποιεί. Είναι καλύτερα να τα αφαιρέσετε για να μην ακατασταθεί η περιγραφή της συσκευασίας. Το αρχείο πρέπει να μοιάζει κάπως έτσι:

  1. Μεταβείτε στον κατάλογο του έργου που θέλουμε να δημιουργήσουμε ένα πακέτο.
  2. Εκτελέστε την εντολή npm init και εισαγάγετε τις απαιτούμενες τιμές κατά τη διάρκεια του διαλόγου. Για όνομα, καθορίστε το όνομα σε μορφή αντίστροφου τομέα, για παράδειγμα com.plarium.somepackage.
  3. Για να εμφανίσετε εύκολα το όνομα του πακέτου, προσθέστε την ιδιότητα displayName στο package.json και συμπληρώστε το.
  4. Δεδομένου ότι το npm είναι προσανατολισμένο στο js, το αρχείο περιέχει τις ιδιότητες main και scripts που δεν χρειαζόμαστε, τις οποίες το Unity δεν χρησιμοποιεί. Είναι καλύτερα να τα αφαιρέσετε για να μην ακατασταθεί η περιγραφή της συσκευασίας. Το αρχείο πρέπει να μοιάζει κάπως έτσι:
    {
     "name": "com.plarium.somepackage",
     "displayName": "Some Package",
     "version": "1.0.0",
     "description": "Some Package Description",
     "keywords": [
       "Unity",
       "UPM"
     ],
     "author": "AUTHOR",
     "license": "UNLICENSED"
    }

  5. Ανοίξτε το Unity και δημιουργήστε ένα αρχείο .meta για το package.json (Το Unity δεν βλέπει στοιχεία χωρίς αρχεία .meta, τα πακέτα για το Unity ανοίγουν μόνο για ανάγνωση).

Αποστολή πακέτου

Για να στείλετε το πακέτο πρέπει να εκτελέσετε την εντολή: npm publish --registry *адрес до хранилища пакетов*.

Εγκατάσταση και ενημέρωση πακέτων μέσω του Unity Package Manager

Για να προσθέσετε ένα πακέτο σε ένα έργο Unity, χρειάζεστε:

  1. Προσθήκη στο αρχείο manifest.json πληροφορίες σχετικά με την πηγή των πακέτων. Για να γίνει αυτό πρέπει να προσθέσετε την ιδιοκτησία scopedRegistries και υποδεικνύουν τα πεδία και τη διεύθυνση πηγής όπου θα αναζητηθούν συγκεκριμένα πεδία.
    
    "scopedRegistries": [
       {
         "name": "Main",
         "url": "адрес до хранилища пакетов",
         "scopes": [
           "com.plarium"
         ]
       }
     ]
    
  2. Μεταβείτε στο Unity και ανοίξτε το παράθυρο Package Manager (η εργασία με προσαρμοσμένα πακέτα δεν διαφέρει από την εργασία με ενσωματωμένα).
  3. Επιλέξτε Όλα τα πακέτα.
  4. Βρείτε το πακέτο που χρειάζεστε και προσθέστε το.

Unity Package Manager

Εργασία με πηγές και εντοπισμός σφαλμάτων

Για να συνδεθούν οι πηγές με το έργο, πρέπει να δημιουργήσετε Ορισμός συναρμολόγησης για το πακέτο.

Η χρήση πακέτων δεν περιορίζει τις επιλογές εντοπισμού σφαλμάτων. Ωστόσο, όταν εργάζεστε με πακέτα στο Unity, δεν μπορείτε να μεταβείτε στο IDE κάνοντας κλικ σε ένα σφάλμα στην κονσόλα, εάν το σφάλμα παρουσιάστηκε στο πακέτο. Αυτό οφείλεται στο γεγονός ότι το Unity δεν βλέπει τα σενάρια ως ξεχωριστά αρχεία, καθώς όταν χρησιμοποιείται ο ορισμός Assembly συλλέγονται σε μια βιβλιοθήκη και περιλαμβάνονται στο έργο. Όταν εργάζεστε με πηγές από ένα έργο, μπορείτε να κάνετε κλικ στο IDE.

Σενάριο σε ένα έργο με συνδεδεμένο πακέτο:

Unity Package Manager
Σενάριο από το πακέτο με σημείο διακοπής λειτουργίας:

Unity Package Manager

Επείγουσες επιδιορθώσεις σε πακέτα

Τα πακέτα Unity που προστίθενται σε ένα έργο είναι μόνο για ανάγνωση, αλλά μπορούν να επεξεργαστούν στην προσωρινή μνήμη πακέτων. Για να το κάνετε αυτό χρειάζεστε:

  1. Μεταβείτε στο πακέτο στην προσωρινή μνήμη πακέτου.

    Unity Package Manager

  2. Κάντε τις απαραίτητες αλλαγές.
  3. Ενημερώστε την έκδοση στο αρχείο package.json.
  4. Αποστολή πακέτου npm publish --registry *адрес до хранилища пакетов*.
  5. Ενημερώστε την έκδοση του πακέτου στη διορθωμένη μέσω της διεπαφής UPM.

Διένεξες εισαγωγής πακέτων

Οι ακόλουθες διενέξεις GUID ενδέχεται να προκύψουν κατά την εισαγωγή πακέτων:

  1. Πακέτο - πακέτο. Εάν, κατά την εισαγωγή ενός πακέτου, ανακαλυφθεί ότι τα ήδη προστιθέμενα πακέτα περιέχουν στοιχεία με το ίδιο GUID, τα στοιχεία με τα αντίστοιχα GUID από το εισαγόμενο πακέτο δεν θα προστεθούν στο έργο.
  2. Ένα πακέτο είναι ένα έργο. Εάν, κατά την εισαγωγή ενός πακέτου, ανακαλυφθεί ότι το έργο περιέχει στοιχεία με αντίστοιχα GUID, τότε τα στοιχεία από το πακέτο δεν θα προστεθούν στο έργο. Ωστόσο, τα περιουσιακά στοιχεία που εξαρτώνται από αυτά θα αρχίσουν να χρησιμοποιούν περιουσιακά στοιχεία από το έργο.

Μεταφορά περιουσιακών στοιχείων από ένα έργο σε ένα πακέτο

Εάν μεταφέρετε ένα στοιχείο από ένα έργο σε ένα πακέτο ενώ το Unity είναι ανοιχτό, η λειτουργικότητά του θα διατηρηθεί και οι σύνδεσμοι σε εξαρτημένα στοιχεία θα αρχίσουν να χρησιμοποιούν το στοιχείο από το πακέτο.

Είναι σημαντικό: Κατά την αντιγραφή ενός στοιχείου από ένα έργο σε ένα πακέτο, θα προκύψει η διένεξη "Πακέτο - Έργο" που περιγράφεται στην παραπάνω ενότητα.

Πιθανές λύσεις σε συγκρούσεις

  1. Επανεκχώρηση GUID χρησιμοποιώντας τους δικούς μας αλγόριθμους κατά την εισαγωγή όλων των στοιχείων για την εξάλειψη των συγκρούσεων.
  2. Προσθέτοντας όλα τα στοιχεία ενεργητικού σε ένα έργο και στη συνέχεια χωρίζοντάς τα σε πακέτα.
  3. Δημιουργία βάσης δεδομένων που περιέχει τα GUID όλων των στοιχείων και διεξαγωγή επικύρωσης κατά την αποστολή πακέτων.

Συμπέρασμα

Το UPM είναι μια νέα λύση για τη διανομή κοινόχρηστων πόρων στο Unity, η οποία μπορεί να είναι μια αξιόλογη εναλλακτική λύση στις υπάρχουσες μεθόδους. Οι συστάσεις που περιγράφονται στο άρθρο βασίστηκαν σε πραγματικές περιπτώσεις. Ελπίζουμε να σας φανούν χρήσιμα.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο