Mam projekt Unity bez kontroli wersji i muszę go udostępnić innemu deweloperowi, abyśmy mogli pracować nad tym projektem.
Jakie strategie powinny być przydatne, aby grać w Unity Assets?
Mam projekt Unity bez kontroli wersji i muszę go udostępnić innemu deweloperowi, abyśmy mogli pracować nad tym projektem.
Jakie strategie powinny być przydatne, aby grać w Unity Assets?
Odpowiedzi:
Unity ma wbudowane narzędzie do prawidłowego wspierania kontroli wersji.
Wystarczy przejść do Plik-> Ustawienia projektu-> Edytor i włączyć zewnętrzną kontrolę wersji.
Polecam korzystanie z Git, jest darmowy i najlepszy w okolicy.
Jakiś czas temu pisałem o kontroli wersji (za pomocą Git) na moim blogu
Krótko mówiąc:
Włącz zewnętrzną kontrolę wersji Plik-> Ustawienia projektu-> Edytor i utwórz plik .gitignore, aby uniknąć niepotrzebnych rzeczy na repozytorium (nie jest to tak naprawdę konieczne, ale będzie bezcenne podczas programowania).
Oto jak powinien wyglądać plik:
[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
użytku I na projekty Unity, ale z kilku ommissions: [Bb]uild/
, *.booproj
, sysinfo.txt
. Jestem pewien, że to, czego używam, opiera się na nowych szablonach repozytorium GitHub dla Unity ( github.com/github/gitignore/blob/master/Unity.gitignore ) dowolnego Objective-C (podczas atakowania na iOS).
Unity 3.0 jest skonfigurowany do gry z subversion. (Przynajmniej ładniejszy niż wcześniej) Nie wiem, czy to tylko w wersji pro, czy nie, muszę sprawdzić.
Ogólnie jednak najbardziej zalecanym systemem kontroli wersji jest Unity Asset Server.
Specyficzne dla jedności - cały czas pracuj nad różnymi scenami i różnymi plikami kodu i ręcznie scalaj zmiany drugiej osoby. Jeśli oboje musisz pracować nad tą samą sceną, powiel ją i użyj kopii jako testu. W przeciwnym razie, jeśli oboje zmodyfikujecie tę samą scenę, zmiany jednej osoby zastąpią drugą. Nadal możesz używać kontroli źródła dla swoich plików źródłowych, po prostu nie przenoś ich wcale, w systemie plików lub przez Unity, gdy zostaną utworzone.
Porady dla początkujących - zdobądź przyzwoite narzędzie porównywania / scalania (lubię WinMerge ) i przyzwyczaj się do korzystania z niego, aby zobaczyć, jakie zmiany wprowadziła inna osoba, i do ręcznego scalania zmian w plikach będących w konflikcie. Skonfiguruj centralną przestrzeń dokumentacji, np. dokument Google do pisania lub wiki i przechowuj tam dokumentację - dokumentacja powinna zawierać minimalną listę podstawowych funkcji, abyś wiedział, do czego dążysz, a najlepiej listę zadań wyprowadzoną z listy funkcji, wraz z wyraźnym wskazaniem kto pracuje nad zadaniem. Porozmawiajcie ze sobą, aby z grubsza zorientować się, kto musi pracować nad danym zadaniem, i wykreślajcie je z listy, gdy będą gotowe. Kontynuuj przeglądanie i ponowną ocenę listy, aby sprawdzić, czy wszystko jest nadal aktualne i czy musisz przerobić jakieś priorytety.
Współpracuję z zespołem, który nazywa się Defective Studios. Od lat zmagamy się z tym samym problemem, a ostatnio w końcu poddałem się i zacząłem pisać rozszerzenie, które pomoże mi połączyć obiekty z grą.
Zasadniczo podejście polega na stworzeniu interfejsu przypominającego inspektora w oknie, które ustawia w rzędzie każdy obiekt gry, komponent i właściwość obok siebie w celu porównania i zapewnia przyciski do kopiowania wartości (lub całych obiektów) z jednej strony na drugą. Jeśli znasz SerializedProperty
klasę, to właśnie tutaj wykonuje większość pracy. Zasadniczo tworzymy GUI, który synchronizuje stan rozkładania między prawą i lewą stroną i tworzy pionową przestrzeń, gdziekolwiek GameObject
lubComponent
istnieje tylko po prawej lub lewej stronie. Funkcja porównania sprawdza równość na każdym poziomie i zmienia tło każdej linii na czerwoną lub zieloną w zależności od stanu równości. Każda linia, której dzieci zawierają różnice, również stanie się czerwona, a także umieściliśmy sprytny przycisk, aby rekurencyjnie przeszukiwać drzewo i rozszerzać wszystkie obiekty, które są różne lub mają różnice w swoich dzieciach.
Ponadto istnieje zestaw pól maski, które pozwalają odfiltrować niektóre typy komponentów z porównania. Porównywane są również atrybuty GameObject, takie jak nazwa, warstwa i znacznik. Używamy SerializedObject
i SerializedProperty
do przeglądania gameObject
właściwości i rysujemy je tak, jak są rysowane w inspektorze. Zapewnia to spójność i jest o wiele łatwiejsze do kodowania!
Ostatnim sprytnym szczegółem jest to, że proces porównywania (uruchamiany, gdy obiekty są ładowane i za każdym razem, gdy dokonywana jest zmiana), jest uruchamiany w ad-hoc coroutine, która jest aktualizowana przez EditorWindow.Update
funkcję, tak aby w przypadku porównywania bardzo skomplikowanego obiektu, okno nie blokuje edytora. Było to konieczne przy porównywaniu obiektów z setkami (lub tysiącami!) Dzieci. Podsumowując, był to rodzaj „projektu Lego”, jak lubi to mówić mój przyjaciel, ale zdecydowanie bezcenne narzędzie, które natychmiast stało się częścią naszej współpracy.
Narzędzie Unity Merge jest udokumentowane na wiki Unify, która zawiera mapę drogową i adres e-mail do przesyłania opinii i zgłaszania problemów. Jeśli naprawdę zmagasz się ze skomplikowanym połączeniem, daj mu szansę i daj nam znać, co myślisz! Ponadto nie zadałem sobie trudu, aby wbudować go w bibliotekę DLL, więc nie krępuj się przeszukiwać źródła. Ad-hocowa implementacja i SerializedProperty
manipulowanie coroutine , a także kilka sztuczek GUI, których potrzebowałem, stanowią dużą część zestawu narzędzi do edytora. Jestem bardzo zainteresowany zmianami / ulepszeniami, które mogą mieć użytkownicy, więc proszę o kontakt!
Jeśli masz na to środki, serwer Asset z pro wersją Unity jest całkiem przyzwoity. W przeszłości korzystałem z niego przy dużym, wieloosobowym projekcie i to zadziałało. W przypadku kontroli wersji waniliowej zrobił to, czego się spodziewaliśmy.
Próbowałem używać repozytorium SVN z projektem Unity i było to trochę kłopotliwe. Ostatecznie jednak skazaliśmy pomysł, zanim zaczął działać. Unity przechowuje wiele plików kopii zapasowych, których nie chciałem tracić czasu, aby dowiedzieć się, co by się stało, gdyby nie zostały zsynchronizowane z serwerem. Myślę, że przy odrobinie finezji może to być wykonalne, ale nie miałem doświadczenia z tym, żeby dobrze działał.
Zrobiłem mały projekt, korzystając z bezpłatnych funkcji DropBox. Denerwowało mnie to, ale nigdy nie mieliśmy żadnych problemów. I nie sądzę, że potrzebowaliśmy żadnych rzeczy do kontroli wersji dla tego projektu, więc nie mogę wiele powiedzieć o tym, jak wyglądałoby przywracanie lub scalanie plików.
Dropbox obsługuje wersjonowanie poszczególnych plików (zamiast zatwierdzeń) i ładnie gra z Unity. Początkowo jest bezpłatny (2 gigabajty), a następnie dość tani (około 10 USD za 50 gig). Potrzebujesz dodatku PackRat, aby mieć dostęp do historii wersji.
Podobnie jak w przypadku SVN, CVS, GIT itp., Musisz upewnić się, że tworzysz foldery znaczników, gdy dojdziesz do każdego kluczowego etapu rozwoju (np. Koniec tygodnia, koniec kamienia milowego). W przeciwieństwie do wyżej wymienionych, znacznie trudniej będzie powrócić do takiego etapu, jeśli nie zrobisz tego, ponieważ będziesz musiał przywrócić każdy pojedynczy plik osobno. Pamiętaj o tym podczas programowania, a będziesz mieć łatwy czas bez płacenia za serwer zasobów.