Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

164
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda