Ho un progetto Unity senza alcun controllo di versione e ho bisogno di condividerlo con un altro sviluppatore in modo che entrambi possiamo lavorare al progetto.
Quali strategie dovrebbero essere utilizzate per giocare bene con Unity Assets?
Ho un progetto Unity senza alcun controllo di versione e ho bisogno di condividerlo con un altro sviluppatore in modo che entrambi possiamo lavorare al progetto.
Quali strategie dovrebbero essere utilizzate per giocare bene con Unity Assets?
Risposte:
Unity ha una struttura integrata per supportare correttamente il controllo della versione.
Basta andare in File-> Impostazioni progetto-> Editor e abilitare il controllo della versione esterna.
Consiglio di usare Git, è gratuito e il migliore in circolazione.
Qualche tempo fa ho scritto sul controllo delle versioni (usando Git) sul mio blog
Per farla breve:
Abilita il controllo della versione esterna File-> Impostazioni progetto-> Editor e crea il file .gitignore per evitare cose inutili sul repository (questo non è davvero necessario, ma sarà impagabile durante lo sviluppo).
Ecco come dovrebbe apparire il file:
[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
uso io per i progetti di Unity, ma con un paio di omissioni: [Bb]uild/
,*.booproj
, sysinfo.txt
. Sono abbastanza sicuro che ciò che utilizzo sia basato sui modelli di repository GitHub per Unity ( github.com/github/gitignore/blob/master/Unity.gitignore ) qualsiasi Objective-C (quando si utilizza iOS).
Unity 3.0 è configurato per giocare bene con sovversione. (Almeno più bello di prima) Non so se questo è solo nella versione pro o no, dovrò controllare.
In generale, tuttavia, il sistema di controllo versione più consigliato è Unity Asset Server.
Unità specifica: lavora su scene diverse e file di codice diversi in ogni momento e unisci manualmente le modifiche dell'altra persona. Se entrambi dovete lavorare sulla stessa scena, duplicatelo e utilizzate la copia come test. Altrimenti, se entrambi modificate la stessa scena, le modifiche di una persona sovrascriveranno l'altra. Puoi ancora utilizzare il controllo del codice sorgente per i tuoi file sorgente, semplicemente non spostarli affatto, nel file system o tramite Unity, una volta creati.
Consigli per i principianti: procuratevi uno strumento discreto diff / merge (mi piace WinMerge ) e abituatevi a usarlo per vedere quali modifiche hanno apportato l'altra persona e per unire manualmente le modifiche in file in conflitto. Impostare uno spazio di documentazione centrale, ad es. un documento di scrittura di Google o una wiki e mantieni la tua documentazione lì - la documentazione dovrebbe contenere almeno un elenco di funzionalità di base in modo da sapere a cosa stai mirando e idealmente un elenco di attività derivato dall'elenco di funzionalità, insieme a una chiara indicazione di chi sta lavorando all'attività. Parlate tra loro per avere un'idea approssimativa di chi ha bisogno di lavorare su quale compito e cancellarli dall'elenco mentre vengono eseguiti. Continua a rivedere e rivalutare l'elenco per vedere se tutto è ancora valido e se devi rielaborare le priorità.
Lavoro con una squadra che si chiama Defective Studios. Abbiamo lottato con lo stesso problema per anni e solo di recente ho finalmente ceduto e ho iniziato a scrivere un'estensione per aiutarmi a unire gli oggetti di gioco.
Fondamentalmente l'approccio è quello di creare un'interfaccia simile a un ispettore in una finestra che allinea ogni oggetto di gioco, componente e proprietà fianco a fianco per il confronto e fornisce pulsanti per copiare valori (o interi oggetti) da un lato all'altro. Se hai familiarità conSerializedProperty
classe, ecco cosa sta facendo la maggior parte del lavoro qui. Fondamentalmente creiamo una GUI che sincronizza lo stato pieghevole tra il lato destro e sinistro e crea spazio verticale ovunque un GameObject
oComponent
esiste solo sul lato destro o sinistro. Una funzione di confronto controlla l'uguaglianza ad ogni livello e trasforma lo sfondo di ogni linea in rosso o verde a seconda dello stato dell'uguaglianza. Qualsiasi linea i cui figli contengono una differenza diventerà rossa, e abbiamo anche incluso un pulsante elegante per cercare ricorsivamente l'albero ed espandere tutti gli oggetti che sono diversi o hanno differenze nei loro figli.
Inoltre, esiste una serie di campi maschera che consentono di filtrare determinati tipi di componenti dal confronto. Vengono confrontati anche gli attributi GameObject come nome, layer e tag. Usiamo SerializedObject
e SerializedProperty
ripetiamo ciclicamente le gameObject
proprietà e le disegniamo come se fossero state disegnate nell'ispettore. Ciò garantisce coerenza ed è molto più facile da programmare!
Un ultimo dettaglio elegante è che il processo di confronto (attivato quando gli oggetti vengono caricati e ogni volta che viene apportata una modifica) viene eseguito in un programma ad hoc che viene aggiornato dal EditorWindow.Update
funzione, in modo che nel caso si stia confrontando un oggetto estremamente complicato, la finestra non blocca l'editor. Questo era un must quando si confrontavano oggetti con centinaia (o migliaia!) Di bambini. Tutto sommato, è stato un po 'un "progetto lego" come piace dire al mio amico, ma sicuramente uno strumento prezioso che è diventato immediatamente parte del nostro flusso di lavoro di collaborazione.
Lo strumento Unity Merge è documentato nella wiki di Unify, che include una roadmap e un indirizzo e-mail per feedback e segnalazione di problemi. Se stai davvero lottando con una fusione complicata, provaci e facci sapere cosa ne pensi! Inoltre, non mi sono preso la briga di crearlo in una DLL, quindi sentiti libero di dare un'occhiata alla fonte. L'implementazione coroutine ad hoc e le SerializedProperty
manipolazioni, nonché alcuni trucchi della GUI di cui ho finito per aver bisogno sono una grande parte del tuo toolkit di estensione dell'editor. Sono molto interessato ai cambiamenti / miglioramenti che gli utenti potrebbero avere, quindi per favore contattaci!
Se hai i fondi per questo, il server Asset con la versione pro di Unity è abbastanza decente. L'ho usato su un grande progetto multi-persona in passato e ha fatto il lavoro. Per il controllo della versione vaniglia, ha fatto quello che ci aspettavamo.
Ho provato a usare un repository SVN con un progetto Unity ed è stato un po 'una seccatura. Alla fine, però, abbiamo finito per eliminare l'idea prima di farla funzionare. Unity conserva molti file di backup che non volevo prendere il tempo per scoprire cosa sarebbe successo se non fossero stati sincronizzati con il server. Penso che, con un po 'di finezza, potrebbe essere fattibile ma non ho avuto esperienza nel farlo funzionare bene.
Ho realizzato un piccolo progetto usando le funzionalità gratuite di DropBox. Mi ha reso nervoso ma non abbiamo mai avuto problemi. E non credo che alla fine avessimo bisogno di alcun materiale di controllo della versione reale per quel progetto, quindi non posso parlare molto di come sarebbe andato il ripristino o l'unione dei file.
Dropbox supporta il controllo delle versioni per file (anziché per commit) e funziona bene con Unity. È inizialmente gratuito (2 gigabyte) e in seguito abbastanza economico (circa $ 10 per 50 gig). È necessario il componente aggiuntivo PackRat per accedere alla cronologia delle versioni.
Proprio come con SVN, CVS, GIT ecc., Dovrai assicurarti di creare cartelle di tag quando arrivi a ogni fase chiave dello sviluppo (ad es. Fine settimana, fine del traguardo). A differenza di quanto sopra, sarà molto più difficile tornare a un tale stadio se non lo fai, perché dovresti ripristinare ogni singolo file singolarmente. Tienilo a mente durante lo sviluppo e ti divertirai senza pagare per l'Asset Server.