Resultados 1 al 8 de 8

Tema: Interrumpir transición Unity

  1. #1
    Fecha de ingreso
    Oct 2016
    Mensajes
    227

    Interrumpir transición Unity

    Buenos días, tengo un problema que en versiones actuales de Unity se soluciona (creo) muy fácilmente, pero que en la versión que estoy usando es algo más complejo de arreglar.

    Tengo un personaje que corre, salta, etc (lo típico en todos los videojuegos) y tanto al saltar como al caer hace una pequeña animación de agacharse que después por medio de una transición de animación pasa a la de correr de nuevo o a la de reposo y ¿donde está el problema? El problema está en que si hemos saltado y justo al tocar el suelo queremos volver a hacerlo no podemos, porque el personaje primero hace esa animación de agacharse y después hace la transición hacia la de reposo o correr para después poder saltar de nuevo, algo horrible a nivel jugable. Te limita muchísimo a la hora de hacer saltos precisos y a menudo te caes por algún sitio o chocas contra algo porque no te salta cuando quieres.

    Tengo entendido que a partir de Unity 5 tenemos la solución a este problema (corregidme si me equivoco) y la solución se llama Has Exit Time, que sirve para interrumpir una animación o transición para pasar en el momento que lo necesitemos a otra, pero yo uso es la 4.7.2 y aún no está implementada por lo que tengo que programarlo por script (no me digáis que actualice porque hay una razón para usar esta versión y es que las versiones más nuevas cambian toda la iluminación y me echan a perder el trabajo realizado).

    La pregunta es, ¿cómo puedo interrumpir la transiciones o la animaciones por script y que no se vean mal?
    Un saludo.

  2. #2
    Fecha de ingreso
    Apr 2002
    Mensajes
    26,002
    Suena complicado en tu versión, pero puedes probar la solución que hay publicada en el blog de Unity a ver si te sirve, no es una solución rápida pero parece efectiva para interrumpir la animación, ya dirás si te ha servido o al final lo has solucionado de otra forma.

    Por cierto, en Unity hay una cantidad de comandos y scripts interminable, no comentas que tipo de animación o transición estás utilizando, te lo comento porque depende del tipo, puede que tengas otra alternativa, puedes mirar en el apartado de Transition Interruption Source.
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  3. #3
    Fecha de ingreso
    Apr 2002
    Mensajes
    26,002
    Te dejo un enlace donde parece que lo solucionan directamente con un script, además del enlace adjunto una captura por si acaso, que luego estas cosas desaparecen y se pierden. Transition Interruption Source script.

    Te preguntaba antes por el tipo de animación porque depende de cual estuvieras usando, igual había otras soluciones, pero me imagino sea una u otra bastará con cambiar la identificación de la animación.
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  4. #4
    Fecha de ingreso
    Oct 2016
    Mensajes
    227
    Buenas tardes y gracias por responder. Lo he intentado pero a mi no me aparecen la mitad de opciones que veo en esos tutoriales por lo que me da la impresión de que si no actualizo no voy a poder solucionar el problema.

    Lo más cerca que he estado de solucionarlo es usando GetComponent<Animator>().CrossFade, pero me hace cosas raras y no transiciones desde el fotograma en el que tenga que detener una transición hasta otra animación (no se si me explico bien). Lo que me hace es reproducir sin más una animación y ya, no hacer una transición desde otra transición. Se nota el corte y no es lo que busco.

    Probaré a instalar Unity 5 y a ver si consigo solucionar este problema sin que me eche a perder todo el trabajo realizado en mi proyecto y si no lo consigo pues volveré a preguntar. Quizá sea solo cuestión de aprender a usar bien GetComponent<Animator>().CrossFade, quien sabe. Saludos.

  5. #5
    Fecha de ingreso
    Apr 2002
    Mensajes
    26,002
    ¿Pero el comando o instrucción Transition Interruption Source no lo tiene tu versión?
    ¿Qué versión tienes?
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  6. #6
    Fecha de ingreso
    Oct 2016
    Mensajes
    227
    La versión que estoy usando es la 4.7.2. Ahora he actualizado a la 5.2 porque es la primera versión que incorpora el Has Exit Time y todas las nuevas opciones del Animator, pero me echa a perder todo el trabajo, aunque solucione el problema es prácticamente como volver a tener que montar todo desde cero y no sé si va a merecer la pena, voy a ver como puedo solucionar el problema primero desde la versión 5.2 y después veré cómo arreglar todos los problemas nuevos que me ha causado.

  7. #7
    Fecha de ingreso
    Oct 2016
    Mensajes
    227
    Buenos días ya he solucionado el problema, aunque a mi modo por medio de Script y he tenido que volver a la versión de Unity que utilizaba, porque la más nueva me echaba a perder todo el progreso. La forma en que lo he solucionado es la siguiente:

    - He montado las animaciones en el Animator con sus transiciones tal y como las tenía, de modo que si el personaje salta hace una transición del estado que tenga hacia otro estado agachado y de este agachado hacia otro saltando.
    - Para evitar que las animaciones no sean fluidas porque el Animator no deja iniciar otra animación hasta no haber terminado una transición anterior he creado un tiempo de respuesta, por ejemplo; si pulsamos espacio el tiempo de respuesta se activa y empieza a contar a la vez que comienza a realizar la transición de agacharse para saltar y en cuanto ese tiempo de respuesta llega a un número reproduce la animación que quieras con GetComponent<Animator>().Play.

    Hay que tener las animaciones preparadas para que encajen, porque lo que estamos haciendo es reproducir la siguiente animación mientras se está realizando una transición anterior, por lo que interrumpe la transición, pero si lo preparas bien no se nota nada y da la sensación de que una transición pasa a la otra.

    Sé que es algo más tedioso y chapucero que poder hacer que Unity mezcle transiciones, pero a nivel jugable me ha quedado muy bien y no se ve nada raro tampoco. Solo espero que al reproducir el juego en otro PC más viejo y que bajen los FPS no se me desajusten los fotogramas y me haga cosas raras por esto del tiempo de respuesta que he creado. Si alguien encuentra una solución mejor que lo diga.

    Saludos.

  8. #8
    Fecha de ingreso
    Apr 2002
    Mensajes
    26,002
    Me alegro de que hayas encontrado una solución y de que lo compartas. Eso sí, tienes que estar afinando muy mucho para que se vea bien.

    ¿Cómo es que las versiones más recientes de Unity te echan a perder los avances con versiones anteriores? Entiendo que cambien la forma de hacer muchas cosas, pero supongo que tiene que haber una forma oficial por parte de Unity para importar el proyecto desde el más nuevo respetando todo el código. Un saludo amigo y ya irás mostrando avances.
    |Agradecer cuando alguien te ayuda es de ser agradecido|

Temas similares

  1. Transición entre pantallas Unity (solucionado)
    Por Jhonatan00_00 en el foro Videojuegos
    Respuestas: 2
    : 27-03-2020, 12:55
  2. Transición de día a noche en 3ds Max
    Por quizagenio en el foro Render, Iluminación y Cámaras
    Respuestas: 1
    : 03-09-2012, 15:57
  3. Rhinoceros Superficies de transición
    Por 3dpoder en el foro Rhino
    Respuestas: 0
    : 10-07-2009, 01:16
  4. Interrumpir ciclo de movimiento
    Por cielorojo en el foro Cine y TV VFX
    Respuestas: 0
    : 11-11-2007, 00:05
  5. Transición en Premiere
    Por dixan en el foro Programas de Diseño 3D y CAD
    Respuestas: 2
    : 17-03-2006, 13:19