Instanciar un objeto en Unity 3D

Curso de Unity 3D

21.  
40.  

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Instanciar un prefab

¿Qué es un prefab?

Un prefab es un GameObject que puede agrupar a su vez varios GameObjects, Scripts, assets, etc y que está empaquetado y prepararado para ser reusado.

Técnicamente, un prefab debe ser un único objeto, por lo que si quisieramos que el prefab constase de varios objetos, deberíamos agruparlos en un empty.

Para crear el prefab, lo arrastraremos del panel de jerarquía, donde lo hemos estado elaborando, hasta el panel de proyecto.

Si tengo varias instancias de un prefab y modifico una de ellas, pulsando el botón apply en el panel inspector, estas modificaciones se aplicarán al resto de prefabs. Si no pulso aplicar, la modificación será únicamente para ese prefab.

Crearemos un prefab arrastrando el objeto deseado desde el panel de jerarquía hasta el panel de proyecto.

Dos formas de instanciar un prefab

  • Crear una propiedad pública de tipo GameObject en un script vinculado a un objeto y arrastrar el prefab desde el panel de proyecto al panel de jerarquí en el que se encuentra dicha propiedad. GameObject nuevoMisil = Instantiate(misilPr4efab, new Vector2(0,0), Quaternion.identity);
 Instantiate(misilPrefab, Vector2.zero, Quaternion.identity);
  • Almacenar el prefab en la carpeta Resources y utilizar su nombre para instanciarlo:
GameObject word1 = Instantiate(Resources.Load("Misil"), Vector2.zero, Quaternion.identity) as GameObject;

De esta forma, podemos cargar cualquier tipo de recurso a partir de su nombre

go.GetComponent<Image> ().sprite = Resources.Load<Sprite>(ruta-sin-poner-la-carpeta-Resources-y-sin-ponerle-la-extension-a-la-foto);

Coordenadas en jerarquías

Cuando tenemos una jerarquía (al hacer un prefab, por ejemplo) en la que hay un padre no visual (un empty, por ejemplo) y uno o varios hijos que si se ven (un cubo, por ejemplo), intentamos siempre ubicar al padre el centro de los hijos.

  • Si sólo hay un hijo, este estará en sus coordenadas 0,0,0.
  • Si hay varios hijos, deberían orbitar alrededor del punto 0,0,0 del padre.
Alinear objetos
Alinear objetos
Alinear objetos

Crear un GameObject y añadirle propiedades dinámicamente

El siguiente ejemplo instancia una imagen en pantalla ubicada dentro de la carpeta Resources.

public class SpriteGenerator : MonoBehaviour{
    public SpriteGenerator(int n){
        this.n = n;
        GameObject objetoContenedor = new GameObject("Nuevo objeto");
        SpriteRenderer spr = objetoContenedor.AddComponent();
        spr.sprite = Resources.Load("pieces/gafas");

    }
}

Diferencia entre marcar o no marcar la check isTrigger de un BoxCollider.

  • Cuando la check está marcada, los objetos que colisionan se superponen durante la colisión, pasando uno por encima de otro. El código que usamos para gestionar estas colisiones es similar a este:
void OnTriggerEnter2D(Collider2D col){
}
  • Cuando la check no está marcada, los objetos que colisionan impactan entre sí.
void OnCollisionEnter2D(Collision2D col){
}

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.