Está en la página 1de 10

El 2D destructible funciona combinando el Tex principal con el Alpha Tex actual.

Por defecto, los


sombreadores en Unity no usan un Alpha Tex separado, así que si

Si desea utilizar sombreadores personalizados, deberá realizar algunas modificaciones simples en


ellos.

Paso 1 Actualice las propiedades de su sombreador

En el bloque de propiedades del sombreador {...}, debe agregar las siguientes propiedades
[PerRendererData] _AlphaTex ("Alpha Tex", 2D) = "white" {}
[PerRendererData] _AlphaScale ("Alpha Scale", Vector) = (1,1,0,0)
[PerRendererData] _AlphaOffset ("Alpha Offset", Vector) = (0,0,0,0)
[PerRendererData] _AlphaSharpness ("Alpha Sharpness", Float) = 1.0

Paso 2 Actualiza tus declaraciones de variables

En la sección de variables de su sombreador (por ejemplo, donde debería tener sampler2D


_MainTex; o similar), agregue las siguientes variables:
sampler2D _AlphaTex;
float2 _AlphaScale;
float2 _AlphaOffset;
float _AlphaSharpness;

Paso 3 Actualiza tu fragmento o función de superficie

Dentro de su función de fragmento, p. fixed4 frag (v2f IN): SV_Target {…}

O función de superficie interior, p. void surf (Input IN, inout SurfaceOutput o) {…}

Necesitas multiplicar tu alfa final de esta manera:


float2 alphaUV = (i.texcoord _
AlphaOffset) * _AlphaScale;
float4 alphaTex = tex2D(_AlphaTex, alphaUV);
myFinalColour.a *= saturate(0.5f + (alphaTex.a 0.5f) * _ Alpha Sharpness);
return myFinalColour;

o así:
float2 alphaUV = (i.texcoord _
AlphaOffset) * _AlphaScale;
float4 alphaTex = tex2D(_AlphaTex, alphaUV);
o.Alpha *= saturate(0.5f + (alphaTex.a 0.5f) * _AlphaSharpness);

NOTA: Asegúrese de hacer esto DESPUÉS de configurar el valor alfa inicial, de lo contrario se
sobrescribirá.

NOTA: Asegúrese de que la variable UV (p. Ej., I.texcoord) sea correcta, ya que puede cambiar
según el sombreador.

¿Por qué está todo compensado? (por ejemplo, D2D Click To Spawn va al lugar equivocado)
Asegúrese de que la configuración de "Proyección" de su cámara esté establecida en "Ortográfica"

¿Cómo aumento el rendimiento?

Haga clic en el menú contextual (icono de engranaje) para su componente D2dDestructible y


seleccione la opción "Optimizar alfa".

Esto reducirá a la mitad el ancho y la altura de su Alpha Tex, dándole un rendimiento 4 veces
mayor, pero una resolución alfa ligeramente degradada.

¿Cómo restablezco la destrucción en mi objeto?

Haga clic en el menú contextual (icono de engranaje) para su componente D2dDestructible y


seleccione la opción "Restablecer alfa". También puedes llamar a esto desde el código

usando el mismo nombre de método

¿Cuál es la diferencia entre Auto Collider, Edge Collider y Polygon Collider?

El colisionador automático utiliza la función incorporada de Unity

código de generación de colisionador de polígonos, que puede ser más rápido para objetos
pequeños. Sin embargo, la colisión le da forma

los productos no son muy precisos, por lo que no querrá usarlos para nada importante.

Los colisionadores de borde y polígono usan un código de generación de colisionador


personalizado que es mucho más preciso que la implementación de Unity. El colisionador de
bordes

Es adecuado para objetos estáticos, como terrenos. El colisionador de polígonos es adecuado para
objetos dinámicos, como los asteroides. Ambos componentes

divide el objeto Destructible en celdas pequeñas, por lo que modificar el colisionador (por
ejemplo, al destruir partes de él) es muy rápido.

¿Por qué no reemplazar Alpha con funciona correctamente?

Si su objeto Destructible se creó a partir de un sprite y ese sprite tiene muchos píxeles
transparentes alrededor, es posible que el Destructible

El objeto creado será más pequeño que el sprite real. Esto significa que si arrastra y suelta su
sprite original en el "Reemplazar alfa con"

