Cubix

Curso de Unity 3D

20.  
23.  
25.  
39.  

1. Creamos la carpeta Prefabs.

2. Dentro de la carpeta Prefabs, creamos el Prefab de un cubo.

3. Creamos la carpeta Scripts.

4. Creamos un GameObject Empty con el nombre GameManager y le asociamos un script que también se llamará GameManager.

3. Dentro del script GameManager, creamos la variable pública de tipo GameObject cubePrefab, y arrastramos el prefab del cube sobre dicha variable en el Inspector.

4. Instanciamos un cubo:

Instantiate(cubePrefab, Vector2.zero, Quaternion.identity);

5. Declaramos una constante con valor 5 llamada size. Utilizamos un bucle for para instanciar los 5 cubos indicados en la variable size. Comprobamos en el panel de jerarquía que los cubos se han creado.

6. Utilizando la siguiente línea:

go.transform.Translate(Vector3.right * i);

desplazamos hacia la derecha cada uno de los cubos que vamos creando.

7. Anidamos otro bucle for dentro del primer bucle for para generar una pared de cubos.

Para desplazar los cubos, usaremos el siguiente código:

go.transform.Translate(Vector3.right * i+ Vector3.up*j);

8. Anidamos otro tercer bucle for para generar un cubo de cubos.

9. Vamos a cambiar el color de cada uno de los cubos.

go.GetComponent<Renderer>().material.color = Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f);

10. Añadir el código necesario para que aleatoriamente algunos cubos no se dibujen.

11. Vincular todos los cubos a un Empty padre:

go.transform.SetParent(cubes.transform);

12. Cuando el usuario pulse la tecla flecha izquierda, rotaremos el cubo hacia la izquierda.

Vector3 posIni;
Controls controls;

enum Controls{
       idle,
       up,
       down,
       right, 
       left,
}
void Start(){
       posIni = new Vector3(2f, 2f, 2f);
       ...

void Update(){
       if (Input.GetKey(KeyCode.LeftArrow)){
            controls = Controls.left;
       }
       ...
       Move();
}

void Move(){
        if(controls == Controls.left){
            cubes.transform.RotateAround(posIni, Vector3.up , speed * Time.deltaTime);
        }
        ...
}

Multiplicar por Time.deltaTime es necesario para que el movimiento se ajuste al reloj en lugar de a la frecuencia de acualización (para que funcione en todos los ordenadores igual).

13. Instanciamos una pelota, le asociamos un RigidBody y la ubicamos en las coordenadas size/2, size+1, size/2.

14. Añadimos una plataforma debajo del cubo que es a donde queremos llegar con la pelotita. Cuando la pelota colisione contra ella, la plataforma se pintará de verde:

private void OnCollisionEnter(Collision collision){
     if(collision.gameObject.tag == "Finish"){    
          collision.gameObject.GetComponent<Renderer>().material.color = Color.green;
     }
}

Tenemos los callbacks: OnCollision… y OnTrigger… para detectar colisiones

15. Meter un punto de luz (Light → point light) a la bola.

← Galería de tiro con Unity3D
Flappy Bird con Unity →

Aviso Legal | Política de privacidad