Trabajo en equipo en la unidad

30

Tengo un proyecto de Unity sin ningún control de versión, y necesito compartirlo con otro desarrollador para que ambos podamos trabajar en el proyecto.

¿Qué estrategias se deben usar para jugar bien con Unity Assets?

Matias Valdenegro
fuente
Creo que este artículo le dará algunos consejos: va.lent.in/blog/2011/12/13/…
Den
2
DropBox admite control de versiones, la función se llama "Pack-Rat" pero no es gratuita. Para consejos para desarrolladores independientes principiantes, se han hecho numerosas preguntas antes. Te sugiero que camines un poco. Finalmente Bienvenido a GameDev SE!
Quazi Irfan
Sin el servidor de activos, puede haber algunos problemas al mover los prefabricados y escenas de ida y vuelta
Sidar

Respuestas:

17

Unity tiene una función incorporada para soportar el control de versiones correctamente.

Simplemente vaya a Archivo-> Configuración del proyecto-> Editor y habilite el control de versión externo.

Kevin Laity
fuente
44
¿Es esta una función Pro-only? No veo ese elemento del menú en la versión gratuita / independiente de Windows de Unity 2.6.
James
A partir del 30/01/2011, es Pro-only. Vea el segundo párrafo de: unity3d.com/support/documentation/Manual/…
ojrac
11
La última vista previa para desarrolladores de Unity (3.5 RC1) ha realizado un cambio para admitir el control de versiones en la versión gratuita. del registro de cambios ( unity3d.com/unity/preview/notes ): Licencia: El control genérico externo de la versión (archivos .meta) ahora está disponible en la versión gratuita.
Programador de juegos crónicos el
2
solo para su información para futuros visitantes, tenga en cuenta la fecha en esta respuesta; ya no está actualizado. Ahora no hay necesidad de activar ninguna configuración; simplemente versione las carpetas "Activos" (asegúrese de que su control de versión esté recogiendo archivos .meta ocultos) y "Configuración del proyecto" e ignore todo lo demás.
jhocking
10

Recomiendo usar Git, es gratis y el mejor.

Hace un tiempo escribí sobre el control de versiones (usando Git) en mi blog

Larga historia corta:

Habilite el control de versión externo Archivo-> Configuración del proyecto-> Editor y cree el archivo .gitignore para evitar cosas innecesarias en el repositorio (esto no es realmente necesario, pero no tendrá precio durante el desarrollo).

Así es como debería verse el archivo:

[Oo]bj/
[Tt]emp/
[Ll]ibrary

#These are files in the root folder of the project
*.tmproj
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.pidb
*.userprefs
cchomiak
fuente
Esto es casi el mismo que el .gitingoreuso que para los proyectos de la unidad, pero con algunas omisiones: [Bb]uild/, *.booproj, sysinfo.txt. Estoy bastante seguro de que lo que uso se basa en las plantillas de nuevo repositorio de GitHub para Unity ( github.com/github/gitignore/blob/master/Unity.gitignore ) cualquier Objective-C (cuando se dirige a iOS).
Slipp D. Thompson
Error interno del servidor en tu blog.
Santosh Kumar
4

Unity 3.0 está configurado para jugar bien con subversion. (Al menos mejor que antes) No sé si esto es solo en la versión pro o no, tendré que comprobarlo.

Sin embargo, en general, el sistema de control de versiones más recomendado es el Unity Asset Server.

Jesse Dorsey
fuente
4

Unidad específica: trabaje en diferentes escenas y diferentes archivos de código en todo momento, y combine los cambios de la otra persona manualmente. Si ambos necesitan trabajar en la misma escena, duplíquela y use la copia como prueba. De lo contrario, si ambos modifican la misma escena, los cambios de una persona sobrescribirán a la otra. Todavía puede usar el control de origen para sus archivos de origen, simplemente no los mueva, en el sistema de archivos o mediante Unity, una vez que se hayan creado.

Consejo para principiantes: consiga una herramienta de fusión / fusión decente (me gusta WinMerge ) y acostúmbrese a usarla para ver qué cambios realizó la otra persona y para fusionar manualmente los cambios en archivos en conflicto. Configurar un espacio central de documentación, por ejemplo. un documento de escritura de Google o un wiki, y mantenga su documentación allí; la documentación debe contener una lista básica de funciones como mínimo para que sepa a qué apunta, e idealmente una lista de tareas derivada de la lista de funciones, junto con una indicación clara de quién está trabajando en la tarea. Hablen entre ellos para tener una idea aproximada de quién necesita trabajar en qué tarea y tacharlos de la lista a medida que se realizan. Siga revisando y reevaluando la lista para ver si todo sigue siendo válido y si necesita modificar alguna prioridad.

Kylotan
fuente
¡Gracias! Me diste buenos consejos sobre mis dos problemas.
nosferat
4

Trabajo con un equipo que se llama Defective Studios. Hemos luchado con el mismo problema durante años, y recientemente me rendí y comencé a escribir una extensión para ayudarme a fusionar los objetos del juego.

