Jump to content
Bousing

Fijar personaje en una plataforma movil

Recommended Posts

Saludos compañeros

   En este ocasión, les escribo porque tengo una duda muy puntual. Ando haciendo un juego de plataformas en 2D y quiero hacer plataformas moviles que se muevan tanto izquierda, derecha, arriba o hacia abajo. Lo hice, y funciona bien. Lo que sucede es que cuando monto allí a mi personaje este no se mueve junto a la plataforma, sino que la plataforma se mueve independientemente y el personaje se cae. 

Intente lo siguiente

 


void OnCollisionEnter2D(Collision2D objeto){
  
  if(objeto.GameObject.tag == "NombreDeLaPlataforma"){
    this.transform.position = objeto.transform.postion;
  }
}

 

Eso me da la posición de la plataforma cuando el objeto la toca pero solo sucede una vez y la plataforma se mueve sin el personaje y posteriormente este se cae :D ... como hago para que ese código que les acabo de dar sea continuo hasta que salte o mueva el personaje ? Pense en un while con un booleano de condición de salida, pero eso más bien va a destrozar el programa. 

   Si saben como hacerlo de esa manera, o saben como solucionarlo de otra manera, estaría muy agradecido si comparten la respuesta. 

Un abrazo!!

Edited by Bousing

Share this post


Link to post
Share on other sites
10 hours ago, Bousing said:

como se hace eso ? 

Google te suena? mira si pones parent+unity tenes toneladas de material para hacer lo que queres. Te paso solo la primera que salio (la mas poderosa y la que es capaz de dejar obsoletos al 98% de todos los foros de Unity del planeta)

https://docs.unity3d.com/ScriptReference/Transform-parent.html

Share this post


Link to post
Share on other sites
hace 5 horas, lightbug said:

Google te suena? mira si pones parent+unity tenes toneladas de material para hacer lo que queres. Te paso solo la primera que salio (la mas poderosa y la que es capaz de dejar obsoletos al 98% de todos los foros de Unity del planeta)

https://docs.unity3d.com/ScriptReference/Transform-parent.html

Muchas gracias. Realmente ignoraba que la clase transform tenía esa propiedad. Obviamente lo primero que hice fue escribir "parent" en google pero como no sabía bien lo que era lo deje así. Tengo que estudiarme todo el API. Saludos y gracias

Share this post


Link to post
Share on other sites
4 hours ago, Mega said:

Podrías hacerlo mediante una animación

Las animaciones son muy utiles siempre y cuando esten atadas a un punto de referencia, como por ejemplo el pivot de un personaje, pero para interactuar con otros objetos que no son estaticos no es para nada recomendable

Share this post


Link to post
Share on other sites

Hooola buenas, aunque lo que dicen los compañeros es cierto, no me gusta tener que estar cambiando los parents y tal... no es muy recomendable por muchas razones xD

Aqui tienes una sencilla solución, he usado objetos 3D, pero funciona igual con 2D (con sus respectivos componentes 2D)

https://gyazo.com/cf28f9ce3661e9ba20dd8184a5afc4e4

https://gyazo.com/5ce6c8d265d10d6eb9056e780135e55c  (Estos son los componentes que he añadido el objeto de encima de la plataforma)

https://gyazo.com/f9ccef9673c6ae9554ae6f621883fac4 (y estos los de la plataforma)

y este es el codigo de movimiento, no es el mejor, ni el más optimo pero es para testear xD

    public float speed = 10;

	void FixedUpdate () {
        
            transform.Translate(new Vector3(0, speed, 0) * Time.deltaTime);
        
    }

Puedes tener problemas si la plataforma se mueve muy muy rapido, ya que intervienen más factores al ser fisicas... Pero bueno, eso sería otro tema.. 

Si es en 2D, el rigidbody deberia ser rigidbody 2D y el box collider, box collider 2D 

Hale, ya he dado la chapa por hoy xD

Edited by edgar_94_
No funciona el embed de gyazo?

Share this post


Link to post
Share on other sites

No diria que el parent no es recomendable "por muchas razones", me parece que solo por el tema de la escala, en lo que va a scripts no deberia haber ningun problema. Aparte cambiar parents es tan simple como usar una sola instruccion y algun condicional. Yo tengo todas mis plataformas dentro de un gameObject padre (escala 1,1,1) el cual tiene nodos de movimiento, la plataforma en si y otras cosas mas, entonces cuando enparento con este no hay modificacion de escala, eso es porque decidi previamente que seria asi y me ha funcionado excelentemente.

Uno de los tipicos problemas que surgen en un 2D usando un charactercontroller(transforms, no rigidbodies) es que cuando la plataforma sube o baja, dependiendo del orden de actualizacion de la posicion player / plataforma puede verse como que existen saltitos, aunque se corrige facil. Igual no es recomendable usar rigidbodies en characters 2D, perdes mucho control, va dando saltitos al caminar (aunque no parezca lo hace si usas algo de gravedad) y para colmo se trava con un simple escalon.

Share this post


Link to post
Share on other sites
hace 31 minutos, lightbug said:

 

@lightbug ya bueno, pero deberías adaptar el código a transform locales, ya que las posiciones también cambian... Y tendrías que tener en cuenta todas las cosas que "hereda" del parent... Las rotaciones son nefastas y tal... El tema del rigidbody en 2D... Lo probaré y lo de los escalones se podría solucionar fácil xD

Share this post


Link to post
Share on other sites
7 hours ago, edgar_94_ said:

@lightbug ya bueno, pero deberías adaptar el código a transform locales, ya que las posiciones también cambian... Y tendrías que tener en cuenta todas las cosas que "hereda" del parent... Las rotaciones son nefastas y tal... El tema del rigidbody en 2D... Lo probaré y lo de los escalones se podría solucionar fácil xD

Yo tengo dos scipts, uno que uso como vos decis deltas de movimiento, y anda bastante bien (la considero una fuente mas de desplazamiento como lo puede ser gravedad, movimientos horizontales, etc) y el otro usando parents. Los resultados son practicamente identicos, aunque para el metodo de las deltas hay que solucionar el tema de los saltitos (chequear si la plataforma baja o sube), no sucede con un rigidbody claro.

A que te referis con lo de las rotaciones?

Con respecto al rigidbody siempre pense que me faltaba algun truco para que el movimiento sea fluido, despues de leer varias entrevistas y articulos me di cuenta que casi todos los estudios y/o desarrolladores creaban su propio controller por esta razon de los problemitas basicos que tenian al mover al player, escalones, rampas, plataformas, etc. Al final me hice uno parecido al que trae unity por default pero para 2D con steps, rampas, isGround y todo eso,

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...