Noticias

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

Reproducir animacion en un punto especifico del objeto

Iniciado por Alvaro95, Diciembre 08, 2018, 02:58:32 AM

Tema anterior - Siguiente tema
Diciembre 08, 2018, 02:58:32 AM Ultima modificación: Diciembre 08, 2018, 02:59:53 AM por Alvaro95
Buenas a todos comunidad.
 
El titulo suena algo lioso pero creo que es muy simple.
 
 
 
Vereis, me interesaria saber la manera de que una animacion solo se pueda reproducir cuando el objecto en si se encuentra en un punto especifico.
 
 
 
Es decir,  cuando el objeto se encuentra en esta posicion por ejemplo:
 

 
Sea cuando me deje reproducir dicha animacion.
 
 
 
La animacion la tengo asociada a una tecla, pulso spacio y la animacion se reproduce, es decir, no es automatica ni nada.
 
Obviamente esto solo se puede hacer mediante script verdad?
 
Seria algo asi supongo:
 
if transform is (parametros del transform) anim play

Hola! Vas por buen camino, la condición que buscas es "si el transform está entre estos puntos...",  si estás usando las físicas de Unity puedes ahorrar mucho código usando la función OnTriggerEnter:
 

void OnTriggerEnter (Collider objeto)
{
anim.Play("animacion");
}

 
Si estás moviendo el GameObject mediante el Transform (mala idea) tendrías que mirar cada frame si estás en una zona próxima al punto que quieres:
 

void Update ()
{
if(Vector3.Distance(transform.position, posicion) < 2f)
   anim.Play("animacion");
}

 
Estaría bien que controlaras si la animación se está reproduciendo para no reiniciarla o si se debe reproducir desde el principio cada vez que te acercas.

Cita de: Alvaro95 date=1544234312if transform is (parametros del transform) anim play
   


naaa te vas a volver loco, hacé como dice juanma_teso y ponele un trigger o si querés evitarlo hace un detector de distancia a un punto, y verificá si es menor a que se reproduzca ... pero nunca jamás un "igual a" la probabilidad que des con el punto específico (si es un jugador libre) es de 0.00000000000000000000001 % (a modo de ilustración ), osea nunca se va a reproducir la animación.
 
PD: Si querés info de una posición no necesitas verificar el transform entero, solo el Vector3 "position"

Diciembre 08, 2018, 11:44:02 PM #3 Ultima modificación: Diciembre 09, 2018, 12:07:39 AM por Bamf
Cita de: juanma_teso date=1544289435Hola! Vas por buen camino, la condición que buscas es "si el transform está entre estos puntos...",  si estás usando las físicas de Unity puedes ahorrar mucho código usando la función OnTriggerEnter:
   
   

void OnTriggerEnter (Collider objeto)
{
anim.Play("animacion");
}

   
      Si estás moviendo el GameObject mediante el Transform (mala idea) tendrías que mirar cada frame si estás en una zona próxima al punto que quieres:
   
   

void Update ()
{
if(Vector3.Distance(transform.position, posicion) < 2f)
   anim.Play("animacion");
}

   
      Estaría bien que controlaras si la animación se está reproduciendo para no reiniciarla o si se debe reproducir desde el principio cada vez que te acercas.
   


Eso es justo lo que quiero jaja, no sabia como expresarme, veras soy algo nuevo en programacion,  he ojeado el OnTriggerEnter pero luego no se donde tengo que insertar el:
 

void OnTriggerEnter (Collider objeto)
{
    anim.Play("animacion");
}

 
 

Cita de: Alvaro95 date=1544309042Eso es justo lo que quiero jaja, no sabia como expresarme, veras soy algo nuevo en programacion,  he ojeado el OnTriggerEnter pero luego no se donde tengo que insertar el:
   



  •    El OnTriggerEnter es un mensaje al igual que Start Awake Update etc, es decir ponelos en la misma jerarquía, osea dentro de la "public class xxx : monobehaviour".


  •    Si no vas a usar el Collider objeto dentro podés no declararlo -> void OnTriggerEnter()


  •    Lo importante de estos mensajes/trigger/colisiones es que se disparan cuando se dan las condiciones necesarias (investigá la tabla de colisiones + matriz de colisiones de la documentación) (Un ej es rigidbody vs Trigger).


> On Trigger lo podés leer como: Si se da la colision (habilitada) entre el obj A y el obj B, si A tiene el script entonces el Collider other (o en tu caso "objeto") es el objeto B, y viceversa. No va en quien tenga el mensaje, la colisión y el mensaje se reproduce igual para quienes lo tengan, por supuesto muchas veces te interesa ponerlo en tal objeto y gestionar al resto de los objetos, por ej si tu player colisiona con varios objetos de interés dentro de OnTrigger te organizas mejor gestionando al resto de los objetos, que teniendo muchos OnTriggerEnter's en todos estos objetos potenciales a colisionar.
 
Probá lo siguiente, lo ponés en dos objetos a colisionar (el rigidbody y el trigger por ej):
 

void OnTriggerEnter(Collider other)
{
print("Mi nombre es: " + gameObject.name + " y el otro GameObject es: " + other.gameObject.name);
}

 
 
 
Saludos

Diciembre 23, 2018, 04:52:26 AM #5 Ultima modificación: Diciembre 23, 2018, 04:52:35 AM por Alvaro95
Vale, me ha costado casi dos semanas de trabajo pero al fin he comprendido como funciona, gracias por la ayuda!

Etiquetas: