Unity Package Manager

یونیتی پلتفرمی است که مدت زیادی است که وجود داشته و دائما در حال تکامل است. با این حال، هنگام کار در آن با چندین پروژه به طور همزمان، همچنان می توانید در استفاده از منابع رایج (.cs)، کتابخانه ها (dll.) و سایر دارایی ها (تصاویر، صداها، مدل ها، پیش ساخته ها) با مشکلاتی مواجه شوید. در این مقاله ما در مورد تجربه خود با یک راه حل بومی برای چنین مشکلی برای Unity صحبت خواهیم کرد.

Unity Package Manager

روش های توزیع منابع مشترک

بیش از یک راه برای استفاده از منابع مشترک برای پروژه های مختلف وجود دارد، اما هر رویکردی مزایا و معایب خود را دارد.

1. تکراری - ما منابع را بین پروژه ها "به صورت دستی" کپی می کنیم.

مزایا:

  • مناسب برای انواع منابع
  • بدون مشکل وابستگی
  • هیچ مشکلی با GUID های دارایی وجود ندارد.

منفی:

  • مخازن غول پیکر
  • امکان نسخه سازی وجود ندارد.
  • مشکل ردیابی تغییرات منابع مشترک.
  • مشکل در به روز رسانی منابع مشترک

2. زیر ماژول های Git - توزیع منابع مشترک از طریق زیر ماژول های خارجی.

مزایا:

  • می توانید با منابع کار کنید.
  • می توانید دارایی ها را تقسیم کنید.
  • بدون مشکل وابستگی

منفی:

  • تجربه Git الزامی است.
  • Git با فایل های باینری خیلی دوستانه نیست - باید LFS را متصل کنید.
  • کنترل دسترسی برای مخازن
  • مشکل در ارتقاء و کاهش نسخه ها.
  • برخورد GUID ممکن است و هیچ رفتار واضحی از طرف Unity برای حل آنها وجود ندارد.

3. NuGet - توزیع کتابخانه های مشترک از طریق بسته های NuGet.

مزایا:

  • کار راحت با پروژه هایی که به Unity وابسته نیستند.
  • نسخه سازی راحت و وضوح وابستگی.

منفی:

  • Unity نمی‌تواند با بسته‌های NuGet خارج از جعبه کار کند (در GitHub می‌توانید NuGet Package Manager را برای Unity پیدا کنید، که این مشکل را برطرف می‌کند، اما تفاوت‌های ظریفی وجود دارد).
  • مشکلات در توزیع انواع دیگر دارایی ها.

4. Unity Package Manager - توزیع منابع مشترک از طریق یک راه حل بومی برای Unity.

مزایا:

  • رابط بومی برای کار با بسته ها.
  • محافظت در برابر بازنویسی فایل‌های متا در بسته‌ها به دلیل تداخل GUID.
  • امکان نسخه سازی.
  • امکان توزیع انواع منابع برای یونیتی.

منفی:

  • تداخل GUID همچنان ممکن است رخ دهد.
  • هیچ سندی برای اجرا وجود ندارد.

روش دوم مزایای بیشتری نسبت به معایب دارد. با این حال، در حال حاضر به دلیل عدم وجود مستندات، محبوبیت زیادی ندارد و بنابراین به تفصیل به آن خواهیم پرداخت.

Unity Package Manager

Unity Package Manager (UPM) یک ابزار مدیریت بسته است. در Unity 2018.1 اضافه شد و فقط برای بسته هایی که توسط Unity Technologies توسعه داده شده بودند استفاده شد. با این حال، با شروع نسخه 2018.3، امکان افزودن بسته های سفارشی فراهم شد.

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 استفاده کنید ورداچیو. مفصل وجود دارد مستندات، و برای اجرای آن فقط چند دستور لازم است.

راه اندازی محیط

ابتدا باید نصب کنید node.js.

ایجاد یک بسته

برای ایجاد یک بسته، باید فایل را قرار دهید package.json، که آن را توصیف می کند، به دایرکتوری حاوی محتویات این بسته. شما باید موارد زیر را انجام دهید:

به دایرکتوری پروژه ای که می خواهیم پکیج بسازیم بروید.

دستور npm init را اجرا کنید و مقادیر مورد نیاز را در حین گفتگو وارد کنید. برای نام، نام را در قالب دامنه معکوس، به عنوان مثال com.plarium.somepackage مشخص کنید.
برای نمایش راحت نام بسته، ویژگی displayName را به package.json اضافه کنید و آن را پر کنید.

از آنجایی که npm js-oriented است، فایل حاوی ویژگی های اصلی و اسکریپت هایی است که ما به آنها نیاز نداریم، که Unity از آنها استفاده نمی کند. بهتر است آن ها را حذف کنید تا توضیحات بسته را به هم نریزید. فایل باید چیزی شبیه به این باشد:

  1. به دایرکتوری پروژه ای که می خواهیم پکیج بسازیم بروید.
  2. دستور npm init را اجرا کنید و مقادیر مورد نیاز را در حین گفتگو وارد کنید. برای نام، نام را در قالب دامنه معکوس، به عنوان مثال com.plarium.somepackage مشخص کنید.
  3. برای نمایش راحت نام بسته، ویژگی displayName را به package.json اضافه کنید و آن را پر کنید.
  4. از آنجایی که npm js-oriented است، فایل حاوی ویژگی های اصلی و اسکریپت هایی است که ما به آنها نیاز نداریم، که 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. به Unity بروید و پنجره Package Manager را باز کنید (کار با بسته های سفارشی تفاوتی با کار با بسته های داخلی ندارد).
  3. همه بسته ها را انتخاب کنید.
  4. بسته مورد نیاز خود را پیدا کنید و آن را اضافه کنید.

Unity Package Manager

کار با منابع و اشکال زدایی

برای اینکه منابع به پروژه متصل شوند، باید ایجاد کنید تعریف مجمع برای بسته

استفاده از بسته ها گزینه های اشکال زدایی شما را محدود نمی کند. با این حال، هنگام کار با بسته ها در یونیتی، اگر خطا در بسته رخ داده باشد، نمی توانید با کلیک بر روی خطا در کنسول به 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

اضافه کردن نظر