Unity nos permite crear nuestro propios métodos extendidos, lo cual puede ser muy util para tareas repetitivas, cálculos comunes etc. La ventaja de un método extendido frente a una función es que no tendremos que hacer referencia a la clase de la función si no que lo añadiremos a la propiedad que se trate.
Como todo esto suena bastante abstracto pongo un ejemplo para entederlo mejor.
Queremos crear un metodo para colocar la posicion de un objeto en (0,0,0)
Para ello creariamos un script tal que
public static class ExtensionMethods
{
//Método extendido
public static void Resetea(this Transform trans){
trans.position = Vector3.zero;
}
}
Esta clase debe ser tipo static asi como sus funciones.
this en este caso funciona como un parámetro implícito, lo que le estamos diciendo es, quiero que llames a este método desde cualquier componente Transform, por lo que si queremos que fuera desde un Vector3 seria this Vector3 vector, un float , this float numero etc
Finalmente sólo hace falta llamar al metodo desde otro script simplemente con
transform.Resetea ();
En cuanto escribimos transform y pulsamos . nos saldrá la lista de métodos y aparecerá el nuestro.
Podemos crear métodos con varios parámetros y que devuelvan parámetros, lo único que hay que tener en cuenta, es que el primer parámetros siempre lleva this y hace referencia al tipo de objeto o tipo de variable.
En la clase de los metodos
public static float Multiplica(this float value, float multiplo)
{
return value * multiplo;
}
En cualquier clase
float numero = 5;
numero=numero.Multiplica (2);
Los ejemplos que he puesto son muy sencillos pero la extension de metodos se puede hacer todo lo compleja que queramos.
Como la clase que hemos creado no hereda de MonoBehaviour , algunas funciones no nos aparecen, por ejemplo Destroy, para poder llamarlas tendremos que utilizar la llamada MonoBehaviour quedando
public static void DestruyeSleep2D(this Rigidbody2D rb, GameObject game){
if (rb.IsSleeping()) {
MonoBehaviour.Destroy (game);
}
}
The ad is displayed on the page
current post: Unity: Métodos extendidos, ID: 2239
Ad: Anuncio2 (2573)
Placement: After Content 2 (after-content_2)
Display Conditions
Ad | wp_the_query | |
---|---|---|
term_id | 0 | |
taxonomy | 0 | |
is_main_query | 1 | 1 |
is_rest_api | 0 | |
page | 0 | 1 |
numpages | 0 | 1 |
is_archive | 1 | |
is_search | 1 | |
is_home | 1 | |
is_404 | 1 | |
is_attachment | 1 | |
is_singular | 1 | 1 |
is_front_page | 1 | |
is_feed | 1 |
Find solutions in the manual