TRABAJANDO A LA PAR SOBRE UNIVERSOS PARALELOS (Branches)

Otra forma que tenemos de crear universos paralelos en nuestro proyecto son los llamados “branches” (ramas). La idea de esto es permitirnos tener nuestra línea de tiempo principal, estable y funcional, y cada vez que vamos a agregar una feature nueva a nuestro juego poder seguirla sin ensuciar la línea de tiempo principal. O sea, podemos trabajar en una parte de nuestra línea de tiempo, en otro lado, obtener resultados y fusionar esos resultados con los de la línea de tiempo principal.

Quizás si lo ven con algún ejemplo, lo van a entender mejor. Para empezar, busquen arriba, en SourceTree, el botón llamado “Branch“, y presiónenlo.

 

 

Este botón les va a abrir una ventana con la siguiente información para la creación de un nuevo “universo” (branch).

 

 

Lo que va a hacer esto es sacar una rama nueva que va a nacer desde el branch donde estemos parados actualmente. Como la única rama/universo/realidad que tenemos es “master” la va a sacar desde ahí. Vamos a ponerle como nombre “InterfazGrafica” y hacemos click en el botón “Create Branch“. De esta manera van a ver que a partir de ese momento, van a estar parados sobre esa línea de tiempo que acaban de crear, y desde ahora vamos a estar trabajando sobre una nueva historia, cuyo presente y pasado es idéntico al de la línea de tiempo principal, que fue de donde partimos.

 

 

Mayoritariamente, si trabajan solos, van a crear un branch sólo por una cuestión de prolijidad. Esta herramienta es muchísimo más útil trabajando en equipo, ya que una persona podría crear un universo paralelo (branch), para trabajar en la interfaz gráfica del juego, mientras otra persona trabaja en la programación de los personajes. Para les doy unos consejos basados en mi experiencia personal más que nada:

  • Ningún branch debería tocar nada respecto de lo que se va a estar modificando en otro, ya que esto complica un poco las cosas al combinar todo en el universo principal (merge).
  • No deberían esperar a tener 23241 commits de historia para cerrar el branch y fusionarlo con el branch principal, ya que si algo sale mal es mucho más difícil arreglarlo.
  • Los branches son gratis. Peeeeeeero, esto no debería significar que deben crear la cantidad de branches que quieran. Recuerden que puede ser peligroso crear un montón de universos paralelos y después mantenerlos.
  • Traten lo más que se pueda de que un branch, a mitad del desarrollo del mismo, no depende de toda o parte de la historia que tiene otro branch. Por ejemplo: Si crean un branch para meter sonidos, y luego se dan cuenta de que para eso necesitan el código que reproduce sonidos de otro branch, quizás crearon ese branch demasiado temprano. Al crear un branch, el mismo debería nacer ya con todo lo necesario.

Tengan en cuenta estas cosas al momento de pensar en crear un branch nuevo. Por supuesto, hay muchas formas de uso y manejo, sólo les transmito las que me parecen mejores acorde mi experiencia.

A continuación vamos a crear unos botones simples, guardar la escena y continuar avanzando. La escena quedaría así:

 

 

Al guardar la escena, vamos a ver que en SourceTree nos aparece de la siguiente manera:

 

 

Agreguen al área de “Stage” la escena y commiteenla (si llegaron a hasta acá, debería ser fácil que lo hagan solos). Y nos quedaría de esta forma:

 

 

Ahora hagan doble click en “master“. Esto va a hacer que volvamos a la rama principal nuevamente. Les debería quedar así:

 

 

Ahora, vamos a crear otro branch llamado “Gameplay“. Este branch lo vamos a crear para programar un script simple, relacionado con el gameplay de un juego. La idea es hacer algo en ambos branches, y después fusionarlos para que veamos qué pasa y cómo queda. Voy a omitir el proceso de creado como para que lo hagan solos y de paso practiquen. Les debería quedar así:

 

 

Ahora que ya tenemos el branch creado, volvamos a Unity y veamos qué pasa. Van a notar que Unity se va a recargar, y la escena de los botones que habíamos hecho DEBERÍA desaparecer. Por qué? Porque esa escena está en otro universo (llamado “InterfazGrafica“). Así que todo lo que hayamos hecho en esa escena, ahí se va a quedar por el momento. Lo que vamos a hacer a continuación es programar algo simple como para que una caja haga algo como girar y nada más. Vamos a utilizar para esto el script que habíamos creado llamado “HeroController” y vamos a agregarle algo de código para que una caja gire. Pero antes, creamos la caja. Para ello creen una caja cualquiera en la escena, en el punto (0, 0, 0), y con escala (2, 2, 2). Luego, guarden la escena con el nombre que gusten, por ejemplo: “MovimientoCaja“.

 

 

Ahora vamos a programar algo simple para que rote dentro de ese script. Algo como:

 

using UnityEngine;

public class HeroController : MonoBehaviour
{
    public float rotationSpeed;
    
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(rotationSpeed * Time.deltaTime,
                         rotationSpeed * Time.deltaTime,
                         rotationSpeed * Time.deltaTime);
    }
}

 

Volvemos a Unity y le arrastramos ese script a nuestra caja. Le ponemos una velocidad que gusten, y le damos play una vez para ver si funciona:

 

 

Bien. Ahora guardamos, y volvemos a SourceTree. Deberíamos ver algo como lo siguiente:

 

 

Commiteen esto, y por fin ya tenemos dos branches, con dos cosas completamente diferentes.

 

 

Ahora hagan, de nuevo, doble click en “master” y volvamos al branch principal. Deberíamos ver lo siguiente:

 

 

Hay una columna llamada “Graph” que les va a ir dibujando el esquema de branches de su proyecto. Si esto ramifica demasiado y hacia muchos lados, quizás deberían pensar una organización diferente para sus branches. La idea es que quede lo más entendible posible, más que nada porque sino después ustedes no van a entender nada de lo que está pasando. Si el dibujo es claro, pueden notar cómo fue que se dividieron los “universos” y, en el caso de tener problemas, también es una ayuda para encontrar qué fue lo que pudo haber salido mal.