En este tutorial vamos a ver cómo hacer que nuestro juego sea multiplayer a través de internet utilizando Photon. Vamos a ver un poco de serializado y un poco de RPCs. Un poco más de PlayerController, como se vio en el tutorial de plataformas. También algunos conceptos de “cómo y por qué” enviar los datos de una determinada manera por la red.
Buenas!
Antes de arrancar voy a aclarar que dividi este tutorial. En la primera parte explico Photon con un mini juego que subí tipo arena, para que vean cómo aplicarle red a un juego ya hecho. En la segunda muestro cómo sincronizar dos capsulas desde cero.
Bien… Vamos con la primer parte, que es básicamente un poco de configuración y algunas sentencias iniciales para arrancar conectándonos a los servidores de Photon. Recuerden que primero deberían entrar a https://www.photonengine.com/ y registrarse. Esto es para obtener un código para el juego que van a estar haciendo o probando. Dicho código lo vamos a usar al configurar el servidor, como van a ver en los videos.
Antes de ir a los videos, les dejo el proyecto base para que lo arranquen y lo sigan a la par, en el caso que deseen hacerlo:
[sdm_download id=”2386″ fancy=”2″ button_text=”CLICK PARA DESCARGAR” new_window=”1″][sdm_download_counter id=”2386″]
Y… El PowerPoint que voy a usar durante el video, lo pueden ver ACÁ.
Empecemos!
Ahora que pudimos conectar con Photon, crear un lobby y un room, y también spawnear a nuestro personaje a través de la red, tenemos la base para empezar a hacer cosas un poco más grandes. Lo que vamos a ver ahora es cómo sincronizar a nuestro personaje a través de la red. Nuestro personaje va a ser el “lider” de una serie de “avatares” que van a representarnos dentro de la red, y lo que debe hacer es enviar señales que indiquen a los avatares cómo representarnos. Cuando nosotros ejecutemos alguna acción, estos avatares que van a estar en las PCs de las demás personas deben imitarnos.
Ahora que sabemos algunas partes como la posición y rotación de nuestro personaje/tanque, estamos listos para aprender a sincronizar el resto de los “detalles”. La idea con lo que viene es solventar un problema en particular:
Entonces, lo que vamos a hacer a continuación, y es mostrar un método para que todo siempre esté en sincronía. Cuando una persona nueva entre a la mitad de una partida, todos sus datos deben estar sincronizados, ya que sino lo que pasaría es que al crear a todos en su computadora, esa persona vería que todos tienen el 100% de la vida, ya que no recibió la información de la partida, además de que ninguno hasta el momento la está sincronizando.
Ya sabemos sincronizar datos! Genial… Ahora… Una parte que también es importante son los llamados “RPCs”. Su significado es “Remote Procedure Call”. Básicamente es una función que puede ser llamada desde otra computadora. Esto nos sirve principalmente para que en lugar de sincronizar un grupo de datos, podamos llamar directamente a una acción específica dentro de los avatares que están en otras PCs, y así dejar que la acción que realizamos sea imitada y procesada a la vez por la computadora donde está nuestro avatar. Eso evita que haya demasiado tráfico de red.
Lo que hay que tener en cuenta en este punto es que, si bien nos ahorramos datos haciendo que cada avatar procese dentro de la PC correspondiente la acción a realizar, también puede pasar que no estén sincronizados los datos. Por ejemplo, si yo le digo a un personaje que dispare una bala, y la misma colisiona en una PC con un personaje que no estaba sincronizado AÚN (o sea, que no está en la posición que debería estar), ya sea porque aún no llegó la señal o porque la PC tiene algún retraso (o el motivo que sea), lo que puede pasar es que esa bala, si tiene física, se desvíe hacia otra posición. Si eso ocurre, al menos uno de nuestros usuarios vería que esa bala se desvía hacia otro lugar. Esto puede, O NO, ser un problema. Todo depende de cómo se piense. En muchas acciones puede que ni siquiera sea importante. De hecho, pasa todo el tiempo, y no nos damos cuenta la mayoría de las veces.
Y con esto ya podemos hacer online nuestros juegos!
Obviamente hay muchísimo más contenido detrás de la API de Photon, pero con esto es suficiente para empezar a meternos en los juegos online. El resto faltante les queda a ustedes. Siempre es bueno que sigan investigando y aprendiendo metodologías nuevas de conexión, optimización y estructura.
Por último les dejo un video que es un resumen de todo lo que vimos, aplicado desde cero. Lo que vamos a ver en este video básicamente es sincronizar a dos jugadores, empezando desde una escena en blanco y con assets fabricados en el momento. Úsenlo para repasar!
Y ahora sí llegamos al final del post. Como siempre espero que les sirva y cualquier duda que tengan no duden en preguntar.
No dejen de practicar!
Saludos.