Resultados 1 al 8 de 8

Tema: Interrumpir transición Unity

  1. #1
    Usuario completo Avatar de Jhonatan00_00
    Fecha de ingreso
    Oct 2016
    Mensajes
    211
    Gracias (Dadas)
    9
    Gracias (Recibidas)
    9

    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
    Administrador y fundador. Avatar de 3dpoder
    Fecha de ingreso
    Apr 2002
    Mensajes
    16,974
    Gracias (Dadas)
    1753
    Gracias (Recibidas)
    4117
    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.
    Si tienes activado Adblock o alguno similar en este sitio, te estás perdiendo muchas cosas interesantes. Puedes desactivarlo para foro3d.com como te muestro en este enlace

    |Agradecer cuando alguien te ayuda es de ser agradecido|

  3. #3
    Administrador y fundador. Avatar de 3dpoder
    Fecha de ingreso
    Apr 2002
    Mensajes
    16,974
    Gracias (Dadas)
    1753
    Gracias (Recibidas)
    4117
    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.
    Si tienes activado Adblock o alguno similar en este sitio, te estás perdiendo muchas cosas interesantes. Puedes desactivarlo para foro3d.com como te muestro en este enlace

    |Agradecer cuando alguien te ayuda es de ser agradecido|

  4. #4
    Usuario completo Avatar de Jhonatan00_00
    Fecha de ingreso
    Oct 2016
    Mensajes
    211
    Gracias (Dadas)
    9
    Gracias (Recibidas)
    9
    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
    Administrador y fundador. Avatar de 3dpoder
    Fecha de ingreso
    Apr 2002
    Mensajes
    16,974
    Gracias (Dadas)
    1753
    Gracias (Recibidas)
    4117
    ¿Pero el comando o instrucción Transition Interruption Source no lo tiene tu versión?
    ¿Qué versión tienes?
    Si tienes activado Adblock o alguno similar en este sitio, te estás perdiendo muchas cosas interesantes. Puedes desactivarlo para foro3d.com como te muestro en este enlace

    |Agradecer cuando alguien te ayuda es de ser agradecido|

  6. #6
    Usuario completo Avatar de Jhonatan00_00
    Fecha de ingreso
    Oct 2016
    Mensajes
    211
    Gracias (Dadas)
    9
    Gracias (Recibidas)
    9
    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 se 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
    Usuario completo Avatar de Jhonatan00_00
    Fecha de ingreso
    Oct 2016
    Mensajes
    211
    Gracias (Dadas)
    9
    Gracias (Recibidas)
    9
    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 mas 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 tenia, 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.

    Se que es algo mas 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 mas 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
    Administrador y fundador. Avatar de 3dpoder
    Fecha de ingreso
    Apr 2002
    Mensajes
    16,974
    Gracias (Dadas)
    1753
    Gracias (Recibidas)
    4117
    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.
    Si tienes activado Adblock o alguno similar en este sitio, te estás perdiendo muchas cosas interesantes. Puedes desactivarlo para foro3d.com como te muestro en este enlace

    |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, 14:55
  2. Consulta sobre una transición 3d en ae
    Por laush_x4 en el foro Programas de Diseño gráfico y CAD
    Respuestas: 0
    : 06-06-2013, 20:08
  3. Rhinoceros Superficies de transición
    Por 3dpoder en el foro Manual Rhinocero Nivel 1
    Respuestas: 0
    : 10-07-2009, 02:16
  4. Interrumpir ciclo de movimiento
    Por cielorojo en el foro Cortos de Animación
    Respuestas: 0
    : 11-11-2007, 02:05
  5. Transición en Premiere
    Por dixan en el foro Problemas con Programas
    Respuestas: 2
    : 17-03-2006, 15:19