¿Cómo puedo implementar la función de avance rápido para mi juego de defensa de la torre como en http://fieldrunners.com/ y otros juegos de TD?
Estoy usando Unity 3D. ¿Habría algo para gestionar menos fotogramas por segundo o algún tipo de movimiento rápido de enemigos establecido manualmente y velocidad de disparo de la torre, etc.?
unity
tower-defense
timing
Syed
fuente
fuente
Respuestas:
Si su juego no tiene simulaciones complicadas o computacionalmente costosas que requieren separarlas en líneas de tiempo de actualización independientes, puede usar un enfoque simple de basar el código en sus
Update()
funciones en el valor Time.time de Unity, y en su código establecer el valor de Time .timeScale para ser lo que quieras. 0 == en pausa, 1 = normal, a nuestros evaluadores les encanta establecer timeScale> 1 para hacer las cosas más rápido.http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html
fuente
Enfoque: mayor tasa de simulación
Su sincronización para su interfaz de usuario debe estar desacoplada de su ciclo de juego real, al igual que su representación. Digamos, por ejemplo, que su mundo corre a una velocidad 4x. Digamos que a tu velocidad básica (1x), tu juego ejecuta 30 actualizaciones por segundo.
Entonces tendría algo como lo siguiente, cuando esté en modo de avance rápido:
En otras palabras, el juego en su conjunto no funciona más rápido. La parte de simulación es.
Puedes deducir dos cosas de esto:
Debes mantener la lógica de tu juego lo suficientemente simple como para poder ejecutarla cuatro veces más rápido en tu plataforma objetivo, O necesitas introducir métodos para extrapolar varios aspectos de la jugabilidad más rápidamente; sin embargo, esto puede resultar en un modelo que es diferente de lo que hubiera sido si simplemente hubiera utilizado una simulación de ritmo más rápido. Por lo tanto, la compensación sería el costo de procesamiento por precisión. Ver enfoque 2, más abajo.
Es la separación de preocupaciones lo que le permite acelerar fácilmente su simulación mundial, siendo esa separación modelo, vista y controlador ( MVC ). Si sus datos mundiales (M), la lógica de procesamiento (V) y la lógica del juego (C) están todos mezclados, realmente no podrá hacer esto, al menos no sin una migraña masiva.
Enfoque: extrapolación basada en deltas de tiempo
Como se mencionó anteriormente, deberá calcular el movimiento en función de lo lejos que habría viajado algo en un momento dado. Sin embargo, esto supone que la física de su juego es inherentemente más realista en su simulación, lo cual puede no ser el caso. Este es un tema bastante más amplio y considerablemente más complejo. Tendrá que hacer más preguntas sobre si desea saber. Básicamente, harás algunos cálculos para hacer las cosas bien. Tendrá que lidiar con la interpenetración en colisiones y una serie de otros problemas que no abordaré aquí.
Para concluir
Esto te da el esquema general. Tu elección de idioma es tuya, presumiblemente sabes cómo hacerlo en Unity o no. El tiempo en cualquier idioma requiere que comprenda los entresijos en detalle, sugiero comenzar con los artículos de Gaffer y consultar los documentos de la API de Unity.
fuente
Como principio general, la actualización de la lógica del juego debe estar desacoplada de la actualización de los gráficos del juego, es decir, la simulación de su juego, IA, movimiento de la unidad, etc., no debe estar vinculada a la velocidad a la que se desarrolla el juego . Por lo general, el ciclo principal del juego calcula cuánto tiempo real ha transcurrido desde la última actualización del juego y envía ese paso de tiempo delta a las rutinas de actualización de cada objeto lógico del juego individual.
En tal escenario, se vuelve simple implementar la escala de tiempo (incluido el avance rápido) en su juego. Simplemente premultiply el paso del tiempo de la lógica del juego por un valor escalar que controla cuánto "adelantar" o ralentizar el tiempo. Por defecto, este valor sería uno y, por ejemplo, una vez que el usuario presiona la tecla "avance rápido", lo establece en 1.5, y toda la simulación parecería ir un 50% más rápido. Sin embargo, aún renderizarías al mismo ritmo.
No estoy muy familiarizado con Unity y, por lo tanto, podría estar equivocado en la siguiente sugerencia, pero Unity tiene un componente de gestión del tiempo que puede ser útil para implementar esto. De hecho, ya tiene una propiedad de escala de tiempo. La descripción del componente implica que la clase fue diseñada para objetos de física, pero también puede ser aplicable a su escenario.
fuente