Ranura Texture2D, luego se reemplazará incorrectamente. Para solucionar esto, debe arrastrarlo y
soltarlo en la ranura de Sprite, que hará esta misma comprobación para

píxeles transparentes alrededor de tu sprite. Si su textura de reemplazo no es un sprite (por


ejemplo, si tiene un sprite y alfa tex separados), entonces

debería convertirlo en un sprite primero.

Paso 1 Hacer
un sprite

Para hacer un sprite en Unity, simplemente arrastre y suelte un archivo de textura (por ejemplo,
Asteroid.png) en su carpeta de Activos.

Seleccione su textura recién importada y cambie la configuración Tipo de textura a Sprite.

Presiona Aplicar, y tu textura ahora debería ser un sprite.

Paso 2 Agregar

Tu Sprite a la escena

Una vez que haya creado un sprite en la ventana Proyecto, simplemente arrástrelo y suéltelo en la
ventana Escena o en la ventana Jerarquía.

Ahora debería ver un GameObject con un componente Transform y Sprite Renderer.

Paso 3 hacer

¡Destructible!

Simplemente abra el menú contextual (icono de engranaje) en su componente Sprite Renderer y


seleccione Make Destructible (Preset: Dynamic Splittable).

Paso 4 golpe

¡Cosas arriba!

Seleccione su cámara principal y agregue el componente Destructible 2D / D2D Click To Spawn, y


elija el prefab "Explosión roja" que viene

con D2D Ahora, si tocas jugar, ¡deberías poder hacer clic para volar tu sprite destructible!

NOTA: La configuración de Proyección de su cámara debe establecerse en Ortográfica para que


Destructible 2D funcione como se espera.

Para formas más avanzadas de hacer estallar cosas, eche un vistazo a las escenas de ejemplo.
Auto Collider
Este componente le permite usar la función integrada de Unity

PolygonCollider2D generación con objetos destructibles.

Es disparador

Esto le permite configurar la propiedad Is Trigger de los colisionadores generados.

Material

Esto le permite establecer la propiedad Material de los colisionadores generados.

Calculate Mass
Por defecto, un Rigidbody2D tiene una masa fija, pero a medida que destruya más y más querrá
que tenga menos masa, por lo que debe agregar esto

componente.

Masa por píxel sólido

Esto le permite establecer la cantidad de masa asignada a cada píxel sólido.

Collision Handler
Debug Collisions

Si habilita esto, la información de colisión se mostrará en la consola.

Máscara de impacto

Esto le permite establecer a qué capas de colisión responderá este componente.

Umbral de impacto

Esto le permite establecer qué tan fuerte debe ser el impacto para que se registre un impacto.

Retardo de impacto

Esto le permite establecer el retraso mínimo entre cada impacto en segundos.

Por ejemplo: si configura esto en 1.0, solo responderá a los impactos una vez por segundo.

Daño en el impacto

Habilítelo si desea que los impactos causen daños al D2dDestructible adjunto.

Daño Destructible
El D2dDestructible al que quieres aplicar daño.

Escala de daño

El multiplicador de daño basado en la velocidad del impacto.

[EVENTO] En Impacto (punto Vector2)

Esto se invoca cada vez que algo golpea este colisionador.

Destroyer
Este componente destruye automáticamente el objeto de juego actual después de un cierto
período de tiempo y le permite atenuar o reducir el tamaño del objeto a medida que muere.

Este componente generalmente se usa junto con el componente D2dRequirements para destruir
automáticamente un objeto una vez que alcanza cierto

nivel de destrucción

Vida

La cantidad de segundos restantes hasta que el GameObject actual se destruya.

Desvanecerse

¿Desvanecer la actual destructible?

Duración de desvanecimiento

La cantidad de segundos que tarda en desaparecer.

Encogimiento

¿Reducir la corriente destructible?

Duración del encogimiento

La cantidad de segundos que tarda en reducirse.

