Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Como congelar el Pj mientras ataca

Iniciado por Destroyer, Septiembre 15, 2015, 11:15:58 PM

Tema anterior - Siguiente tema
Como dice el titulos , como haria para congelar un personaje mientras ataca, lo que quiero es que cuando ataca no se pueda mover por 3 segundos, o almenos que me digan que funcion debo usar, gracias

Entiendo que tienes unas funciones de movimiento en el update o fixedupdate. Sencillamente no las ejecutes por 3 sec. Para ello create una variable float con 3 y ves restantándolo del time.deltatime. cuando llegue a 0 habrán pasado 3 sec.

la verdad es que la pregunta es tan de logica que roza lo absurdo (la pregunta, no el autor de la pregunta) xD la unica forma de que el personaje se mueva, es que le hayas programado una funcion para eso ... pues algo quieto es sencillamente algo que no mueve xD se que es absurda la respuesta, pero es lo que se pregunta. Bloquea tu funcion de movimiento durante el tiempo que desees como ha dicho iRobb y ya lo tienes

[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="24162" data-ipsquote-contentcommentid="110807 date=1442355565]Entiendo que tienes unas funciones de movimiento en el update o fixedupdate. Sencillamente no las ejecutes por 3 sec. Para ello create una variable float con 3 y ves restantándolo del time.deltatime. cuando llegue a 0 habrán pasado 3 sec.[/quote]Muchas gracias jajaja y Arthure, taba re dormido, por eso pregunto cualquier cosa D:

[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="24162" data-ipsquote-contentcommentid="110823 date=1442358656]la verdad es que la pregunta es tan de logica que roza lo absurdo (la pregunta, no el autor de la pregunta) xD la unica forma de que el personaje se mueva, es que le hayas programado una funcion para eso ... pues algo quieto es sencillamente algo que no mueve xD se que es absurda la respuesta, pero es lo que se pregunta. Bloquea tu funcion de movimiento durante el tiempo que desees como ha dicho iRobb y ya lo tienes[/quote]Yo lo que decía con funciones de movimiento en el update era para descartar que no eran animaciones. Se puede mover algo en animaciones y no tiene porqué estar actualizándolo en el update.

Yo ésto he aprendido a hacerlo (o al menos apañarlo) mediante co-rutinas:
  1. Creo una variable de control booleana (por ejemplo PUEDE_MOVERSE), que controlará cuándo permito al personaje moverse y realizar acciones.
  2. Checkeo una condición del tipo IF(PUEDE_MOVERSE) al principio del bucle de control, antes de pulsar la tecla. Simplemente es un IF anidado.
  3. Justo después de llamar al ataque, fuerzo negar la variable booleana, para que no se pueda mover.
  4. Justo después de eso, llamo a una co-rutina de tipo IEnumerator, con un parámetro de x segundos, que es el tiempo que esperará.
  5. Más abajo, en la parte de la co-rutina, indico que tras esperar esos segundos, vuelva a poner la variable booleana a True.
Es una parida y probablemente no sea la forma más correcta o eficiente, pero cuando tienes un CharacterController y te toca hacer multitud de IF's para la gestión de botones (ataque flojo, fuerte, salto, patada, dash, usar magia, etc), no te puedes permitir el lujo de re-organizar todo el código de control cada dos por tres...

Igual podrías usar un máquina de estado, busca info sobre qué es, pero básicamente es un switch. Ejemplo:
void Update () {
    switch(estado)
    {
     case 1: //Movimiento
     break;
     case 2: //Atacar
     //ETC
    }
}
Así te aseguras de que sólo se ejecuta el estado actual, los estados los puedes cambiar cuando pulses un botón o pase cierto tiempo.

Etiquetas: