GameObjects Estáticos
Instanciando Prefabs en tiempo de ejecución

Prefabs

Es conveniente construir un GameObject en la escena añadiendo components y ajustando sus propiedades al valor apropiado. Esto puede crear problemas, sin embargo, cuando se tiene un objeto como un NPC, prop o pieza de escenario que sea reutilizado en la escena varias veces. Simplemente copiando el objeto sin duda producirá duplicados, pero, estarán editados independientemente. Generalmente, usted quiere que todas las instancias de un objeto en particular tengan las mismas propiedades, para cuando se edite un objeto en la escena, usted preferirá no tener que hacer la misma edición repetidamente a todas las copias.

Afortunadamente, Unity tiene un Prefab tipo de asset que le permite almacenar un objeto GameObject completamente con components y propiedades. El prefab actúa como una plantilla a partir de la cual se pueden crear nuevas instancias del objeto en la escena. Cualquier edición hecha a un prefab asset será inmediatamente reflejado en todas las instancias producidas por él, pero, también se puede anular components y ajustes para cada instancia individualmente.

Tenga en cuenta: Cuando se arrastra un archivo asset (eg, un mesh) a la escena, se creará una instancia nueva del objeto y todas esas instancias serán cambiadas cuándo el asset original sea cambiado. No obstante, aunque su comportamiento es superficialmente similar, el asset no es un prefab, entonces no podrá agregar components a él o hacer uso de las demás características del prefab descritas abajo.

Usando Prefabs

Usted puede crear un prefab seleccionando Asset > Create Prefab y luego arrastrando un objeto de la escena al prefab asset “vacío” que aparezca. Si usted luego arrastra un GameObject diferente al prefab, se le preguntará si usted quiere remplazar su gameobject actual con el nuevo. Simplemente arrastrando el prefab asset de la vista del proyecto a el scene view se va a crear instancias del prefab. Objetos creados como instancias de prefab van a ser mostrados en la vista de Jerarquía en texto azul (objetos normales son mostrados en texto negro).

Como se menciona arriba, cambios al prefab asset en sí mismo serán reflejados en todas las instancias, pero también se puede modificar instancias individualmente por separado. Esto es útil, digamos, cuando se quiere crear varios NPCs similares pero introducir variaciones para hacerlas más realistas. Para que quede claro, cuando una propiedad ha sido anulada, es mostrada en el inspector con el nombre de su etiqueta en negrilla. (Cuando se añade un componente completamente nuevo de una instancia de un prefab, todas sus propiedades van a ser mostradas en negrilla.)

Un Mesh Renderer en una instancia prefab con Cast Shadows anulado
Un Mesh Renderer en una instancia prefab con “Cast Shadows” anulado

Usted también puede crear instancias de prefabs en el tiempo de ejecución desde sus scripts. Vea la página del manual acerca de Instantiating Prefabs para más detalles.

Editando un Prefab desde sus Instancias

El Inspector para una instancia de un Prefab tiene tres botones que no están presentes en los objetos normales: Select, Revert y Apply.

El bóton Select selecciona el prefab asset a partir del cual se generó la instancia. Esto le permite editar el prefab principal y por lo tanto cambiar todas las instancias. Sin embargo, también puede guardar valores anulados de una instancia de nuevo al prefab original usando el botón Apply (valores de la posición y rotación del Transform son excluidos por razones obvias). Esto efectivamente le permite editar todas las instancias vía cualquier instancia única, y es una manera muy rápida y conveniente para hacer cambios globales. Si usted experimenta con propiedades anuladas, pero decide quedarse con los valores predeterminados, puede utilizar el botón Revert para realinear la instancia con su prefab.

GameObjects Estáticos
Instanciando Prefabs en tiempo de ejecución