مدير حزمة الوحدة

Unity عبارة عن منصة موجودة منذ بعض الوقت وتتطور باستمرار. ومع ذلك، عند العمل فيه مع عدة مشاريع في نفس الوقت، لا يزال بإمكانك مواجهة صعوبات في استخدام المصادر المشتركة (.cs)، والمكتبات (.dll) والأصول الأخرى (الصور والأصوات والنماذج والمباني الجاهزة). سنتحدث في هذه المقالة عن تجربتنا مع الحل الأصلي لمثل هذه المشكلة في Unity.

مدير حزمة الوحدة

طرق توزيع الموارد المشتركة

هناك أكثر من طريقة لاستخدام الموارد المشتركة لمشاريع مختلفة، ولكن كل نهج له إيجابياته وسلبياته.

1. الازدواجية - نقوم بتكرار الموارد بين المشاريع "يدويًا".

الايجابيات:

  • مناسبة لجميع أنواع الموارد.
  • لا توجد مشاكل التبعية.
  • لا توجد أية مشاكل مع GUIDs الأصول.

سلبيات:

  • المستودعات العملاقة.
  • ليس هناك إمكانية للإصدار.
  • صعوبة تتبع التغييرات على الموارد المشتركة.
  • صعوبة تحديث الموارد المشتركة.

2. وحدات جيت الفرعية — توزيع الموارد المشتركة من خلال وحدات فرعية خارجية.

الايجابيات:

  • يمكنك العمل مع المصادر.
  • يمكنك توزيع الأصول.
  • لا توجد مشاكل التبعية.

سلبيات:

  • مطلوب خبرة جيت.
  • Git ليس صديقًا جدًا للملفات الثنائية - سيتعين عليك توصيل LFS.
  • التحكم في الوصول للمستودعات.
  • صعوبة في ترقية وتخفيض الإصدارات.
  • من الممكن حدوث تصادمات للمعرفات الفريدة العمومية (GUID) ولا يوجد سلوك واضح من جانب Unity لحلها.

3. NuGet - توزيع المكتبات المشتركة من خلال حزم NuGet.

الايجابيات:

  • عمل مريح مع المشاريع التي لا تعتمد على الوحدة.
  • إصدار مناسب وحل التبعية.

سلبيات:

  • لا يمكن أن تعمل Unity مع حزم NuGet خارج الصندوق (على GitHub، يمكنك العثور على NuGet Package Manager for Unity، الذي يعمل على إصلاح هذه المشكلة، ولكن هناك بعض الفروق الدقيقة).
  • صعوبات في توزيع أنواع أخرى من الأصول.

4. Unity Package Manager - توزيع الموارد المشتركة من خلال حل أصلي لـ Unity.

الايجابيات:

  • الواجهة الأصلية للعمل مع الحزم.
  • الحماية من الكتابة فوق ملفات .meta في الحزم بسبب تعارضات GUID.
  • إمكانية الإصدار.
  • القدرة على توزيع جميع أنواع الموارد للوحدة.

سلبيات:

  • لا يزال من الممكن حدوث تعارضات GUID.
  • لا توجد وثائق للتنفيذ.

الطريقة الأخيرة لها مزايا أكثر من العيوب. ومع ذلك، فهي لا تحظى بشعبية كبيرة الآن بسبب نقص الوثائق، وبالتالي سنتناولها بالتفصيل.

مدير حزمة الوحدة

Unity Package Manager (UPM) هي أداة لإدارة الحزم. تمت إضافته في Unity 2018.1 وتم استخدامه فقط للحزم التي تم تطويرها بواسطة Unity Technologies. ومع ذلك، بدءًا من الإصدار 2018.3، أصبح من الممكن إضافة حزم مخصصة.

مدير حزمة الوحدة
واجهة إدارة الحزم الوحدة

لا تنتهي الحزم في مصادر المشروع (دليل الأصول). وهم في دليل منفصل %projectFolder%/Library/PackageCache ولا تؤثر على المشروع بأي شكل من الأشكال، فذكرها الوحيد في الكود المصدري موجود في الملف packages/manifest.json.

مدير حزمة الوحدة
الحزم في نظام ملفات المشروع

مصادر الحزمة

يمكن لـ UPM استخدام عدة مصادر للحزم:

1. نظام الملفات.

الايجابيات:

  • سرعة التنفيذ .
  • لا يتطلب أدوات طرف ثالث.

