Unity-ն հարթակ է, որը գոյություն ունի բավականին երկար ժամանակ և անընդհատ զարգանում է: Այնուամենայնիվ, միաժամանակ մի քանի նախագծերի հետ աշխատելիս, դուք դեռ կարող եք դժվարությունների հանդիպել ընդհանուր աղբյուրների (.cs), գրադարանների (.dll) և այլ ակտիվների (պատկերներ, ձայներ, մոդելներ, նախապատկերներ) օգտագործելու հարցում: Այս հոդվածում մենք կխոսենք Unity-ի համար նման խնդրի հայրենական լուծման մեր փորձի մասին:
Համատեղ ռեսուրսների բաշխման մեթոդներ
Տարբեր նախագծերի համար ընդհանուր ռեսուրսներն օգտագործելու մեկից ավելի եղանակ կա, բայց յուրաքանչյուր մոտեցում ունի իր դրական և բացասական կողմերը:
1. Կրկնօրինակում - մենք նախագծերի միջև ռեսուրսները կրկնօրինակում ենք «ձեռքով»:
Կոալիցիայում:
- Հարմար է բոլոր տեսակի ռեսուրսների համար:
- Կախվածության հետ կապված խնդիրներ չկան:
- Ակտիվների GUID-ների հետ կապված խնդիրներ չկան:
Դեմ:
- Հսկայական պահեստներ.
- Տարբերակման հնարավորություն չկա։
- Համօգտագործվող ռեսուրսների փոփոխություններին հետևելու դժվարություն:
- Համատեղ ռեսուրսների թարմացման դժվարություն:
2.
Կոալիցիայում:
- Դուք կարող եք աշխատել աղբյուրների հետ:
- Դուք կարող եք բաշխել ակտիվները:
- Կախվածության հետ կապված խնդիրներ չկան:
Դեմ:
- Git-ի փորձը պարտադիր է:
- Git-ը այնքան էլ բարեկամական չէ երկուական ֆայլերի հետ. դուք ստիպված կլինեք միացնել LFS-ը:
- Պահեստների մուտքի վերահսկում:
- Տարբերակների արդիականացման և իջեցման հետ կապված դժվարություններ:
- GUID-ի բախումները հնարավոր են, և Unity-ի կողմից դրանք լուծելու հստակ վարքագիծ չկա:
3. NuGet - ընդհանուր գրադարանների բաշխում NuGet փաթեթների միջոցով:
Կոալիցիայում:
- Հարմար աշխատանք նախագծերի հետ, որոնք կախված չեն Unity-ից:
- Հարմարավետ տարբերակավորում և կախվածության լուծում:
Դեմ:
- Unity-ն չի կարող աշխատել NuGet փաթեթների հետ առանց տուփի (GitHub-ում կարող եք գտնել NuGet փաթեթների կառավարիչ Unity-ի համար, որն ուղղում է դա, բայց կան որոշ նրբերանգներ):
- Այլ տեսակի ակտիվների բաշխման դժվարություններ:
4. Unity Package Manager - համատեղ ռեսուրսների բաշխում Unity-ի համար տեղական լուծման միջոցով:
Կոալիցիայում:
- Բնական ինտերֆեյս փաթեթների հետ աշխատելու համար:
- Պաշտպանություն GUID-ի հակասությունների պատճառով փաթեթներում .meta ֆայլերի վերագրումից:
- Տարբերակման հնարավորություն։
- Միասնության համար բոլոր տեսակի ռեսուրսները բաշխելու ունակություն:
Դեմ:
- GUID-ի կոնֆլիկտները դեռ կարող են առաջանալ:
- Իրականացման համար փաստաթղթեր չկան։
Վերջին մեթոդն ավելի շատ առավելություններ ունի, քան թերությունները: Այնուամենայնիվ, այն այժմ այնքան էլ տարածված չէ փաստաթղթերի բացակայության պատճառով, և, հետևաբար, մենք մանրամասն կանդրադառնանք դրա վրա:
Unity փաթեթի կառավարիչ
Unity Package Manager-ը (UPM) փաթեթի կառավարման գործիք է: Այն ավելացվել է Unity 2018.1-ում և օգտագործվել միայն Unity Technologies-ի կողմից մշակված փաթեթների համար: Այնուամենայնիվ, սկսած 2018.3 տարբերակից, հնարավոր եղավ ավելացնել մաքսային փաթեթներ։
Unity Package Manager ինտերֆեյս
Փաթեթները չեն հայտնվում նախագծի աղբյուրներում (Ակտիվների գրացուցակ): Նրանք գտնվում են առանձին գրացուցակում %projectFolder%/Library/PackageCache
և ոչ մի կերպ չեն ազդում նախագծի վրա, սկզբնաղբյուրում դրանց միակ հիշատակումը ֆայլում է packages/manifest.json
.
Փաթեթներ նախագծի ֆայլային համակարգում
Փաթեթի աղբյուրները
UPM-ը կարող է օգտագործել փաթեթի մի քանի աղբյուրներ.
1. Ֆայլային համակարգ.
Կոալիցիայում:
- Իրականացման արագությունը.
- Չի պահանջում երրորդ կողմի գործիքներ:
Դեմ:
- Տարբերակման դժվարություն.
- Ծրագրի հետ աշխատող բոլորի համար անհրաժեշտ է ֆայլային համակարգի ընդհանուր մուտք:
2. Git պահոց:
Կոալիցիայում:
- Ձեզ անհրաժեշտ է միայն Git պահոց:
Դեմ:
- Դուք չեք կարող փոխարկել տարբերակների միջև UPM պատուհանի միջոցով:
- Չի աշխատում բոլոր Git պահոցների հետ:
3. npm պահոց.
Կոալիցիայում:
- Լիովին աջակցում է UPM ֆունկցիոնալությունը և օգտագործվում է Unity պաշտոնական փաթեթները տարածելու համար:
Դեմ:
- Ներկայումս անտեսում է փաթեթների բոլոր լարային տարբերակները, բացառությամբ «-preview»:
Ստորև մենք կանդրադառնանք UPM + npm իրականացմանը: Այս փաթեթը հարմար է, քանի որ այն թույլ է տալիս աշխատել ցանկացած տեսակի ռեսուրսի հետ և կառավարել փաթեթի տարբերակները, ինչպես նաև լիովին աջակցում է հայրենի UPM ինտերֆեյսին:
Դուք կարող եք օգտագործել այն որպես npm պահոց
Շրջակա միջավայրի կարգավորում
Նախ անհրաժեշտ է տեղադրել
Փաթեթի ստեղծում
Փաթեթ ստեղծելու համար անհրաժեշտ է տեղադրել ֆայլը package.json
, որը նկարագրելու է այն այս փաթեթի բովանդակությամբ գրացուցակում: Դուք պետք է անեք հետևյալը.
Գնացեք ծրագրի գրացուցակ, որը մենք ցանկանում ենք պատրաստել փաթեթ:
Գործարկեք npm init հրամանը և երկխոսության ընթացքում մուտքագրեք պահանջվող արժեքները: Անվան համար նշեք անունը հակառակ տիրույթի ձևաչափով, օրինակ՝ com.plarium.somepackage:
Փաթեթի անունը հարմար ցուցադրելու համար package.json-ում ավելացրեք displayName հատկությունը և լրացրեք այն:
Քանի որ npm-ն ուղղված է js-ին, ֆայլը պարունակում է հիմնական և սկրիպտների հատկություններ, որոնք մեզ պետք չեն, որոնք Unity-ն չի օգտագործում: Ավելի լավ է հեռացնել դրանք, որպեսզի չխառնվի փաթեթի նկարագրությունը: Ֆայլը պետք է նման լինի հետևյալին.
- Գնացեք ծրագրի գրացուցակ, որը մենք ցանկանում ենք պատրաստել փաթեթ:
- Գործարկեք npm init հրամանը և երկխոսության ընթացքում մուտքագրեք պահանջվող արժեքները: Անվան համար նշեք անունը հակառակ տիրույթի ձևաչափով, օրինակ՝ com.plarium.somepackage:
- Փաթեթի անունը հարմար ցուցադրելու համար package.json-ում ավելացրեք displayName հատկությունը և լրացրեք այն:
- Քանի որ 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" }
- Բացեք Unity-ն և ստեղծեք .meta ֆայլ package.json-ի համար (Unity-ն չի տեսնում ակտիվներն առանց .meta ֆայլերի, Unity-ի համար նախատեսված փաթեթները բացվում են միայն կարդալու համար):
Փաթեթ ուղարկելը
Փաթեթն ուղարկելու համար անհրաժեշտ է գործարկել հրամանը. npm publish --registry *адрес до хранилища пакетов*
.
Փաթեթների տեղադրում և թարմացում Unity Package Manager-ի միջոցով
Unity նախագծին փաթեթ ավելացնելու համար ձեզ հարկավոր է.
- Ավելացնել ֆայլին
manifest.json
տեղեկատվություն փաթեթների աղբյուրի մասին. Դա անելու համար անհրաժեշտ է ավելացնել գույքըscopedRegistries
և նշեք շրջանակները և սկզբնաղբյուրի հասցեն, որտեղ կոնկրետ շրջանակներ են որոնվելու:"scopedRegistries": [ { "name": "Main", "url": "адрес до хранилища пакетов", "scopes": [ "com.plarium" ] } ]
- Գնացեք Unity և բացեք Package Manager պատուհանը (մաքսային փաթեթների հետ աշխատելը ոչնչով չի տարբերվում ներկառուցվածների հետ աշխատելուց):
- Ընտրեք Բոլոր փաթեթները:
- Գտեք ձեզ անհրաժեշտ փաթեթը և ավելացրեք այն:
Աղբյուրների հետ աշխատանք և վրիպազերծում
Որպեսզի աղբյուրները միացված լինեն նախագծին, պետք է ստեղծել
Փաթեթների օգտագործումը չի սահմանափակում ձեր վրիպազերծման տարբերակները: Այնուամենայնիվ, Unity-ում փաթեթների հետ աշխատելիս դուք չեք կարող գնալ IDE՝ սեղմելով վահանակի սխալի վրա, եթե սխալը տեղի է ունեցել փաթեթում: Դա պայմանավորված է նրանով, որ Unity-ն սկրիպտները չի տեսնում որպես առանձին ֆայլեր, քանի որ ժողովի սահմանումը օգտագործելիս դրանք հավաքվում են գրադարանում և ներառվում նախագծում: Նախագծի աղբյուրների հետ աշխատելիս IDE-ին սեղմելը հասանելի է:
Սցենարը միացված փաթեթով նախագծում.
Սցենար փաթեթից աշխատանքային ընդմիջման կետով.
Փաթեթների շտապ շտկումներ
Նախագծին ավելացված Unity փաթեթները միայն կարդալու են, բայց կարող են խմբագրվել փաթեթի քեշում: Դա անելու համար ձեզ հարկավոր է.
- Գնացեք փաթեթ փաթեթի քեշում:
- Կատարեք անհրաժեշտ փոփոխությունները.
- Թարմացրեք տարբերակը ֆայլում
package.json
. - Ուղարկել փաթեթ
npm publish --registry *адрес до хранилища пакетов*
. - Թարմացրեք փաթեթի տարբերակը շտկվածին UPM ինտերֆեյսի միջոցով:
Փաթեթների ներմուծման հակասություններ
Փաթեթներ ներմուծելիս կարող են առաջանալ հետևյալ GUID հակասությունները.
- Փաթեթ - փաթեթ. Եթե փաթեթ ներմուծելիս պարզվի, որ արդեն ավելացված փաթեթները պարունակում են նույն GUID-ով ակտիվներ, ներմուծված փաթեթից համապատասխան GUID-ներով ակտիվներ չեն ավելացվի նախագծին:
- Փաթեթը նախագիծ է: Եթե փաթեթ ներմուծելիս պարզվի, որ նախագիծը պարունակում է ակտիվներ համապատասխան GUID-ներով, ապա փաթեթից ակտիվները չեն ավելացվի նախագծին: Այնուամենայնիվ, դրանցից կախված ակտիվները կսկսեն օգտագործել նախագծի ակտիվները:
Ակտիվների փոխանցում նախագծից փաթեթ
Եթե դուք ակտիվը նախագիծից փաթեթ տեղափոխեք, քանի դեռ Unity-ը բաց է, դրա ֆունկցիոնալությունը կպահպանվի, և կախյալ ակտիվների հղումները կսկսեն օգտագործել փաթեթի ակտիվը:
Կարեւոր է,Ակտիվը նախագծից փաթեթ պատճենելիս կառաջանա վերը բաժնում նկարագրված «Փաթեթ - նախագիծ» կոնֆլիկտը:
Հակամարտությունների հնարավոր լուծումներ
- GUID-ների վերանշանակում՝ օգտագործելով մեր սեփական ալգորիթմները բոլոր ակտիվները ներմուծելիս՝ բախումները վերացնելու համար:
- Բոլոր ակտիվները մեկ նախագծին ավելացնելով և այնուհետև դրանք փաթեթների բաժանելով:
- Բոլոր ակտիվների GUID-ները պարունակող տվյալների բազայի ստեղծում և փաթեթներ ուղարկելիս վավերացում:
Ամփոփում
UPM-ը Unity-ում ընդհանուր ռեսուրսների բաշխման նոր լուծում է, որը կարող է արժանի այլընտրանք լինել գոյություն ունեցող մեթոդներին: Հոդվածում նկարագրված առաջարկությունները հիմնված էին իրական դեպքերի վրա: Հուսով ենք, որ դրանք օգտակար կլինեն:
Source: www.habr.com