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?
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?
Respuestas:
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.
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
.gitingore
uso 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).
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.
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.
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 SerializedProperty
clase, 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 GameObject
sea queComponent
existe 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 SerializedObject
y SerializedProperty
para recorrer las gameObject
propiedades 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!
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.Update
funció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 SerializedProperty
manipulaciones 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!
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.
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.