Introducción

En un proyecto colaborativo, al iniciar especialmente puede que mucho trabajo se haga sobre las mimas escenas y si el proyecto utiliza un control de versiones puede llevar a que haya muchas colisiones y se tenga que escoger el trabajo de una u otra persona.

Por ejemplo si dos personas estan trabajando sobre la escena 1 y quieren agregar diferentes assets o uno cambia las coordenadas mientras otro agrega uno nuevo se puede generar un conflicto.

Usando escenas como layers

para poder manejar esto de una manera satisfactoria se puede utilizar la funcionalidad de cargar un nivel de manera aditiva. Por ejemplo en el caso anterior, para modificar el tamaño se tendría que modificar la sub-escena original, mientras que la otra persona, agrega un nuevo “layer” por lo tanto no hay posibilida de entrar en colisión.

La función de Application.loadedLevelName retornara el nombre de la escena principal que se esta ejecutando, no de las que se agreguen poco a poco. Por lo mismo cada nivel al mismo tiempo funcionando como un layer dentro del mapa, pero esto introduce otros problemas como:

  • Como se eliminan los assets de un layer específico
  • De donde viene un gameobject en la escena

Sin embargo, hay una forma muy sencilla de eliminar estos inconvenientes y es la siguiente:

  • por cada escena se crea un root en 0, 0, 0 y se le llama root_nombre_escena.

Lo cual dejará saber de donde viene cada elemento y también te dejará eliminar todos o un elemento en específico.

Aun así es necesario agregar cada capa a nivel de programación con Application.LoadLevelAdditive o LoadLevelAdditiveAsync aunque esto se puede solucionar un C# que lea las “capas” desde un archivo en el juego.

Construyendo la escena final

Usando layers se pueden hacer prototipes de una manera más sencilla, por ejemplo, agregando paulatinamente:

  • controles
  • enemigos tipo 1
  • enemigos tipo 4
  • meta intermedia 3
  • objetivo final
  • assets paquete 1
  • assets paquete 7

Al mismo tiempo al cada layer tener un nombre es más descriptivo que forma cada escena.

Y una vez que se tiene la escena final, si ya no se quiere cargar aditivamente, se puede crear la escena final, sin el paso de agregado aditivo.

Ventajas

  • Siempre se puede agregar nuevo contenido sin pegarle al trabajo de las otras personas
  • Siempre se puede eliminar una de las escenas sólo en su carga, sin tocar la escena final (y aun mantener el layer sin borrar, por ejemplo, en lo que se corrige una parte del mismo)
  • Se reducen las colisiones por modificar la misma escena distintas personas y es más dificil que dos personas modifiquen el “mismo layer” al mismo tiempo.
    • En caso de colisión, sólo se tiene que hacerle merge a un sólo layer.
  • Se puede construir una escena final cuando se tenga la misma porque se tienen las partes.

Conclusión

Haciendo el uso de mini escenas para simular layers debe de facilitar a un grupo relativamente grande trabajar en la misma escena, al estar este hecha de partes más pequeñas es más difícil entrar en una colisión con la modificación de la misma y al final cuando sea una escena final, si se desea se puede generar el “mapa final” ya que se tienen todos los componentes.