Básicamente, el enfoque consiste en crear una interfaz similar a un inspector en una ventana que alinee cada objeto del juego, componente y propiedad uno al lado del otro para comparar, y proporcione botones para copiar valores (u objetos completos) de un lado a otro. Si está familiarizado con la SerializedPropertyclase, eso es lo que está haciendo la mayor parte del trabajo aquí. Básicamente creamos una GUI que sincroniza el estado desplegable entre el lado derecho e izquierdo, y crea espacio vertical donde GameObjectsea ​​queComponentexiste solo en el lado derecho o izquierdo. Una función de comparación verifica la igualdad en cada nivel y convierte el fondo de cada línea en rojo o verde según el estado de la igualdad. Cualquier línea cuyos hijos contengan una diferencia también se volverá roja, y también incluimos un ingenioso botón para buscar recursivamente el árbol y expandir todos los objetos que son diferentes o tienen diferencias en sus hijos.

Además, hay un conjunto de campos de máscara que le permiten filtrar ciertos tipos de componentes fuera de la comparación. También se comparan atributos de GameObject como nombre, capa y etiqueta. Usamos SerializedObjecty SerializedPropertypara recorrer las gameObjectpropiedades de 's, y dibujarlas tal como están dibujadas en el inspector. ¡Esto asegura la consistencia y es muchísimo más fácil de codificar!

ingrese la descripción de la imagen aquí

Un último detalle ingenioso es que el proceso de comparación (que se activa cuando se cargan los objetos y cada vez que se realiza un cambio) se ejecuta en una rutina ad-hoc que la EditorWindow.Updatefunción actualiza , de modo que en caso de que esté comparando un objeto enormemente complicado, la ventana no bloquea el editor. Esto era imprescindible al comparar objetos con cientos (¡o mil!) De niños. En general, fue una especie de "proyecto de lego" como le gusta decir a mi amigo, pero definitivamente una herramienta invaluable que instantáneamente se convirtió en parte de nuestro flujo de trabajo de colaboración.

La herramienta, Unity Merge está documentada en la wiki de Unify, que incluye una hoja de ruta y una dirección de correo electrónico para comentarios e informes de problemas. Si realmente estás luchando con una fusión complicada, pruébalo y dinos lo que piensas. Además, no me molesté en construirlo en una DLL, así que siéntase libre de buscar en la fuente. La implementación y las SerializedPropertymanipulaciones de rutina ad-hoc , así como algunos trucos GUI que terminé necesitando son una gran parte de su kit de herramientas de extensión del editor. Estoy muy interesado en los cambios / mejoras que los usuarios puedan tener, ¡así que póngase en contacto!

bollo
fuente
1
Suena como una herramienta útil, gracias por mejorar su respuesta anterior de "solo enlace".
MichaelHouse
1

Si tiene los fondos para ello, el servidor de activos con la versión pro de Unity es bastante decente. Lo he usado en un gran proyecto para varias personas en el pasado e hizo el trabajo. Para el control de versiones vanilla, hizo lo que esperábamos que hiciera.

Intenté usar un repositorio SVN con un proyecto de Unity y fue un poco complicado. Sin embargo, terminamos desechando la idea antes de ponerla a trabajar. Unity guarda muchos archivos de respaldo que no quería tomarme el tiempo para descubrir qué sucedería si no estuvieran sincronizados con el servidor. Creo que, con un poco de delicadeza, podría ser factible, pero no he tenido experiencia trabajando bien.

He realizado un pequeño proyecto utilizando las funciones gratuitas de DropBox. Me puso nervioso pero nunca tuvimos problemas. Y, no creo que terminemos necesitando ningún material de control de versión real para ese proyecto, así que no puedo hablar mucho sobre cómo habría sido la reversión o fusión de archivos.

técnico del caos
fuente
1

Dropbox admite el control de versiones por archivo (en lugar de por confirmación) y funciona muy bien con Unity. Inicialmente es gratis (2 gigabytes) y bastante barato después (alrededor de $ 10 por 50 gig). Necesita el complemento PackRat para tener acceso al historial de versiones.

Al igual que con SVN, CVS, GIT, etc., deberá asegurarse de crear carpetas de etiquetas cuando llegue a cada etapa clave del desarrollo (por ejemplo, fin de semana, fin de hito). A diferencia de lo mencionado anteriormente, será mucho más difícil volver a esa etapa si no lo hace, porque tendría que revertir cada archivo individualmente. Tenga esto en cuenta mientras desarrolla y tendrá un tiempo fácil sin pagar por el servidor de activos.

Ingeniero
fuente
Sin embargo, esto es muuuy doloroso. Unity tiene que reconstruir la escena cada vez que la abres en una computadora diferente. Esto cambia la carpeta de la biblioteca en muchos lugares para cada confirmación. Ignorar la carpeta de la biblioteca sería bueno, pero entonces no tendrías archivos de escena controlados por la versión. Mi equipo se rindió y compró un montón de licencias profesionales y usó un servidor de activos.
brandon
@brandon Supongo que depende del tamaño del proyecto.
Ingeniero
1
Definitivamente, si se trata de un par de desarrolladores con un presupuesto limitado, sugeriría su enfoque, ya que es realmente el único
Brandon
Pero, ¿alguna vez has trabajado en un proyecto que se mantiene por debajo de 2 gb? ¿Qué pasa con los modelos y texturas que se incluirán? ¡Eche un vistazo a bitbucket.com y comience a aprender git!
XandruCea
Absolutamente. Los proyectos de Android / iOS definitivamente se mantienen muy por debajo de ese tamaño en mi experiencia (durante el año que escribí esta respuesta). Además, puedes ganar más espacio en Dropbox invitando a amigos.
Ingeniero