42. CLASE MONOBEHAVIOUR (II)










InvokeRepeating:

function InvokeRepeating (methodName : String, time : float, repeatRate : float) : void


Invoca la función que le pasamos como string para dentro del número de segundos que le pasamos como segundo parámetro, y una vez se ejecuta, lo vuelve a hacer cada repeatRate segundos (el tercer parámetro.

Veremos claramente su funcionamiento rehaciendo ligeramente el ejemplo anterior (previamente es mejor que coloquemos la esfera en position.Z = 3):


var original : GameObject;

function OtroDeLoMismo() {
var copia : GameObject = Instantiate(original, original.transform.position +
Vector3.right, original.transform.rotation);
copia.transform.position += Vector3(Time.time - 5, 0,0);
}

InvokeRepeating("OtroDeLoMismo", 5,1);


Arrastramos nuestro cubo para inicializar la variable "original" en el inspector, y le damos al play. Nuestro cubo, pasados los 5 primeros segundos, empezará a clonarse cada segundo.

Vamos por partes: Lo que hemos hecho es primero declarar una función que -al igual que en el ejemplo anterior- clona el objeto que le hayamos arrastrado a "original" y lo coloca una unidad a la derecha del objeto clonado. Asimismo, para que no se nos amontonen los cubos en el mismo punto, aprovechamos que la función Instantiate devuelve el objeto clonado, para almacenarlo en una variable -que llamamos copia- y lo que hacemos es que cada nuevo objeto instanciado se mueva una unidad más a la derecha que el anterior, cosa que obtenemos aprovechando que Time.time hace precisamente eso, avanzar una unidad cada segundo. Al resultado le restamos 5, que es el número de segundos que transcurren hasta que empiezan a clonarse los cubos, por obra y gracia del segundo parámetro de InvokeRepeating. Si no le restáramos ese 5, el primer muro se clonaría 5 unidades a la derecha del cubo clonado.

Observamos que, centrándonos en la función estudiada, que InvokeRepeating llama a la función transcurridos 5 segundos -en este caso- y pasados los mismos, se repite de forma infinita cada segundo (3er parámetro).


CancelInvoke:

function CancelInvoke () : void

function CancelInvoke (methodName : String) : void


Tal como seguro que estaréis suponiendo, CancelInvoke cancela las funciones que hayan sido invocadas por las dos funciones anteriores para un determinado script. La primera variación de esta función no tiene parámetros, y al llamarse cancela todas las funciones Invoke e InvokeRepeating del script. La segunda variación de la función sólo cancelará la función de dicho tipo que coincida con el nombre que se le pasa como parámetro.

Arreglemos un poco más nuestro script dándole al usuario la posibilidad de cancelar la clonación de cubos.


var original : GameObject;

function OtroDeLoMismo() {
var copia : GameObject = Instantiate(original, original.transform.position +
Vector3.right, original.transform.rotation);
copia.transform.position += Vector3(Time.time - 5, 0,0);
}

InvokeRepeating("OtroDeLoMismo", 5,1);

function Update() {
if (Input.GetButton ("Fire1"))
CancelInvoke();
}


Es la misma función anterior, sólo que con el añadido que le hemos puesto, la función update comprobará cada frame si el usuario ha pulsado la tecla definida en input como Fire1. Si tenemos la configuración por defecto, debería ser el ctrl izquierdo o el botón izquierdo del ratón.


IsInvoking:

function IsInvoking (methodName : String) : boolean


Este primer prototipo de la función devuelve true si hay algún invoke pendiente de la función que se introduce como parámetro.


function IsInvoking () : boolean


En esta segunda modalidad devuelve true si algún invoke pendiente en este script.

POSTED BY UnityScripts
DISCUSSION 0 Comments

Leave a Reply

Con la tecnología de Blogger.