Nunca antes había visto una característica así, pero debería proporcionar una interesante oportunidad de juego.
Entonces, sí, en un entorno multijugador / tiempo real (imagine FPS), ¿cómo podría implementar un efecto de cámara lenta / tiempo de bala?
Algo así como una ilusión para el jugador que actualmente está en cámara lenta. Entonces todos lo ven "en tiempo real", pero él ve que todo se ralentiza.
Actualizar
Una nota al margen: tenga en cuenta que un juego de FPS tiene que estar equilibrado para que sea divertido. Entonces, sí, esta función de tiempo de bala tiene que ser sólida, dando una pequeña ventaja al "jugador", mientras que no le quita a otros jugadores.
Además, existe la posibilidad de que dos jugadores puedan activar su tiempo de bala al mismo tiempo.
Además:
Voy a implementar esto en el futuro sin importar lo que haga falta. Y, la idea es construir un motor de juego completamente nuevo para todo esto. Si eso ofrece nuevas opciones, estoy más que interesado en escuchar las ideas.
Mientras tanto, aquí con mi equipo también estamos pensando en esto, cuando nuestra teoría sea elaborada, la compartiré aquí.
¿Es esto posible? Entonces, la pregunta sobre "¿es esto posible?" Ha sido respondida, ahora es el momento de encontrar la mejor solución.
Mantengo la "respuesta" hasta que surja algo excepcionalmente bueno, como una teoría prototipo con algo parecido al pseudocódigo que funciona.
Lo que dicen los físicos y filósofos:
Los enlaces son para su interés, porque los temas están cerrados.
Las condiciones en las que pensé al escribir la pregunta en el sitio de física (copiado):
- El jugador bajo los efectos de la cámara lenta tiene la ventaja de realizar acciones más precisas (disparos, movimiento, etc.), debido a que ve todo a un ritmo mucho más lento.
- Sus acciones deberían afectar a los otros jugadores en tiempo real.
- Los jugadores que miran a nuestro jugador afectado, no ven ninguna diferencia, excepto que pueden experimentar las acciones que ha realizado (como, el jugador recibe un disparo / el afectado esquiva un cohete).
- Cuando el jugador sale de este efecto, simplemente continúa al mismo ritmo que de costumbre. (Si esto no es posible, entonces supongo que tendrá que sufrir hasta que el tiempo se sincronice)
Referencias sobre el tiempo de bala (cámara lenta):
Lamentablemente, la mayoría de las implementaciones son solo para un jugador
http://www.gamesradar.com/a-videogame-history-of-bullet-time/
fuente
Respuestas:
Ya se ha hecho antes. :) Echa un vistazo a los especialistas , un mod de vida media que tiene dos potenciadores de bala diferentes.
EDITAR para incluir la información de zzzzbov a continuación
La forma en que funcionaba el tiempo de bala en "The Specialists" desde la perspectiva del juego era que el jugador podía obtener potenciadores que darían cantidades limitadas de "tiempo de bala". Cuando se usa, una burbuja alrededor del jugador reduciría su física.
Los jugadores lejanos se moverían a velocidad normal, pero cualquier cosa en la burbuja (balas, jugadores, explosiones) se ralentizaría. El jugador que usó el poder se movería un poco más rápido, lo que les permitiría huir o usar acrobacias para esquivar las balas.
Cualquier otra persona atrapada en la burbuja del "tiempo de bala" todavía tiene la ventaja de poder ver lo que está por suceder, pero la diferencia de velocidad relativa entre un jugador atrapado y las balas sigue siendo la misma, por lo que la capacidad de reacción es prácticamente inexistente.
fuente
No puedo pensar en ningún juego que tenga tiempo de bala en un solo jugador que lo haya transferido con éxito al modo multijugador de manera significativa. Puede haber algunos de ellos que lo resolvieron acelerando al jugador que lo usa, pero ese tipo de derrota el punto.
El tiempo de bala existe porque quieres hacer que el jugador se sienta como un rudo. Le estás dando al jugador una ventaja aparentemente injusta al simular una percepción de nivel superior. El resultado final de esto es que los jugadores pueden apuntar mientras hacen cosas interesantes como saltar de la cubierta, etc. Si solo aceleras al jugador mientras tienen habilitado el tiempo de bala, entonces les das menos tiempo para reaccionar, que es lo contrario de lo que quieres.
En un entorno multijugador síncrono, realmente no hay ninguna solución para el "tiempo de ralentización" activado por el usuario que simule la sensación de usarlo en un entorno de un solo jugador. Si el tiempo mismo se ralentiza, entonces la percepción de todos aumenta. Especialmente en un juego de PC donde la puntería del mouse es generalmente instantánea, todos obtendrían el beneficio de objetivos más lentos.
Ahora, si estabas empeñado en esto, mi sugerencia sería, en lugar de convertirlo en una función activada por el jugador, convertirlo en un "estado" de encuentro. Piensa como una película de John Woo donde es el bueno contra el malo y todo parece disminuir mientras se disparan el uno al otro. Entonces, cuando comience un "encuentro", encienda cámara lenta y podrá obtener algunos efectos interesantes. Chicos saltando y cosas rebotando de golpes de bala perdidos flotando en el aire, y todo eso. Por supuesto, esto solo funcionaría realmente para un juego 1 contra 1. No obtendrías el beneficio unilateral del tiempo de bala como en un juego de un solo jugador, pero podría ser una experiencia de juego interesante.
fuente
Pensamientos generales
Este es un problema que se describe mejor utilizando la relatividad general; tomemos por ejemplo el hecho de que puede ver los efectos del tiempo de bala simplemente mirando a través de su telescopio a un satélite (la causa del infame neutrino que viaja más rápido que el problema de la luz) - ecuaciones que son solucionables existen bajo estas condiciones; lo que significa que es completamente posible.
Su juego deberá ser capaz de manejar marcos de referencia separados, por lo que sé, el efecto neto de esto sería ('jugador' es la persona con tiempo de bala activo):
Afortunadamente para ti, esto significa que un jugador en tiempo de bala tiene una ventaja sobre todos los demás; posiblemente no pueden apuntar a él, sin embargo, no sería convincente porque la persona promedio no esperaría ver una diferencia perceptible al observar la dilatación del tiempo.
Le recomiendo que publique esto en física (indique que es un juego, pero necesita un conocimiento teórico real) y pida ideas sobre cómo aproximaría el efecto en una simulación concurrente.
Una posible solución que consideraría es hacer que el mundo se ponga al día con el jugador (ya que se ha movido hacia el futuro) haciendo que todos experimenten una cantidad progresiva (mucho menos que el tiempo real de bala) del tiempo de bala dependiendo de muy lejos (en tiempo) son. De esta manera, podría aproximar las diferencias de tiempo sin tener que lidiar con el almacenamiento del estado pasado, etc. Necesitaría alguna forma de explicar este efecto, 'rebote de tiempo' o algo así, porque no es físicamente correcto.
Otra idea es abusar de las ecuaciones físicas más básicas (
s = d/t
), cuando un jugador entra en el tiempo de bala todo se vuelve más pequeño, si reduce a la mitad el tamaño de todo desde su perspectiva, pero mantiene su velocidad igual de acuerdo con su marco de referencia original, (efectivamente doblarlo) la ecuación aún se equilibrará. Las secuencias de distorsión de deformación en las películas espaciales usan esta dilatación espacial para representar el efecto, por lo que las personas están acostumbradas a verlo.Solución real
He pensado en esto aún más. Si observa cómo funciona el sistema de red Steamworks ( ¿alguien tiene un enlace? ), El servidor se adelanta constantemente en cierta medida; y cada cliente conoce el 'próximo' marco al que debe interpolar.
Digamos, por ejemplo, que el servidor está 20ms por delante de todos los jugadores. Cuando un jugador ingresa al tiempo de bala, cambie su intervalo de actualización a 40 ms (su simulación se ejecutará en pasos de tiempo de 40 ms y el servidor pondrá en cola sus acciones 40 ms en el futuro), lo que básicamente empujará hacia el futuro en referencia a otros jugadores: además para hacerlo moverse más rápido desde su referencia y hacer que se muevan más lento desde el suyo. Una vez que deja el tiempo de bala, dale a todos los demás una ventaja de 5 ms sobre él para que puedan jugar 'ponerse al día' (este es tu
time rebound
, coincidentemente, los jugadores inteligentes tendrán tiempo de bala durante estos períodos de recuperación). Puede parecer un poco mejor si asigna una parábola a su paso de tiempo; esto hará que las cosas se desaceleren, se detengan y luego se aceleren gradualmente nuevamente.Descargo de responsabilidad: no soy físico, pero tengo un conocimiento práctico de la relatividad.
fuente
Quería agregar $ 0.02, ya que implementé un modo prototipo de tiempo de bala que funcionaba en juegos multijugador para Heroes Over Europe .
En un jugador, presionar un botón en el momento adecuado ralentizaría el tiempo y acercaría el objetivo deseado. No quería ralentizar el tiempo globalmente en el modo multijugador para replicar la función (¡ya que el juego era compatible con 16 jugadores simultáneos!), Así que utilicé un método de "burbuja".
Específicamente, cuando se activó el modo de tiempo de bala, se creó una esfera alrededor del avión objetivo. La velocidad del paso del tiempo cambió dependiendo de la distancia al centro de la esfera; tiempo degradado linealmente desde su superficie a un valor mínimo en algún lugar cerca del centro. La tasa también cambió en función de cuánto tiempo había existido la esfera y cuánto tiempo le quedaba antes de "evaporarse".
Esto se sincronizó a través de máquinas enviando un paquete que definía una hora de inicio futura para la burbuja; Esto permitió que el efecto permaneciera sincronizado a pesar de la latencia. (Del mismo modo, cuando el efecto debía terminar antes, un paquete declararía el momento futuro en el que debía terminar).
La velocidad del paso del tiempo siempre se definió funcionalmente: dada la definición de una esfera, el tiempo actual y una posición, era posible determinar qué tan rápido fluía el tiempo.
Para que el efecto funcione, varios sistemas de juego tuvieron que adaptarse a esta definición de tiempo "funcional". Los aviones, las balas, los misiles y otros efectos utilizaron un individuo
dt
que se resolvió llamando a la función apropiada. La mayor parte del trabajo para lograr que el prototipo funcione se gastó aquí.El resultado funcionó razonablemente bien: un jugador objetivo del tiempo de bala reduciría notablemente la velocidad y tendría una (pequeña) oportunidad de salir de la mira de su agresor y alejarse de una lluvia de balas de cámara lenta. Los jugadores cercanos podían ver aviones y balas esquivándose unos a otros en cámara lenta, pero por lo demás no se vieron afectados.
Tenga en cuenta que el jugador que disparó también se ralentizó, pero no estaba estrictamente en desventaja: tenía una vista ampliada de su objetivo y podía afectar las muertes de un disparo en su presa. Otro jugador podría intentar matarte (¡o matar robar!) En este estado, pero su avión (y sus balas) se verían afectados al entrar en la burbuja, dándote tiempo para escapar.
Desafortunadamente, aunque funcionó, nunca tuvimos tiempo de completar y pulir la función para multijugador, por lo que se eliminó. (Un jugador aún conserva la característica, como "Ace Kill").
fuente
Realmente no es tiempo de bala, pero podría ser divertido:
¿Qué pasa con algo similar a la forma en que Braid hace la cosa de ralentización del tiempo? Es decir, cuanto más cerca de la persona que está experimentando el tiempo de bala, más despacio van las cosas ... y si estás fuera de la esfera de influencia, el tiempo fluye normalmente.
... por ejemplo, si el jugador A pasa tiempo de bala, coloca una esfera graduada de "tiempo lento" a su alrededor para que pueda apuntar correctamente, pero no necesariamente moverse más rápido, entonces el jugador B disparando balas contra él tendría que predecir en exceso dónde golpeará la bala, ya que se ralentizará cuanto más se acerque a él.
Sin embargo, cuanto más pienso en esto, menos creo que funcione, porque podría hacer que el Jugador A sea un objetivo fácil (ya que su cabeza se ralentizaría), pero de todos modos sería interesante verlo en 3D.
fuente
Sé que esta es una vieja pregunta, pero tuve dificultades para no mencionar el problema con la mayoría de las respuestas relacionadas con la relatividad
Implementado con los efectos descritos en la pregunta, el tiempo de bala en el modo multijugador no es posible.
La razón de con es cómo funciona la relatividad; algunos de ustedes lo han mencionado y obviamente entienden la relatividad, pero el problema es que sus modelos están configurados incorrectamente.
Muchas personas han usado la "referencia del jugador A frente al jugador B" en sus respuestas, pero lamentablemente ninguna de esas cosas existe realmente. Sí, tienes jugadores, tal vez incluso muchos de ellos, y sí, pueden controlar e interactuar con su mundo y tener su propia perspectiva del juego, pero la perspectiva no es un punto de referencia en el tiempo: es solo un espacio XYZ proyectado en el XY avión.
Solo hay un punto de referencia de tiempo y ese es el servidor (o host). Solo hay una visión del estado físico del mundo y, por lo tanto, solo un punto de referencia. Lo que los jugadores ven en su pantalla son diferentes vistas gráficas de la misma simulación física.
Hacer que un jugador vea una simulación ejecutada a una velocidad y que otra vea la misma simulación a otra velocidad y no tenga una desincronización simplemente no es posible. En alguna parte, algo tiene que ceder.
Cualquier esfuerzo para tener simulaciones múltiples o hacer que el servidor se ejecute antes que los clientes simplemente no tiene sentido. El efecto tal como se describe en la publicación simplemente no se puede hacer sin forzar el punto de referencia único o dejar que las ideas se desvíen y decirles a los jugadores que sus acciones realmente no sucedieron después del hecho.
Creo que la mejor solución es similar a una ya dada, que es tener un efecto similar a una trenza donde tu velocidad cambia en una burbuja alrededor del jugador. Dicho esto, el jugador no disminuirá la velocidad y la burbuja siempre se colocará y se moverá con él en el centro. Esto hace que el jugador se mueva a toda velocidad mientras que los más cercanos a él se sienten más lentos. Obtiene su ventaja de poder y las personas lejos de esa área no sienten efecto. Los que están cerca se ralentizan, pero sería obvio que alguien está usando el poder (sugeriría resaltar de alguna manera al jugador que lo está usando para que los jugadores oponentes entiendan completamente lo que está sucediendo y por qué).
fuente
Sería muy incómodo. Sin siquiera mirar el problema de la dilatación del tiempo, imagina que eres el jugador que solo pasó 4 segundos en tiempo de bala, mientras que todos los demás en el juego pasaron 2 segundos en tiempo real. Dado que el mismo tiempo pasó para todos en realidad, de alguna manera tendrías que "recuperar" esos dos segundos en el juego. Entonces, en algún momento, deberías "omitir" 2 segundos de tiempo de juego, o pasar un poco de tiempo corriendo más rápido de lo normal, o algo más que probablemente haría que el tiempo de bala sea un desperdicio.
Además, está todo sobre tener que enviar lo que haces a los 2 segundos de tu tiempo en el tiempo 1 segundo a todos los demás.
fuente
Lanza mini eventos rápidos como el tiempo al jugador para esquivar las balas o realizar un seguimiento automático de los objetivos enemigos, mientras haces que los movimientos de tu jugador se vean borrosos o "escalonados" para los otros jugadores (para que no se rasquen la cabeza por qué sus balas no son No golpear). Esa parece ser la traducción más simple y práctica que podrías hacer para el modo multijugador.
Me imagino que cualquier otra solución implica que se cambie algún elemento físico del juego para uno o más jugadores que no se aplica en paralelo para los demás.
fuente
Simplemente ralentiza a todos los demás, excepto al jugador que experimenta el tiempo de bala. Puede hacer esto simplemente disminuyendo la sensibilidad de su mouse.
fuente
Digamos que tenemos al jugador A en tiempo de bala y al jugador B en tiempo real. Y hacen lo siguiente desde el punto de vista del jugador B:
Ahora, desde el punto de vista del jugador A, esto tomará el doble de tiempo, ya que el mundo se mueve más lento para él:
Finalmente, el servidor tiene los siguientes eventos:
Entonces, tenemos dos problemas iniciales. La primera es que A ahora tiene 3 segundos de tiempo de juego detrás de todos los demás. Esta podría ser una mecánica de juego interesante si tuviera un concepto que significara que tenía que pagar esta deuda. Imagine un juego de disparos basado en la cobertura en el que puede activar el tiempo de bala para atravesar el campo abierto, pero una vez que esté seguro bajo cobertura, debe permanecer quieto hasta que el resto del mundo lo alcance (los tres segundos de tiempo que perdió se repiten )
El segundo problema es mucho más grande. El servidor necesita reorganizar los eventos cronológicamente para cada jugador y determinar el resultado. En primer lugar, B dispara a A: esto sucede tres segundos en el juego, y A lo ve a los 6 segundos, hasta ahora no hay problema. A los 4 segundos, el jugador A dispara a B. En la línea de tiempo de B esto sucedió hace dos segundos. Entonces, ¿qué hacemos con los dos segundos de juego que ya pasó para él, incluido su tiro a A?
Podríamos anularlo, básicamente decir: "Sé que el jugador B cree que le disparó a ese tipo, pero resulta que ya estaba muerto, así que pretendamos que eso nunca sucedió". Esta sería una experiencia horrible, muy similar al retraso, pero resolvería el problema. .
Podríamos hacer el evangelio de ambas líneas de tiempo: use el punto de vista de los servidores como toda la verdad y preocúpese por la línea de tiempo de cada persona de forma independiente. A los 3 segundos, B dispara a A y lo mata. A los 4 segundos, A dispara a B y lo mata. Ambos jugadores mueren por disparos que no vieron. No suena bien, pero tal vez hay una buena manera de hacerlo después de dar a todos los jugadores un breve curso en el loco mundo de la relatividad.
Podríamos tener un sistema pseudo-en tiempo real, un juego basado en turnos en el que primero planificas tus movimientos y luego activas un cálculo simultáneo de eventos. Una buena solución que soluciona todos los problemas además de no ser el tipo de juego que quieres escribir.
Larga historia corta no creo que hay una buena manera de poner en práctica el tiempo bala tratarla en el sentido clásico siendo el efecto sobre la persona que lo usa - que se mueven más rápido, que ven el mundo como más lento, todo el mundo lleva a cabo de forma normal. Si lo revertimos y todos los demás se ven empujados al punto de vista del temporizador de bala y se ven a sí mismos moviéndose más lentamente y sus controles se vuelven lentos, entonces todo sucede en sincronización y no hay problemas. ¿Pero es realmente ese momento de bala? Si bien puede parecerle a un observador externo (y en repeticiones de partidos) ninguno de los participantes obtendría el efecto que esperaban.
fuente
No, no es posible. Imagina que un jugador gira a cámara lenta, ¿qué verían los otros jugadores? Querrías que vean al jugador del tiempo bala moverse normalmente pero con reflejos de relámpagos, ¿verdad? Pero desafortunadamente, todos los que jueguen jugarán en el mismo tiempo real. Por lo tanto, la única forma de hacerlo sería ralentizar todo el juego, deshacerse de cualquier ventaja que brinde, ya que todos estarían en tiempo de bala. También sería bastante molesto hacer que el juego se ralentice todo el tiempo cuando alguien presiona ese botón.
Hay soluciones que darían como resultado que los jugadores tengan una ventaja similar (una de poder moverse más rápido, etc.), por ejemplo, ralentizando a todos los demás y permitiéndole moverse normalmente (luego, en una repetición, podría acelerarlos a la normalidad y reaccionar rápido) pero no creo que eso sea realmente lo que quieres.
fuente
FEAR tenía tiempo de bala en el modo multijugador, pero se aplicaba a todo el equipo y ralentizaba a todos en el otro equipo.
El tiempo de bala en el modo multijugador en tiempo real sin realmente ralentizar a los demás desincronizaría a los clientes, el jugador de cámara lenta reaccionaría a los eventos que los otros jugadores hicieron hace mucho tiempo mientras reaccionarían a los eventos actuales.
fuente
Tal vez debería organizar el equipo necesario para disparar al jugador en la PC que activó el tiempo de bala en el espacio a velocidades cercanas a la velocidad de la luz.
Esto resolvería todos sus problemas, pero puede generar un ping / latencia más alto.
fuente
bueno, no sería un problema si todos se mueven más lento de lo habitual pero no demasiado lento y el que lo activa se mueve más rápido como sumergir todo el juego bajo el agua o llevarlo al espacio exterior con el que se activa moviéndose tan pacíficamente como siempre
fuente