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

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


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


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

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

الايجابيات:

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

سلبيات:

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

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

الايجابيات:

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

سلبيات:

  • Git المهارات اللازمة.
  • بوابة ليست ودية للغاية مع الملفات الثنائية - لديك للاتصال LFS.
  • التحكم في الوصول للمستودعات.
  • صعوبات في الترقية وخفض المستوى.
  • تصادمات GUID ممكنة ولا يوجد أي سلوك لا لبس فيه من جانب Unity لحلها.

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

الايجابيات:

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

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

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

الايجابيات:

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

سلبيات:

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

الأسلوب الأخير له مزايا أكثر من عيوب. ومع ذلك ، فهي ليست شائعة للغاية في الوقت الحالي بسبب عدم وجود وثائق ، وبالتالي سنبحث فيها بالتفصيل.

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


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


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

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


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

مصادر الحزمة


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

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

الايجابيات:

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

سلبيات:

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

2. بوابة مستودع.

الايجابيات:

  • هناك حاجة إلى مستودع بوابة فقط.

سلبيات:

  • لا يمكنك التبديل بين الإصدارات من خلال نافذة UPM.
  • لا يعمل مع جميع مستودعات Git.

3. npm مستودع.

الايجابيات:

  • يدعم بالكامل وظيفة UPM ويستخدم لتوزيع حزم Unity الرسمية.

سلبيات:

  • حاليًا ، يتجاهل جميع إصدارات سلسلة الحزم باستثناء "معاينة".

أدناه ننظر في تنفيذ UPM + npm. هذه الحزمة مريحة لأنها تسمح لك بالعمل مع أي نوع من الموارد وإدارة إصدارات الحزمة ، وكذلك تدعم بالكامل واجهة UPM الأصلية.

يمكنك استخدام Verdaccio كمستودع npm. هناك وثائق مفصلة لذلك ، وسوف يستغرق الأمر بضعة أوامر فقط لبدء تشغيله.

بيئة الإعداد


تحتاج أولاً إلى تثبيت node.js.

إنشاء حزمة


لإنشاء حزمة ، يجب وضع ملف package.json ، الذي سيصفه ، في الدليل مع محتويات هذه الحزمة. تحتاج إلى القيام بما يلي:

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


لإضافة حزمة إلى مشروع الوحدة ، تحتاج إلى:

  1. إضافة معلومات مصدر الحزمة إلى ملف manifest.json . للقيام بذلك ، قم بإضافة خاصية scopedRegistries وحدد النطاقات وعنوان المصدر حيث سيتم البحث عن نطاقات محددة.

     "scopedRegistries": [ { "name": "Main", "url": "   ", "scopes": [ "com.plarium" ] } ] 
  2. انتقل إلى الوحدة وافتح نافذة Package Manager (العمل مع الحزم المخصصة لا يختلف عن العمل مع الحزم المدمجة).
  3. حدد كل الحزم.
  4. ابحث عن الحزمة التي تحتاجها وأضفها.


العمل مع المصادر وتصحيح الأخطاء


لكي تتمكن المصادر من الاتصال بالمشروع ، يجب عليك إنشاء تعريف تجميع للحزمة.

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

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


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


إصلاحات عاجلة التصحيح


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

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


  2. قم بإجراء التغييرات اللازمة.
  3. تحديث الإصدار في ملف package.json .
  4. إرسال حزمة npm publish --registry * * .
  5. قم بتحديث إصدار الحزمة إلى الإصدار المصحح من خلال واجهة UPM.

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


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

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

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


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

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

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


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

استنتاج


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

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


All Articles