سلبيات:

  • صعوبة في الإصدار.
  • الوصول المشترك إلى نظام الملفات مطلوب لكل من يعمل في المشروع.

2. مستودع جيت.

الايجابيات:

  • كل ما تحتاجه هو مستودع 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. من الأفضل إزالتها حتى لا يحدث فوضى في وصف الحزمة. يجب أن يبدو الملف كالتالي:

  1. انتقل إلى دليل المشروع الذي نريد إنشاء حزمة فيه.
  2. قم بتشغيل الأمر npm init وأدخل القيم المطلوبة أثناء مربع الحوار. بالنسبة للاسم، حدد الاسم بتنسيق المجال العكسي، على سبيل المثال com.plarium.somepackage.
  3. لعرض اسم الحزمة بشكل ملائم، أضف خاصية DisplayName إلى package.json واملأها.
  4. نظرًا لأن npm موجه نحو js، فإن الملف يحتوي على الخصائص الرئيسية والبرامج النصية التي لا نحتاجها، والتي لا تستخدمها 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، لا يمكنك الانتقال إلى IDE بالنقر فوق خطأ في وحدة التحكم إذا حدث الخطأ في الحزمة. ويرجع ذلك إلى حقيقة أن Unity لا ترى البرامج النصية كملفات منفصلة، ​​لأنه عند استخدام تعريف التجميع، يتم جمعها في مكتبة وإدراجها في المشروع. عند العمل مع مصادر من مشروع ما، يتوفر النقر فوق IDE.

البرنامج النصي في مشروع مع حزمة متصلة:

مدير حزمة الوحدة
البرنامج النصي من الحزمة مع نقطة توقف العمل:

مدير حزمة الوحدة

إصلاحات عاجلة للحزم

حزم الوحدة المضافة إلى المشروع هي للقراءة فقط، ولكن يمكن تحريرها في ذاكرة التخزين المؤقت للحزمة. للقيام بذلك تحتاج:

  1. انتقل إلى الحزمة في ذاكرة التخزين المؤقت للحزمة.

    مدير حزمة الوحدة

  2. قم بإجراء التغييرات اللازمة.
  3. تحديث النسخة في الملف package.json.
  4. إرسال الحزمة npm publish --registry *адрес до хранилища пакетов*.
  5. قم بتحديث إصدار الحزمة إلى الإصدار المصحح عبر واجهة UPM.

تعارضات استيراد الحزمة

قد تحدث تعارضات GUID التالية عند استيراد الحزم:

  1. حزمة - حزمة. إذا تم اكتشاف، عند استيراد حزمة، أن الحزم المضافة بالفعل تحتوي على أصول بنفس المعرف الفريد العمومي (GUID)، فلن تتم إضافة الأصول ذات المعرفات الفريدة العمومية المطابقة من الحزمة المستوردة إلى المشروع.
  2. الحزمة هي مشروع. إذا تم اكتشاف، عند استيراد حزمة، أن المشروع يحتوي على أصول بمعرفات GUID متطابقة، فلن تتم إضافة الأصول من الحزمة إلى المشروع. ومع ذلك، فإن الأصول التي تعتمد عليها ستبدأ في استخدام الأصول من المشروع.

نقل الأصول من المشروع إلى الحزمة

إذا قمت بنقل أصل من مشروع إلى حزمة أثناء فتح Unity، فسيتم الحفاظ على وظائفه، وستبدأ الروابط الموجودة في الأصول التابعة في استخدام الأصل من الحزمة.

من المهم: عند نسخ أصل من مشروع إلى حزمة، سيحدث تعارض "الحزمة - المشروع" الموضح في القسم أعلاه.

الحلول الممكنة للصراعات

  1. إعادة تعيين المعرفات الفريدة العمومية (GUIDs) باستخدام الخوارزميات الخاصة بنا عند استيراد كافة الأصول لإزالة التصادمات.
  2. إضافة جميع الأصول إلى مشروع واحد ومن ثم تقسيمها إلى حزم.
  3. إنشاء قاعدة بيانات تحتوي على المعرفات الفريدة العمومية (GUIDs) لجميع الأصول وإجراء التحقق من الصحة عند إرسال الحزم.

اختتام

UPM هو حل جديد لتوزيع الموارد المشتركة في Unity، والذي يمكن أن يكون بديلاً جيدًا للطرق الحالية. استندت التوصيات الموضحة في المقالة إلى حالات حقيقية. نتمنى ان تجدهم متعاونين.

المصدر: www.habr.com

إضافة تعليق