Destructible
Este es el componente 2D Destructible principal: convierte automáticamente un Unity Sprite normal en una
versión destructible.
La forma en que funciona es que almacena la textura original de su sprite y también almacena los datos alfa
(transparencia) por separado. Entonces cuando destruyes
el sprite destructible, en realidad modifica los datos alfa que luego se combinan con la textura original, lo que
le permite ver el daño
versión de la misma.
Indestructible
Si habilitas esto, entonces este destructible no puede recibir daño.
Grabar cuenta alfa
Si habilita esto, se calculará el campo "Recuento alfa original". Esto le da acceso a la propiedad "Alfa
restante", que permite
para ver cuántos píxeles quedan desde la última vez que se restableció el alfa de su sprite.
Enfoque automático
Cada vez que "Optimizar Alfa" o "Reducir a la mitad Alfa", el Alpha Tex reducirá a la mitad su tamaño. Si
habilita esta configuración, la "Nitidez" aparecerá
se modificará automáticamente para tener en cuenta esta diferencia en la resolución.
NOTA: La configuración real de "Nitidez" no cambiará, solo lo que está configurado en el sombreador.
División automática
Si habilita esto, lo destructible se dividirá automáticamente en varias partes cuando cree "islas" de píxeles en
los datos alfa.
Una isla de píxeles es un grupo de píxeles que están completamente desconectados de cualquier otro píxel en
el objeto destructible.
Split Expand
Esta configuración le permite establecer a qué distancia del área previamente destruida se comprobará si hay
islas de píxeles. Un valor de -1 forzará la
objeto destructible completo para ser revisado.
Por ejemplo, si destruye solo el píxel en la coordenada 40,40, y esto se establece en 10, entonces el área entre
los píxeles 30..60 en ambos ejes será
ser buscado por las islas de píxeles.
Esta configuración es muy útil si solo necesita cortar pequeñas partes de un objeto destructible más grande.
Split Pixels Min
Si hace que un sprite se pueda dividir, esta configuración le permite establecer cuántos píxeles se requieren en
cada "isla" para que se cree realmente.
Por ejemplo, si recorta una "isla" de 20 píxeles y su "Píxeles divididos mínimos" se establece en 50, entonces
se eliminará el área cortada.
de tu escena por completo. Si tuviera que reducir ‘Píxeles de división mínimos’ a 10, entonces esta área
fragmentada se creará como un elemento separado
objeto destruible
Pluma partida
Por defecto, los objetos divididos tienen bordes muy afilados / alias. Si prefiere conservar la suavidad antes de
que se dividiera, habilítelo.

