Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

160
Vistas
Movimiento del jugador hacia adelante y hacia los lados

Así que mis amigos y yo estamos desarrollando un juego en el que juegas como una bola de nieve que rueda cuesta abajo evitando obstáculos. Sin embargo, estamos teniendo problemas con nuestro movimiento. Queremos que nuestra bola de nieve gane velocidad cuanto más grande sea y cuanto más tiempo pase sin golpear algo. Nuestro movimiento de avance está controlado por

 void FixedUpdate(){ rb.velocity += Physics.gravity * 3f * rb.mass * Time.deltaTime; //to accelerate rb.AddForce(0, 0, 32 * rb.mass); }

Estamos aplicando una fuerza lateral en la entrada clave

 if (Input.GetKey(ControlManager.CM.left)) { if (rb.velocity.x >= -15 - (rb.mass * 8)) { rb.AddForce(Vector3.left * sidewaysForce * (rb.mass * .5f), ForceMode.VelocityChange); } } if (Input.GetKey(ControlManager.CM.right)) { if (rb.velocity.x <= 15 + (rb.mass * 8)) { rb.AddForce(Vector3.right * sidewaysForce * (rb.mass * .5f), ForceMode.VelocityChange); } }

La masa aumenta a medida que aumenta la escala y viceversa.

El problema surge cuando la bola de nieve se vuelve más grande que cierta escala. Una vez que llega a ese punto, acelera masivamente hacia la izquierda y hacia la derecha mientras presiona las teclas y luego vuelve a su velocidad de avance cuando las suelta. Supongo que tiene algo que ver con la masa y la forma en que se combinan las fuerzas aplicadas.

¿Hay una mejor manera de acelerar nuestra bola de nieve cuesta abajo o moverla de izquierda a derecha? Probé transform.Translate y transform.MovePosition, pero conducen a un movimiento entrecortado hacia la izquierda y hacia la derecha.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Por un lado, la mayoría del código de movimiento debería multiplicar la velocidad por Time.deltaTime . En un juego hipotético, si aumentaste la velocidad en una cierta cantidad en cada cuadro, entonces alguien con una computadora robusta de 60 fps irá el doble de rápido que un pobre jugador de computadora portátil de 30 fps porque acelerará con menos frecuencia. Para arreglar esto, multiplicamos la aceleración por Time.deltaTime , que es el tiempo desde el último cuadro.

En lugar de este código, donde la velocidad de fotogramas determinaría la velocidad;

 Vector3 example = new Vector3(1,1,1); void Update() { rb.AddForce(example); }

Usaríamos este código. Si la velocidad de fotogramas es la mitad, Time.deltaTime será el doble, por lo que la aceleración será constante para todos los que la usen.

 Vector3 example = new Vector3(1,1,1); void Update() { rb.AddForce(example * Time.deltaTime); }

Puede haber otra fuente de este problema, aunque deshacerse de las dependencias de velocidad de fotogramas es un buen punto de partida. Parece que ya ha usado Time.deltaTime para la velocidad descendente, pero no para el movimiento lateral. Incluso si no soluciona el problema, usar Time.deltaTime es esencial para cualquier juego consistente.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda