Ich habe ein Unity-Projekt ohne Versionskontrolle und muss es für einen anderen Entwickler freigeben, damit wir beide an dem Projekt arbeiten können.
Welche Strategien sollten verwendet werden, die mit Unity Assets gut funktionieren?
Ich habe ein Unity-Projekt ohne Versionskontrolle und muss es für einen anderen Entwickler freigeben, damit wir beide an dem Projekt arbeiten können.
Welche Strategien sollten verwendet werden, die mit Unity Assets gut funktionieren?
Antworten:
Unity verfügt über eine integrierte Funktion zur ordnungsgemäßen Unterstützung der Versionskontrolle.
Gehen Sie einfach in den Datei-> Projekteinstellungen-> Editor und aktivieren Sie die externe Versionskontrolle.
Ich empfehle die Verwendung von Git, es ist kostenlos und das Beste in der Umgebung.
Vor einiger Zeit habe ich in meinem Blog über die Versionskontrolle (mit Git) geschrieben
Um es kurz zu machen:
Aktivieren Sie die externe Versionskontrolle Datei-> Projekteinstellungen-> Editor und erstellen Sie die .gitignore-Datei, um unnötige Inhalte auf dem Repo zu vermeiden (dies ist nicht unbedingt erforderlich, wird jedoch während der Entwicklung von unschätzbarem Wert sein).
So sollte die Datei aussehen:
[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
ich für Unity - Projekte aber mit ein paar ommissions: [Bb]uild/
, *.booproj
, sysinfo.txt
. Ich bin mir ziemlich sicher, was ich verwende, basiert auf GitHubs neuen Repo-Vorlagen für Unity ( github.com/github/gitignore/blob/master/Unity.gitignore ) für Objective-C (bei Ausrichtung auf iOS).
Unity 3.0 ist so konfiguriert, dass es gut mit Subversion funktioniert. (Zumindest schöner als vorher) Ich weiß nicht, ob dies nur in der Pro-Version ist oder nicht, ich muss es überprüfen.
Im Allgemeinen ist der Unity Asset Server das am meisten empfohlene Versionskontrollsystem.
Einheitenspezifisch - Bearbeiten Sie jederzeit verschiedene Szenen und Codedateien und führen Sie die Änderungen der anderen Person manuell zusammen. Wenn Sie beide an derselben Szene arbeiten müssen, duplizieren Sie sie und verwenden Sie die Kopie als Test. Andernfalls überschreiben die Änderungen einer Person die Änderungen der anderen Person, wenn Sie beide dieselbe Szene ändern. Sie können die Quellcodeverwaltung weiterhin für Ihre Quelldateien verwenden. Verschieben Sie sie einfach nicht mehr im Dateisystem oder über Unity, sobald sie erstellt wurden.
Anfängertipps: Besorgen Sie sich ein anständiges Tool zum Vergleichen und Zusammenführen (ich mag WinMerge ) und gewöhnen Sie sich daran, damit zu sehen, welche Änderungen die andere Person vorgenommen hat, und Änderungen in in Konflikt stehenden Dateien manuell zusammenzuführen. Richten Sie einen zentralen Dokumentationsraum ein, z. ein Google-Dokument oder ein Wiki schreiben und Ihre Dokumentation dort aufbewahren - Die Dokumentation sollte mindestens eine Grundfunktionsliste enthalten, damit Sie wissen, was Sie anstreben, und im Idealfall eine aus der Funktionsliste abgeleitete Aufgabenliste sowie eine eindeutige Angabe von wem wird an der aufgabe gearbeitet. Sprechen Sie miteinander, um eine ungefähre Vorstellung davon zu bekommen, wer an welcher Aufgabe arbeiten muss, und streichen Sie sie von der Liste, wenn sie fertig sind. Überprüfen und bewerten Sie die Liste erneut, um festzustellen, ob noch alles gültig ist und ob Sie Prioritäten überarbeiten müssen.
Ich arbeite mit einem Team, das sich Defective Studios nennt. Wir haben jahrelang mit dem gleichen Problem zu kämpfen, und vor kurzem habe ich endlich aufgegeben und angefangen, eine Erweiterung zu schreiben, die mir hilft, Spielobjekte zusammenzuführen.
Grundsätzlich besteht der Ansatz darin, eine inspektorähnliche Oberfläche in einem Fenster zu erstellen, die jedes Spielobjekt, jede Komponente und jede Eigenschaft zum Vergleich nebeneinander anordnet und Schaltflächen zum Kopieren von Werten (oder ganzen Objekten) von einer Seite zur anderen bereitstellt. Wenn Sie mit der SerializedProperty
Klasse vertraut sind, erledigen Sie den größten Teil der Arbeit hier. Grundsätzlich erstellen wir eine grafische Benutzeroberfläche, die den Ausklappstatus zwischen der rechten und der linken Seite synchronisiert und überall dort, wo ein GameObject
oder ist, vertikalen Raum schafftComponent
existiert nur auf der rechten oder linken Seite. Eine Vergleichsfunktion überprüft die Gleichheit auf jeder Ebene und setzt den Hintergrund jeder Linie je nach Gleichheitsstatus auf Rot oder Grün. Jede Zeile, deren untergeordnete Elemente einen Unterschied enthalten, wird ebenfalls rot. Außerdem haben wir eine nützliche Schaltfläche eingefügt, mit der Sie den Baum rekursiv durchsuchen und alle Objekte erweitern können, die sich unterscheiden oder Unterschiede in ihren untergeordneten Elementen aufweisen.
Außerdem gibt es eine Reihe von Maskenfeldern, mit denen Sie bestimmte Komponententypen aus dem Vergleich herausfiltern können. GameObject-Attribute wie Name, Layer und Tag werden ebenfalls verglichen. Wir verwenden SerializedObject
und SerializedProperty
, um die gameObject
Eigenschaften des Objekts zu durchlaufen und sie so zu zeichnen, wie sie im Inspektor gezeichnet wurden. Dies stellt die Konsistenz sicher und ist wesentlich einfacher zu programmieren!
Ein letztes raffiniertes Detail ist, dass der Vergleichsprozess (der beim Laden der Objekte und bei jeder Änderung ausgelöst wird) in einer Ad-hoc-Coroutine ausgeführt wird, die von der EditorWindow.Update
Funktion aktualisiert wird , sodass Sie für den Fall, dass Sie ein äußerst kompliziertes Objekt vergleichen, Das Fenster sperrt den Editor nicht. Dies war ein Muss beim Vergleich von Objekten mit Hunderten (oder Tausenden!) Kindern. Alles in allem war es eine Art "Lego-Projekt", wie mein Freund gerne sagt, aber definitiv ein unschätzbares Werkzeug, das sofort Teil unseres Kollaborations-Workflows wurde.
Das Tool Unity Merge ist im Unify-Wiki dokumentiert. Es enthält eine Roadmap und eine E-Mail-Adresse für Feedback und Fehlerberichte. Wenn Sie wirklich mit einer komplizierten Zusammenführung zu kämpfen haben, probieren Sie es aus und teilen Sie uns Ihre Meinung mit! Ich habe mich auch nicht darum gekümmert, es in eine DLL zu integrieren. Die Ad-hoc-Coroutine-Implementierung und SerializedProperty
-Manipulationen sowie einige GUI-Tricks, die ich letztendlich brauchte, sind ein großer Teil Ihres Editor-Erweiterungs-Toolkits. Ich bin sehr an Änderungen / Verbesserungen interessiert, die Benutzer haben könnten. Bitte nehmen Sie Kontakt mit uns auf!
Wenn Sie die Mittel dafür haben, ist der Asset-Server mit der Pro-Version von Unity ziemlich anständig. Ich habe es in der Vergangenheit für ein großes Projekt mit mehreren Personen verwendet und es hat den Job gemacht. Bei der Vanille-Versionskontrolle wurde das getan, was wir erwartet hatten.
Ich habe versucht, ein SVN-Repository mit einem Unity-Projekt zu verwenden, und es war ein bisschen mühsam. Am Ende haben wir die Idee jedoch verschrottet, bevor sie funktioniert hat. Unity speichert viele Sicherungsdateien, für die ich mir nicht die Zeit nehmen wollte, herauszufinden, was passieren würde, wenn sie nicht mit dem Server synchronisiert würden. Ich denke, mit ein wenig Finesse könnte es machbar sein, aber ich habe keine Erfahrung damit, dass es gut funktioniert.
Ich habe ein kleines Projekt mit den kostenlosen Funktionen von DropBox gemacht. Es hat mich nervös gemacht, aber wir hatten nie irgendwelche Probleme. Und ich glaube nicht, dass wir wirklich Versionskontrollmaterial für dieses Projekt brauchten, deshalb kann ich nicht viel darüber sagen, wie das Zurücksetzen oder Zusammenführen von Dateien verlaufen wäre.
Dropbox unterstützt die Versionsverwaltung pro Datei (und nicht per Festschreibung) und funktioniert gut mit Unity. Es ist anfangs kostenlos (2 Gigabyte) und danach recht günstig (ca. 10 US-Dollar für 50 Gigabyte). Sie benötigen das PackRat-Addon, um auf den Versionsverlauf zugreifen zu können.
Genau wie bei SVN, CVS, GIT usw. müssen Sie sicherstellen, dass Sie Tag-Ordner erstellen, wenn Sie zu jedem wichtigen Stadium in der Entwicklung gelangen (z. B. Ende der Woche, Ende des Meilensteins). Im Gegensatz zu den oben genannten ist es viel schwieriger, zu einem solchen Stadium zurückzukehren, wenn Sie dies nicht tun, da Sie jede einzelne Datei einzeln wiederherstellen müssten. Denken Sie daran, während Sie entwickeln, und Sie werden es leicht haben, ohne für den Asset Server zu bezahlen.