Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

163
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!