Tex principal
Esto le permite establecer la textura principal de su objeto destructible.
Tex de densidad
Esto le permite establecer qué tan difícil es destruir ciertos píxeles en sus datos alfa.
Curar Tex
Al estampar un D2dDestructible puede usar un valor de dureza negativo, esto hace que el sello sane el Alpha
Tex. Esta configuración permite
para establecer el nivel máximo al que se puede curar cada píxel, y normalmente debe coincidir con el Alpha
Tex original.
Nitidez
Esto le permite establecer qué tan nítida es la transición entre píxeles sólidos y transparentes.
Dañar
Esto le muestra la cantidad actual de daño que este objeto ha recibido.
El daño se puede infligir por los impactos si agrega el componente "Daño en colisión" o el componente
"Explosión".
Alpha Tex
Esto le permite ver cómo se ven los datos alfa actuales.
Alpha Count
Esto le permite ver cuántos píxeles sólidos quedan actualmente.
Un píxel sólido es aquel que tiene un valor alfa igual o superior a 0,5 o 128.
Cuenta alfa original
Esto le permite ver el "Recuento alfa" la última vez que se restablecieron los datos alfa. Tenga en cuenta que
esto requiere el campo "Record Alpha Count"
para configurar, porque calcular el "Recuento alfa" lleva un poco de tiempo para calcular, por lo que si no
necesita saber esto, puede guardar algunos
rendimiento deshabilitándolo.
Alfa restante
Esto le permite ver el porcentaje de píxeles sólidos restantes. Tenga en cuenta que esto requiere que se
configure el campo "Grabar recuento alfa".
Reemplazar
Con
Si arrastra y suelta un Sprite o Texture2D aquí, puede reemplazar todo el componente con nuevos datos.
Tenga en cuenta que Texture2Ds no tiene información de tamaño, por lo que se tratarán como 1 píxel = 1
unidad.
Textura con
Si arrastra y suelta un Sprite o Texture2D aquí, puede restablecer el Tex principal.
Esto es útil si desea que lo destructible mantenga la misma forma de colisión, pero cambie la imagen. Por
ejemplo, si tienes múltiples
variaciones de textura de objetos destructibles, entonces puede llamar "Reemplazar textura con" usando un
Sprite / Texture2D diferente y hacer que se mantenga
La vieja información de colisión.
Alfa con
Si arrastra y suelta un Sprite o Texture2D aquí, puede reemplazar el Alpha Tex.
Esto es útil si desea que lo destructible tenga una forma de colisión diferente a la visual. Por ejemplo, para
hacer vidrio transparente usted
querrá "Reemplazar con" con el Sprite / Texture2D transparente, y luego "Reemplazar alfa con" con una
versión sólida.
[EVENT] Al iniciar Split
Esto se llama antes de que un objeto destructible se divida.
[EVENTO] Al final de la división (Lista de clones <D2dDestructible>)
Esto se llama después de que un objeto destructible se divide. Clones contiene una lista de todos los
elementos destructibles divididos, incluido el original.
[EVENTO] En Daño cambiado (flotador viejo, flotador nuevo)
Esto se llama cada vez que cambia el campo "Daño" del Destructible.
[EVENT] En datos alfa reemplazados
Esto se llama cada vez que se restablecen los datos alfa del Destructible.
[EVENTO] En datos alfa modificados (D2dRect rect)
Esto se llama cada vez que se modifica un área de Datos alfa de Destructible.
[EVENTO] En el subconjunto de datos alfa (tamaño D2dVector2, desplazamiento D2dVector2)
Esto se llama cada vez que se recorta un área de datos alfa de Destructible.
[CONTEXTO] Optimizar alfa
Esto combina las operaciones "Reducir a la mitad alfa", "Desenfocar alfa" y "Recortar alfa".
[CONTEXTO] Reducir a la mitad alfa
Esto reduce a la mitad el ancho y la altura del Alpha Tex, lo que le brinda 4x menos píxeles y un rendimiento
mucho mayor.
[CONTEXTO] Blur Alpha
Esto suaviza los bordes de su objeto Destructible. Ajuste el campo "Nitidez" para compensar esto.
[CONTEXTO] Recortar alfa
Esto elimina las filas y columnas no utilizadas de los lados de sus datos alfa.
Si sus datos alfa no contienen píxeles transparentes, esto expandirá el borde en uno.
[CONTEXTO] Restablecer alfa
Esto restablece los datos alfa a su estado original.
[CONTEXTO] Prueba Split
Esto dividirá el Destructible actual en varias piezas si hay islas en los datos alfa.
[CONTEXTO] Agregar accesorio
Esto agrega un GameObject secundario con un "Aparato".
Edge Collider
Este componente le permite usar EdgeCollider2Ds avanzados con objetos destructibles.
Tamaño de celda
Esto le permite establecer qué tan grande será cada celda en píxeles. Por ejemplo: si los datos alfa de su
Destructible son 512x512 píxeles, y su
las explosiones son solo 64x64 píxeles, entonces debe establecer este valor en 64 para un rendimiento óptimo.
NOTA: Configurar esto en un valor bajo aumentará el uso de memoria, por lo tanto, trate de no configurarlo
demasiado bajo.
Detalle
Esto le permite establecer qué tan detallado desea que sea el colisionador final. Si establece este valor en 1,
solo se realizarán optimizaciones simples
que no cambian la forma del colisionador, pero si disminuye el valor, se eliminarán más y más vértices.
Es disparador
Esto le permite configurar la propiedad Is Trigger de los colisionadores generados.
Material
Esto le permite establecer la propiedad Material de los colisionadores generados.

Fixture Group
Este componente almacena una lista de elementos fijos e invoca un evento cuando todos los elementos fijos se
han desconectado del objeto Destructible actual.
Accesorios
Esto le permite establecer qué aparatos pertenecen a este grupo.
[EVENT] En todos los accesorios eliminados
Esto se llama una vez que todos los dispositivos están desconectados del objeto Destructible actual.

Fixture
Un elemento fijo es un punto de anclaje en un objeto Destructible que se destruye automáticamente cuando se
destruye el píxel debajo de él. Por ejemplo, si
desea unir un sistema de partículas a una parte de su objeto destructible, querrá usar un accesorio para que se
destruya una vez que esa parte del
Sprite se destruye. También significa que si tu sprite se divide en varias piezas, el dispositivo solo podrá
pertenecer a una de tus piezas divididas,
así evitar que el sistema de partículas se duplique.
NOTA: un dispositivo debe estar en un GameObject hijo de su Destructible para que funcione correctamente.
Compensar
Esto le permite establecer el desplazamiento de posición del dispositivo.

Polygon Collider
Este componente le permite usar PolygonCollider2Ds avanzados con objetos destructibles.
Tamaño de celda
Esto le permite establecer qué tan grande será cada celda en píxeles. Por ejemplo: si los datos alfa de su
Destructible son 512x512 píxeles, y su
las explosiones son solo 64x64 píxeles, entonces debe establecer este valor en 64 para un rendimiento óptimo.
NOTA: Configurar esto en un valor bajo aumentará el uso de memoria, por lo tanto, trate de no configurarlo
demasiado bajo.
Detalle
Esto le permite establecer qué tan detallado desea que sea el colisionador final. Si establece este valor en 1,
solo se realizarán optimizaciones simples
que no cambian la forma del colisionador, pero si disminuye el valor, se eliminarán más y más vértices.
Es disparador
Esto le permite configurar la propiedad Is Trigger de los colisionadores generados.
Material
Esto le permite establecer la propiedad Material de los colisionadores generados.

Quad Fracturer
Este componente hace que el objeto Destructible actual se fracture en pedazos pequeños una vez que recibe
una cierta cantidad de daño
Fracturas Restantes
La cantidad de veces que este Destructible puede fracturarse.
Daño requerido
La cantidad de daño que este Destructible debe alcanzar para que ocurra la fractura.
Multiplicador de Daño Requerido
Cada vez que ocurre una fractura, el valor de "Daño requerido" se multiplicará por esto.
Recuento de fracturas
La cantidad de veces que este objeto se fracturará. Un conteo de 1 significa que se dividirá por la mitad, 2 se
dividirá por la mitad.
Multiplicador de recuento de fracturas
Cada vez que ocurre una fractura, el valor del "Recuento de fracturas" se multiplicará por esto.
Pasos de desenfoque
La cantidad de veces que cada pieza se volverá borrosa para mantener los bordes lisos.
Irregularidad
Cuán irregular será cada pieza fracturada.

Requirements
Este componente le permite disparar un evento cuando se cumplen ciertos requisitos destructibles. Esto es útil
si desea cambiar el objeto
textura basada en su nivel de daño, o similar.
Daño Min
Esto le permite establecer un mínimo de "Daño" requerido para utilizar este nivel de daño.
Daño Máx.
Esto le permite establecer un "Daño" máximo requerido para utilizar este nivel de daño.
Alpha Count Min
Esto le permite establecer un "Recuento alfa" máximo requerido para utilizar este nivel de daño.
Alpha Count Max
Esto le permite establecer un "Recuento alfa" mínimo para que se use este nivel de daño.
Alpha Min restante
Esto le permite establecer un mínimo de "Alfa requerido" para que se use este nivel de daño.
Alpha Max restante
Esto le permite establecer un "Alfa requerido" máximo para que se use este nivel de daño.
[EVENTO] En requisito cumplido
Esto se llama tan pronto como se cumplan todos los requisitos, si dejan de cumplirse y se vuelven a cumplir,
se volverá a llamar.

Retain Velocity
Cuando un elemento destructible se divide, primero se duplica, luego los datos alfa se configuran en todas las
copias. Sin embargo, cuando se copia un Rigidbody2D, su
los datos de velocidad se pierden, por lo que debe agregar este componente si desea que estos datos de
velocidad persistan.

Sorter
El Sprite Renderer de Unity le permite modificar las configuraciones de "Orden de clasificación" y "Capa de
clasificación", pero los otros renderizadores en Unity ocultan estas configuraciones.
El componente Clasificador expone esta configuración por usted, lo que le permite mezclar Renderizadores
Sprite con Renders Mesh.
Orden de clasificación
Esto le permite establecer el orden de clasificación del renderizador actual.
Capa de clasificación
Esto le permite establecer la capa de clasificación del renderizador actual.