У мене є проект Unity без будь-якого контролю версій, і мені потрібно поділитися ним з іншим розробником, щоб ми обидва могли працювати над проектом.
Які стратегії слід використовувати, щоб це було добре для Unity Assets?
У мене є проект Unity без будь-якого контролю версій, і мені потрібно поділитися ним з іншим розробником, щоб ми обидва могли працювати над проектом.
Які стратегії слід використовувати, щоб це було добре для Unity Assets?
Відповіді:
У Unity є вбудований інструмент для належної підтримки версій.
Просто перейдіть у меню Файл-> Налаштування проекту-> Редактор та увімкніть зовнішній контроль версій.
Я рекомендую використовувати Git, це безкоштовно і найкраще.
Нещодавно я писав про керування версіями (за допомогою Git) своєму блозі
Довга історія:
Увімкніть зовнішнє керування версіями Файл-> Налаштування проекту-> Редактор та створіть файл .gitignore, щоб уникнути непотрібних репостів (це насправді не потрібно, але це буде безцінним під час розробки).
Ось як повинен виглядати файл:
[Oo]bj/
[Tt]emp/
[Ll]ibrary
#These are files in the root folder of the project
*.tmproj
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.pidb
*.userprefs
.gitingore
використання I проектів Unity , але з декількома пропуски: [Bb]uild/
, *.booproj
, sysinfo.txt
. Я майже впевнений, що те, що я використовую, базується на нових шаблонах GitHub-репо для Unity ( github.com/github/gitignore/blob/master/Unity.gitignore ) будь-якого Objective-C (під час націлювання на iOS).
Unity 3.0 налаштований на гарну гру з підривною роботою. (Принаймні приємніше, ніж раніше) Я не знаю, чи є це лише у професійній версії чи ні, мені доведеться перевірити.
Взагалі, найбільш рекомендованою системою управління версіями є Unity Asset Server.
Unity specific - працюйте над різними сценами та різними файлами кодів у будь-який час, а також змішуйте зміни іншої людини вручну. Якщо вам обом потрібно працювати на одній сцені, скопіюйте її та використовуйте копію як тест. В іншому випадку, якщо ви обидва модифікуєте одну і ту ж сцену, зміни однієї людини замінять іншу. Ви все одно можете використовувати управління джерелами для своїх вихідних файлів, просто не пересувайте їх навколо, у файловій системі або за допомогою Unity, коли вони створені.
Порада для початківців - придбайте собі гідний інструмент "розріз / злиття" (мені подобається WinMerge ) і звикніть використовувати його, щоб побачити, що змінив інший чоловік, і вручну об'єднати зміни в конфліктних файлах. Налаштуйте центральний простір для документації, наприклад. документ, що пише Google, або вікі, і зберігайте там свою документацію - документація повинна містити як мінімум основний список функцій, щоб ви знали, що ви прагнете, а в ідеалі - список завдань, отриманий зі списку функцій, а також чітку вказівку хто працює над цим завданням. Поговоріть один з одним, щоб отримати грубе уявлення про те, хто повинен працювати над тим, яке завдання і перекреслити їх зі списку, коли вони будуть виконані. Продовжуйте переглядати та переоцінювати список, щоб побачити, чи все ще діє, і чи потрібно переробити будь-які пріоритети.
Я працюю з командою, яка називає себе Defective Studios. Ми боролися з тим самим випуском протягом багатьох років, і зовсім недавно я нарешті поступився і почав писати розширення, щоб допомогти мені об'єднати ігрові об’єкти.
В основному підхід полягає у створенні інтерфейсу, подібного до інспектора, у вікні, яке вирівнює між собою кожен ігровий об'єкт, компонент та властивість для порівняння та забезпечує кнопки для копіювання значень (або цілих об'єктів) з однієї сторони на іншу. Якщо ви знайомі з SerializedProperty
класом, саме тут виконується основна частина роботи. В основному ми створюємо графічний інтерфейс, який синхронізує стан згину між правою та лівою стороною та створює вертикальний простір, де бGameObject
абоComponent
існує лише з правого або лівого боку. Функція порівняння перевіряє рівність на кожному рівні та перетворює фон кожного рядка в червоний або зелений, залежно від стану рівності. Будь-який рядок, у якого діти містять різницю, також стане червоним, і ми також включили чудову кнопку для рекурсивного пошуку дерева та розширення всіх об'єктів, які відрізняються або мають відмінності у своїх дітей.
Крім того, існує набір полів масок, які дозволяють фільтрувати певні типи компонентів із порівняння. Атрибути GameObject, такі як ім'я, шар та тег, також порівнюються. Ми використовуємо SerializedObject
і SerializedProperty
перебираємо черезgameObject
властивості 's, і малюємо їх так, як вони намальовані в інспекторі. Це забезпечує узгодженість і кодування набагато простіше!
Остання остання витончена деталь - це те, що процес порівняння (запускається під час завантаження об'єктів і кожного разу, коли відбувається зміна) запускається у спеціальній кореневій програмі, яка оновлюється EditorWindow.Update
функцією, так що, якщо ви порівнюєте надзвичайно складний об'єкт, вікно не замикає редактор. Це було обов’язково при порівнянні предметів із сотнями (або тисячами!) Дітей. Загалом, це був свого роду "проект лего", як любить говорити мій друг, але, безумовно, неоціненний інструмент, який миттєво став частиною нашого робочого процесу співпраці.
Інструмент, Unity Merge це документовано на Unify вики, яка включає в себе дорожню карту та адресу електронної пошти для зворотного зв'язку і видачі звітів. Якщо ви справді боретеся зі складним злиттям, дайте йому постріл і повідомте нам, що ви думаєте! Крім того, я не намагався вбудовувати його в DLL, тому сміливо торкайтеся біля джерела. Спеціальна реалізація та SerializedProperty
маніпуляції з кореспонденцією , а також декілька хитрощів із графічним інтерфейсом, які мені потрібні, є великою частиною вашого інструментарію розширень редактора. Мені дуже цікаві зміни / удосконалення, які можуть мати користувачі, тому, будь ласка, зв’яжіться!
Якщо у вас є кошти на це, сервер Asset з про-версією Unity досить пристойний. У минулому я використовував це у великому проекті для багатьох людей, і він зробив свою роботу. Для контролю ванільної версії він зробив те, що ми очікували.
Я спробував використовувати сховище SVN з проектом Unity, і це було трохи клопоту. Однак ми закінчили цю ідею, перш ніж змусити її працювати. Unity зберігає безліч резервних файлів, на які я не хотів витрачати час, щоб дізнатися, що буде, якщо їх не синхронізували з сервером. Я думаю, що з невеликою витонченістю це може бути здійснено, але я не мав досвіду роботи з ним.
Я зробив невеликий проект, використовуючи безкоштовні функції DropBox. Це нервувало мене, але у нас ніколи не було проблем. І, я не думаю, що нам потрібен реальний матеріал контролю версій для цього проекту, тому я не можу багато говорити про те, як пішли би файли, що повертаються або об'єднуються.
Dropbox підтримує версію файлів (а не за комісію) і чудово грає з Unity. Спочатку він безкоштовний (2 гігабайти) і згодом досить дешево (близько 10 доларів за 50 гіг). Щоб мати доступ до історії версій, вам потрібен аддон PackRat.
Як і у форматі SVN, CVS, GIT тощо, вам потрібно буде переконатися, що ви створюєте папки тегів, коли ви потрапите на кожен ключовий етап розвитку (наприклад, кінець тижня, кінець етапу). На відміну від вищезазначеного, повернутися до такого етапу буде набагато важче, якщо цього не зробити, тому що вам доведеться повернути кожен файл окремо. Майте це на увазі, розвиваючись, і у вас буде легкий час без оплати сервера активів.