Noticias

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

Temas recientes

Problema de interaccion entre dos objetos

Iniciado por zelleGames, Mayo 19, 2019, 05:43:47 PM

Tema anterior - Siguiente tema
Buenas gente,
 
Os comento mi problemilla, tengo una plataforma que gira y hay una bola encima de ella, el caso es que a la bola no le afecta el movimiento rotatorio de la plataforma...en la vida real es como si hubiese la tipica atraccion que gira y tu al subirte en ella giras con la atraccion, pues la p*** bola se queda quieta, he probado a cambiar los parametros de friccion de ambos objetos, pesos etc...y nada.
 
 
 
Quizas las físicas no calculan eso, no se. Si la bola la hago hija de la plataforma entonces si que gira claro, pero esto sería como último recurso...
 
Sabéis si hay alguna forma de conseguirlo.
 
 
 
Gracias por adelantado y un salud!!
 
 
 
 
 
 

Cita de: zelleGames date=1558280627Quizas las físicas no calculan eso
   


Me pa que no ... pero podés hacer dos cosas:
 


  1.    Medís el punto A (donde el pasajero estaba) y el punto B (donde el pasajero estaría, rotando ese vector con lo que rota la plataforma), finalmente podés usar MovePosition para trasladar al pasajero directametne al Punto B, esto te dá bastante precisión (por bastante me refiero al 100%). Esto no te permite hacer uso de la fricción peso etc.


  2.    Aplicarle lo medido en 1, Usar ese delta (A->B) en forma de velocidad lineal/fuerza al pasajero (like ReAlLifE).


1) es exactamente lo que hago en un asset mio con las plataformas giratorias, no es 3D ni es la misma situación, es 2D (x e y), pero el principio es exactamente el mismo.

¡¡Gracias Lightbug!!
 
probare eso que me comentas, el caso es que el pasajero es el player que puede ir moviendose, saltando, etc... por la plataforma. Esta tarde le doy unas vueltas a ver que sale.

Cita de: zelleGames date=1558356301el caso es que el pasajero es el player que puede ir moviendose, saltando, etc... por la plataforma
   


no pasa nada, vos primero registrás/aplicás el movimiento provocado por la plataforma, luego aplicás el movimiento propio del personaje.
 
Saludos

Mayo 20, 2019, 08:35:23 PM #4 Ultima modificación: Mayo 21, 2019, 03:01:37 PM por pioj
Buenas de nuevo,
 
 
 
Entiendo lo que me dices pero no consigo aplicarlo al codigo (las mátematicas y los vectores no es lo mio), te comento, yo tengo este codigo que rota la plataforma:
 
 
 



   
      transform.Rotate(new Vector3(0,0,45) *Time.deltaTime * velocityRotation);
   

[/quote]
 
 
 
Entonces player.transform.position sería donde esta el player pero no se como añadirle la rotacion de la plataforma....
 
 
 
he probado cosas con magnitude pero me acabo liando y poniendo de los nervios 
 
 
 
A ver si me puedes dar alguna pistilla, te lo agradeceria.
 
 
 
 

Cita de: zelleGames date=1558377323A ver si me puedes dar alguna pistilla, te lo agradeceria.
   


No es tan sencillo de hacer, por lo menos a lo primero, yo lo veo así:
 
Cuadro 1:
 
  BOLA:
 


  1.    Movimiento Normal de la bola


  2.    Situación: cayó sobre la plataforma (suelo = true)


  3.    Registras los datos de la plataforma, transform sobretodo, con esto vas a poder sacar dos datos importantes en el cuadro que sigue (y en los que le siguen a este)-> diferencias de posiciones y diferencias de quaternions (ángulos!!) ... no te preocupes por la posición si querés, ignorala cada vez que la mencione.


  4.    Calculas distancia desde bola hasta centro de la plataforma y la guardás. Yo siempre le pongo "deltaReference", es mi convención.


Cuadro 2:
 
  PLATAFORMA:
 



    1.    Se mueve y rota ponele, hace lo suyo


      BOLA:
     


    1.    La plataforma ya se movió y rotó, ahora recalculas los datos anteriores (nueva posicion de esta y nuevo quaternion de esta )


    2.    Hacés la diferencia entre los datos de este cuadro y los datos anteriores -> tenés dif de pos y dif de ángulos


    3.    Aplicás la dif de ángulos a "deltaReference", esto te da donde debería estar la bola con el efecto de rotación de la plataforma


    4.    Aplicás la dif de posición a "deltaReference", esto te da donde debería estar la bola con el efecto de posición + rotación de la plataforma


    5.    A todo esto todavía el movimiento normal de la bola no se aplicó, acá es donde seguís haciendo lo de siempre, el movimiento "Normal",  (AddForce o MovePosition o Translate o lo que sea)


    6.    Finalmente Actualizas/Pisás todos los datos anteriores, pos de plataforma, quaternion de plataforma, distancia bola-plataforma, esto es para reutilizarlos en el siguiente cuadro, los datos que en este cuadro eran "actuales" pasan a ser "previos", se van pasando la posta.


    Lo expliqué muy por arriba pero en general las famosas Moving/Rotating platforms funcionan algo así, si le querés dar toques vas a tener que meter algún que otro paso intermedio, como por ej que la orientación respecto al centro sea la misma (idéntico a enparentar) o que se mantenga la orientación con la que contactas con la bola, etc.

    Perdon por no haberte contestado antes pero ando liado, esta tarde probare a ver.
     
    Ahora me queda más claro los pasos que debo tomar, aun así menudo lio para que la bolita vaya con la plataforma 
     
    Si veo que me cuesta mucho le dan por el orto como decis por allí porque al final te estas horas para una tonteria que es un pequeño detalle del juego 
     
    Pero bueno siempre se aprende algo.
     
    Gracias!!
     
     

    Al final, me he dejado de lios y lo he conseguido de la siguiente manera que además se puede manejar el player bien mientras gira el objeto.
     
    He creado un script que añado al objeto que se mueve y que al colisionar con el player le hace hijo suyo y cuando deja de colisionar el padre del player es null:
     
     
     


    //Al entrar en contacto con el player lo hace su hijo
    private void OnCollisionEnter(Collision collision)
    {
     
     if(collision.gameObject.tag=="Player")
     {
       
       collision.gameObject.transform.SetParent(gameObject.transform);
       
       
     }
     
     
    }
    //Al dejar de colisionar el player no tiene padre, pobre huerfano :(
    private void OnCollisionExit(Collision collision)
    {
     
     if(collision.gameObject.tag=="Player")
     {
       
       collision.gameObject.transform.SetParent(null);
       
       
     }
     
     
    }

     
     
     
    Saludos!!!
     
     
     
     

    Etiquetas: