الوحدة هي عبارة عن منصة موجودة منذ فترة طويلة وتتطور باستمرار. ومع ذلك ، من خلال العمل مع العديد من المشاريع في نفس الوقت ، لا يزال بإمكانك مواجهة صعوبات في استخدام المصادر العامة (.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
، الذي سيصفه ، في الدليل مع محتويات هذه الحزمة. تحتاج إلى القيام بما يلي:
- انتقل إلى دليل المشروع الذي نريد تقديم حزمة.
- قم بتشغيل الأمر
npm init
وأدخل القيم المطلوبة أثناء مربع الحوار. للاسم ، حدد الاسم بتنسيق المجال العكسي ، على سبيل المثال com.plarium.somepackage
. - لعرض اسم الحزمة بشكل ملائم ، أضف خاصية اسم العرض إلى
package.json
وقم بملئه. - نظرًا لأن 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" }
- افتح Unity وقم بإنشاء ملف .meta لـ package.json (لا ترى Unity الأصول بدون ملفات .meta ، وحزم Unity مفتوحة للقراءة فقط).
إرسال الحزمة
لإرسال حزمة ، تحتاج إلى تشغيل الأمر:
npm publish --registry * *
.
تثبيت وتحديث الحزم من خلال Unity Package Manager
لإضافة حزمة إلى مشروع الوحدة ، تحتاج إلى:
- إضافة معلومات مصدر الحزمة إلى ملف
manifest.json
. للقيام بذلك ، قم بإضافة خاصية scopedRegistries
وحدد النطاقات وعنوان المصدر حيث سيتم البحث عن نطاقات محددة.
"scopedRegistries": [ { "name": "Main", "url": " ", "scopes": [ "com.plarium" ] } ]
- انتقل إلى الوحدة وافتح نافذة Package Manager (العمل مع الحزم المخصصة لا يختلف عن العمل مع الحزم المدمجة).
- حدد كل الحزم.
- ابحث عن الحزمة التي تحتاجها وأضفها.
العمل مع المصادر وتصحيح الأخطاء
لكي تتمكن المصادر من الاتصال بالمشروع ، يجب عليك إنشاء
تعريف تجميع للحزمة.
استخدام الحزم لا يحد من قدرات التصحيح. ومع ذلك ، عند العمل مع الحزم في Unity ، لا يمكنك الذهاب إلى IDE بالنقر فوق خطأ في وحدة التحكم إذا حدث الخطأ في الحزمة. هذا يرجع إلى حقيقة أن Unity لا ترى البرامج النصية كملفات منفصلة ، لأنه عند استخدام Assembly Assembly يتم جمعها في مكتبة ومتصلة بالمشروع. عند العمل مع أكواد المصدر من المشروع ، يتوفر التبديل إلى IDE بالنقر.
البرنامج النصي في المشروع مع الحزمة متصلة:
البرنامج النصي من الحزمة مع نقطة توقف العمل:
إصلاحات عاجلة التصحيح
حزم الوحدة المضافة إلى المشروع للقراءة فقط ، ولكن يمكن تحريرها في ذاكرة التخزين المؤقت للحزمة. للقيام بذلك ، يجب عليك:
- انتقل إلى الحزمة في ذاكرة التخزين المؤقت الحزمة.
- قم بإجراء التغييرات اللازمة.
- تحديث الإصدار في ملف
package.json
. - إرسال حزمة
npm publish --registry * *
. - قم بتحديث إصدار الحزمة إلى الإصدار المصحح من خلال واجهة UPM.
حزمة استيراد الصراعات
عند استيراد الحزم ، يمكن أن تحدث تعارضات GUID التالية:
- حزمة - الحزمة. إذا تبين ، عند استيراد حزمة ، أن الحزم المضافة بالفعل تحتوي على أصول لها نفس المعرِّف الفريد العمومي ، فلن تتم إضافة الأصول ذات المطابقة الفريدة العمومية للحزمة المستوردة إلى المشروع.
- حزمة هو مشروع. إذا ، عند استيراد حزمة ، يبدو أن المشروع يحتوي على أصول لها مطابقات GUID ، فلن تتم إضافة الأصول من الحزمة إلى المشروع. ومع ذلك ، فإن الأصول التي تعتمد عليها ستبدأ في استخدام الأصول من المشروع.
نقل الأصول من مشروع إلى حزمة
إذا قمت بنقل الأصول من مشروع إلى حزمة مع Unity مفتوحة ، فسيتم الحفاظ على وظائفه ، وستبدأ الروابط في الأصول التابعة في استخدام الأصول من الحزمة.
هام : عندما تقوم بنسخ مادة عرض من مشروع إلى حزمة ، فسيحدث التعارض "حزمة - مشروع" ، كما هو موضح في القسم أعلاه.
حلول الصراع المحتملة
- إعادة تعيين GUIDs وفقًا للخوارزميات الخاصة بهم عند استيراد جميع الأصول لتجنب الاصطدامات.
- إضافة جميع الأصول إلى مشروع واحد مع تقسيم لاحق في حزم.
- إنشاء قاعدة بيانات تحتوي على GUIDs لجميع الأصول ، والتحقق من الصحة عند إرسال الحزم.
استنتاج
UPM هو حل جديد لتوزيع الموارد المشتركة على الوحدة ، والتي يمكن أن تكون بديلاً مناسبًا للطرق الحالية. التوصيات الواردة في المقالة نشأت على أساس حالات حقيقية. نأمل أن تجدها مفيدة.