En este momento estás viendo ¿Cómo usar FixedUpdate y Update correctamente?

 – Unity

¿Cómo usar FixedUpdate y Update correctamente? – Unity

¿Cómo usar FixedUpdate y Update correctamente?

– UnityAssets3Free

buenas , me llamo Daniel y esta vez os traigo
esta nueva pregunta

Primero, soy nuevo aquí, así que lo siento si cometo errores de novato, como no decir algo que debería ser obvio como el mío. unity versión o cualquier otra cosa. (Y esta es mi primera publicación, así que no sé cómo usar esto, tampoco soy inglés, así que lo siento por mi mal inglés)

Versión de Unity: 2019.4.26f1 LTS

Esto es para un proyecto 2D, pero la pregunta es global, para 2D y 3D.

De todos modos, quiero saber cómo separar mi unity código (C#) correctamente.

Por ejemplo: digamos que quiero algo como esto: (solo estoy usando un código inventado para explicar más rápido)

if(grounded && PressKey("D"))

rigibody2d.velocity = ...


if(!grounded && PressKey("D"))

rigibody2d.velocity = ...

Por lo que sé, FixedUpdate debería usarse para la física, entonces, ¿cómo uso

rigibody2d.velocity = ...

en una FixedUpdate, pero el

if(!grounded && PressKey("D"))

en la actualizacion?

Solo tengo una idea y es esta:

private bool haspressedD = false;

Update()

    if(!grounded && PressKey("D"))
    
      haspressedD = true
    


FixedUpdate()

   if(haspressedD)
   
     rigibody2d.velocity = ...
   

Y sí, eso también me parece horrible.

Espero que este ejemplo aclare mi pregunta, puede preguntar si no. Otra cosa importante es que quiero usar FixedUpdate() porque la velocidad se ve diferente en mi juego si cambio la computadora, y sí lo hago:

rigibody2d.velocity = ... * Time.deltatime

Con algunos movimientos funciona, pero no para todos.

Cualquier ayuda será apreciada

1 respuesta 1

La diferencia entre Update y FixedUpdate es la frecuencia con la que se ejecutan estas funciones.

Como su nombre lo indica, FixedUpdate se ejecuta a intervalos fijos. Puede ajustar este intervalo de tiempo en la configuración física de sus proyectos.

La función Actualizar, sin embargo, se llama cada actualización de cuadro. Por lo tanto, está directamente relacionado con la velocidad de fotogramas y, por lo tanto, el rango de tiempo aquí no es constante. Por ejemplo. si la velocidad de fotogramas es de 30 fps, eso significa una actualización cada 33 milisegundos (1000/30). La razón por la que no es constante es porque el juego puede experimentar retrasos y caídas en la velocidad de fotogramas.

Como regla general, generalmente desea realizar todas las actualizaciones de física en la función FixedUpdate.

Dado que está configurando la propiedad de velocidad en una constante, no es necesario usar Time.deltaTime.

Entonces, ya sea en su actualización o actualización fija:

if(!grounded && Input.GetKey(KeyCode.D))

   rigibody2d.velocity = desiredVelocity

Por lo general, multiplicaría por Time.deltaTime en la función Actualizar para corregir velocidades de cuadro inconsistentes cuando, por ejemplo, aumente la velocidad o cambie de posición.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

por hoy,espero que te halla servido

Deja una respuesta