Buenas, me ha dado por tontear en Unity y estoy haciendo un juego (por decir algo) 2D con una movilidad parecida a la de Mario Galaxy (pequeños planetas que te atraen pero puedes moverte por la superficie).
Para el movimiento que busco me resulta un poco feo utilizar Rigidbody, así que estoy codificando el movimiento directamente seteando transform.position. No me está quedando del todo mal, y más o menos va saliendo lo que quiero, pero dándole una vueltas me ha venido una idea a la cabeza y no sé exactamente cómo afrontarla.
He leído que prácticamente siempre viene bien utilizar Time.deltaTime al tratar con movimientos, para evitar que la velocidad sea dependiente del framerate al que se mueva el juego. Hasta ahí todo correcto, pero la duda que me asalta viene al pensar en posibles ocasiones de caída del framerrate.
Si mi juego se estuviera ejecutando en una tostadora, y por algún motivo la tasa de frames bajara a menos de 1FPS, Time.deltaTime pasaría a ser más de 1, por lo que la velocidad de movimiento se estaría multiplicando por esa cantidad. Supongamos que mi velocidad de movimiento base es 10f, y normalmente la multiplico por valores en torno 0.02f, por lo que cada frame me estaría moviendo en torno a 0.02 unidades. Si de pronto ocurre una bajada a 0.5FPS, la velocidad de ese frame sería 10*2 = 20 unidades.
Aplicado a mi ejemplo, ese salto en la velocidad podría conllevar que en lugar de desplazarme por la superficie del planeta, ocurriera un salto que me sacara del radio de atracción, por lo que quedaría vagando en el espacio. Olvidando mi ejemplo, esto podría suponer que el personaje atraviese paredes que en un principio no debería poder atravesar.
¿Cómo se podría afrontar esto? He preguntado en el hilo de la taberna, y alguien me ha mencionado el FixedUpdate, pero no sé cómo entraría aquí, ya que el movimiento lo estoy realizando en el Update, ¿quizá debería cambiarlo?
Otra opción que se me ha ocurrido es la posibilidad de pasar a utilizar un valor fijo para Time.deltaTime sólo si el framerate cae por debajo de un valor definido, pero no sé hasta que punto esto podría ser buena práctica (que me da que no).
Al final me ha quedado una buena biblia, pero bueno, muchas gracias de antemano.
RPV: Si los FPS bajan de más (< 1FPS), y la velocidad se está multiplicando por Time.deltaTime, la velocidad en ese frame podría ser tan grande que el objeto que se mueve atraviese paredes. ¿Cómo se soluciona esto?