Unreal FPS First Person Shooter

Review Animation Blueprint – Unreal FPS (First Person Shooter) | Unreal Engine Marketplace Asset

Te invito a que en ésta oportunidad descubras una forma de realizar un videojuego con Unreal Engine de calidad AAA rápido y fácil utilizando el asset gratuito oficial que proporciona dicho motor de desarrollo de videojuego. La verdad es que no lo vas a desaprovechar y bien vale la pena. Acompáñame a darle una breve revisión te esperamos.

¿Quieres acceder a nuestros proyectos?

¡Registrate y hazte Premium!

  • Si quieres avanzar a un nuevo nivel en tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de intereses dentro de ZoeGeop, sino que también dispondrás de acceso exclusivo a materiales, soporte y recursos de nuestros proyectos en curso los cuales iremos actualizando constantemente para que puedas utilizarlos libremente e implementarlos en tus propios proyectos. Contarás además con 3 sesiones de asesoría a tu proyecto por parte del equipo de ZoeGeop al mes.
    Nota: Por cada sesión adicional tendrá un costo adicional.Si quieres avanzar a un nuevo nivel en tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de intereses dentro de ZoeGeop, sino que también dispondrás de acceso exclusivo a materiales, soporte y recursos de nuestros proyectos en curso los cuales iremos actualizando constantemente para que puedas utilizarlos libremente e implementarlos en tus propios proyectos. Contarás además con 1 sesión de asesoría a tu proyecto por parte del equipo de ZoeGeop al mes.
    Nota: Por cada sesión adicional tendrá un costo adicional.Si quieres disfrutar y difundir tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de interés dentro de ZoeGeop, sino que también podrás dar a conocer tus proyectos en nuestro marketplace global para que cualquier comprador o donante pueden contribuir al crecimiento de tu proyecto.

Processing. Please wait…

¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Twitter

 

Facebook

 

Instagram

 

Linkedin

 

Pinterest

Unity 3D Multiplayer Tutorial FPS Photon AI NPCs Parte 9

En ésta oportunidad hemos creado una mecánica de juego donde implementamos NPC’s con AI para que nuestro juego no sólo pueda funcionar con lógica multijugador con Photon sino que pueda tener jugadores con inteligencia artificial dentro del juego para darle mayor jugabilidad y dinamismo al mismo. Si hay una función multijugador que desea que hagamos, comenta y háganoslo saber.

PlayerMovement

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
    private PhotonView PV;
    private CharacterController myCC;
    public float movementSpeed;
    public float rotationSpeed;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        myCC = GetComponent<CharacterController>();
    }
    // Update is called once per frame
    void Update()
    {
        if(PV.IsMine && PhotonNetwork.IsConnected)
        {
            BasicMovement();
            BasicRotation();
        }
    }
    void BasicMovement()
    {
        if(Input.GetKey(KeyCode.W))
        {
            myCC.Move(transform.forward * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.A))
        {
            myCC.Move(-transform.right * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.S))
        {
            myCC.Move(-transform.forward * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.D))
        {
            myCC.Move(transform.right * Time.deltaTime * movementSpeed);
        }
    }
    void BasicRotation()
    {
        float mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * rotationSpeed;
        transform.Rotate(new Vector3(0, mouseX, 0));
    }
}

AvatarSetup

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AvatarSetup : MonoBehaviour
{
    private PhotonView PV;
    public GameObject myCharacter;
    public int characterValue;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        if (PV.IsMine)
        {
            PV.RPC("RPC_AddCharacter", RpcTarget.AllBuffered, PlayerInfo.PI.mySelectedCharacter);
        }
    }
    [PunRPC]
    void RPC_AddCharacter(int whichCharacter)
    {
        characterValue = whichCharacter;
        myCharacter = Instantiate(PlayerInfo.PI.allCharacters[whichCharacter], transform.position, transform.rotation, transform);
    }
}

MenuController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MenuController : MonoBehaviour
{
    public void OnClickCharacterPick(int whichCharacter)
    {
        if (PlayerInfo.PI != null)
        {
            PlayerInfo.PI.mySelectedCharacter = whichCharacter;
            PlayerPrefs.SetInt("MyCharacter", whichCharacter);
        }
    }
}

PlayerInfo

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInfo : MonoBehaviour
{
    public static PlayerInfo PI;
    public int mySelectedCharacter;
    public GameObject[] allCharacters;
    private void OnEnable()
    {
        if (PlayerInfo.PI == null)
        {
            PlayerInfo.PI = this;
        }
        else
        {
            if (PlayerInfo.PI != this)
            {
                Destroy(PlayerInfo.PI.gameObject);
                PlayerInfo.PI = this;
            }
        }
        DontDestroyOnLoad(this.gameObject);
    }
    // Start is called before the first frame update
    void Start()
    {
        if (PlayerPrefs.HasKey("MyCharacter"))
        {
            mySelectedCharacter = PlayerPrefs.GetInt("MyCharacter");
        }
        else
        {
            mySelectedCharacter = 0;
            PlayerPrefs.SetInt("MyCharacter",mySelectedCharacter);
        }
    }
}

¿Quieres acceder al proyecto completo?

¡Registrate y hazte Premium!

  • Si quieres avanzar a un nuevo nivel en tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de intereses dentro de ZoeGeop, sino que también dispondrás de acceso exclusivo a materiales, soporte y recursos de nuestros proyectos en curso los cuales iremos actualizando constantemente para que puedas utilizarlos libremente e implementarlos en tus propios proyectos. Contarás además con 3 sesiones de asesoría a tu proyecto por parte del equipo de ZoeGeop al mes.
    Nota: Por cada sesión adicional tendrá un costo adicional.Si quieres avanzar a un nuevo nivel en tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de intereses dentro de ZoeGeop, sino que también dispondrás de acceso exclusivo a materiales, soporte y recursos de nuestros proyectos en curso los cuales iremos actualizando constantemente para que puedas utilizarlos libremente e implementarlos en tus propios proyectos. Contarás además con 1 sesión de asesoría a tu proyecto por parte del equipo de ZoeGeop al mes.
    Nota: Por cada sesión adicional tendrá un costo adicional.Si quieres disfrutar y difundir tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de interés dentro de ZoeGeop, sino que también podrás dar a conocer tus proyectos en nuestro marketplace global para que cualquier comprador o donante pueden contribuir al crecimiento de tu proyecto.

Processing. Please wait…

¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Twitter

 

Facebook

 

Instagram

 

Linkedin

 

Pinterest

Photon FPS Game Multiplayer

Si alguna vez estás construyendo un juego de disparos en primera persona para varios jugadores en Unity usando el complemento Photon, podrías encontrarte con este problema. El problema que discutimos es cuando tienes más de una cámara en tu escena porque hay una cámara conectada a cada objeto jugador. Esto hará que las cámaras se apilen una encima de la otra y que la cámara superior o principal no sea su cámara en primera persona, lo que significa que mientras controla su objeto de jugador local, es posible que no esté viendo su reproductor a través de su cámara.

Para solucionar este problema, debe desactivar la cámara de cada objeto de jugador que no sea su objeto de jugador local. Necesitará usar el componente de vista de Photon para verificar si la variable mía es falsa. Si es así, deberá usar una variable de cámara y establecer la variable de habilitación en falso. Esto hará que solo tengas una cámara activa en tu escena multijugador y esa será tu cámara local en primera persona. Al final de ésta implementación podrás tener la configuración para un prototipo de juego multijugador con camara independientes por cada player en la sala.

Este es el siguiente vídeo de nuestra nueva serie de tutoriales multijugador de Unity 2020, Photon. Esta lista de reproducción incluirá lecciones más avanzadas relacionadas con el complemento Photon. Si hay una función multijugador que desea que hagamos, háganoslo saber.

Clase PlayerMovement

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
    private PhotonView PV;
    private CharacterController myCC;
    public float movementSpeed;
    public float rotationSpeed;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        myCC = GetComponent<CharacterController>();
    }
    // Update is called once per frame
    void Update()
    {
        if(PV.IsMine && PhotonNetwork.IsConnected)
        {
            BasicMovement();
            BasicRotation();
        }
    }
    void BasicMovement()
    {
        if(Input.GetKey(KeyCode.W))
        {
            myCC.Move(transform.forward * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.A))
        {
            myCC.Move(-transform.right * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.S))
        {
            myCC.Move(-transform.forward * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.D))
        {
            myCC.Move(transform.right * Time.deltaTime * movementSpeed);
        }
    }
    void BasicRotation()
    {
        float mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * rotationSpeed;
        transform.Rotate(new Vector3(0, mouseX, 0));
    }
}

Clase AvatarSetup

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AvatarSetup : MonoBehaviour
{
    private PhotonView PV;
    public GameObject myCharacter;
    public int characterValue;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        if (PV.IsMine)
        {
            PV.RPC("RPC_AddCharacter", RpcTarget.AllBuffered, PlayerInfo.PI.mySelectedCharacter);
        }
    }
    [PunRPC]
    void RPC_AddCharacter(int whichCharacter)
    {
        characterValue = whichCharacter;
        myCharacter = Instantiate(PlayerInfo.PI.allCharacters[whichCharacter], transform.position, transform.rotation, transform);
    }
}

Clase MenuController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MenuController : MonoBehaviour
{
    public void OnClickCharacterPick(int whichCharacter)
    {
        if (PlayerInfo.PI != null)
        {
            PlayerInfo.PI.mySelectedCharacter = whichCharacter;
            PlayerPrefs.SetInt("MyCharacter", whichCharacter);
        }
    }
}

Clase PlayerInfo

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInfo : MonoBehaviour
{
    public static PlayerInfo PI;
    public int mySelectedCharacter;
    public GameObject[] allCharacters;
    private void OnEnable()
    {
        if (PlayerInfo.PI == null)
        {
            PlayerInfo.PI = this;
        }
        else
        {
            if (PlayerInfo.PI != this)
            {
                Destroy(PlayerInfo.PI.gameObject);
                PlayerInfo.PI = this;
            }
        }
        DontDestroyOnLoad(this.gameObject);
    }
    // Start is called before the first frame update
    void Start()
    {
        if (PlayerPrefs.HasKey("MyCharacter"))
        {
            mySelectedCharacter = PlayerPrefs.GetInt("MyCharacter");
        }
        else
        {
            mySelectedCharacter = 0;
            PlayerPrefs.SetInt("MyCharacter",mySelectedCharacter);
        }
    }
}

¿Quieres acceder al proyecto completo?

¡Registrate y hazte Premium!

  • Si quieres avanzar a un nuevo nivel en tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de intereses dentro de ZoeGeop, sino que también dispondrás de acceso exclusivo a materiales, soporte y recursos de nuestros proyectos en curso los cuales iremos actualizando constantemente para que puedas utilizarlos libremente e implementarlos en tus propios proyectos. Contarás además con 3 sesiones de asesoría a tu proyecto por parte del equipo de ZoeGeop al mes.
    Nota: Por cada sesión adicional tendrá un costo adicional.Si quieres avanzar a un nuevo nivel en tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de intereses dentro de ZoeGeop, sino que también dispondrás de acceso exclusivo a materiales, soporte y recursos de nuestros proyectos en curso los cuales iremos actualizando constantemente para que puedas utilizarlos libremente e implementarlos en tus propios proyectos. Contarás además con 1 sesión de asesoría a tu proyecto por parte del equipo de ZoeGeop al mes.
    Nota: Por cada sesión adicional tendrá un costo adicional.Si quieres disfrutar y difundir tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de interés dentro de ZoeGeop, sino que también podrás dar a conocer tus proyectos en nuestro marketplace global para que cualquier comprador o donante pueden contribuir al crecimiento de tu proyecto.

Processing. Please wait…

¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Síguenos en Twitter

 

Síguenos en Facebook

 

Síguenos en Instagram

 

Síguenos en Linkedin

 

Síguenos en Pinterest

Unity Visual Studio Debug

Visual Studio Code es una gran herramienta para editar scripts de Unity. Aprenda a usar los dos juntos y vea algunas extensiones excelentes para hacer una experiencia aún mejor.

Escribir scripts de Unity en C#

IntelliSense y navegación por el código para C#

Visual Studio ofrece prácticas características a los programadores de C#. Escriba código rápidamente y con precisión mediante IntelliSense. Navegue por los scripts fácilmente y use las prácticas capacidades de refactorización.

Depurar en Visual Studio

Depuración internacional para juegos Unity en Visual Studio

Visual Studio ofrece una experiencia de depuración de primer nivel al motor de juegos Unity. Identifique problemas rápidamente depurando sus juegos Unity en Visual Studio. Establezca puntos de interrupción para evaluar variables y expresiones complejas.

Mejora de la productividad

IDE completo para Unity

Personalice el entorno de codificación exactamente del modo que desee (seleccione su tema favorito, color, fuentes y el resto de configuraciones). Además, cree métodos de script de Unity dentro de Visual Studio rápidamente mediante los asistentes de implementar MonoBehaviours y MonoBehaviours rápidos. Explore el proyecto como si estuviese en Unity con Unity Project Explorer.
¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Twitter

 

Facebook

 

Instagram

 

Linkedin

 

Pinterest

Tecnología Machine Learning el presente del procesamiento de datos

¿Qué tienen en común las recomendaciones de Netflix, las respuestas inteligentes de Gmail o la voz de Siri y Alexa? La respuesta es que vienen de máquinas que van aprendiendo en la medida que las usas, es lo que se conoce como Machine Learning o Aprendizaje Automático.

Así es, Netflix no tiene detrás a un humano vigilando los datos de las series o películas que ves o cuáles viste completas y cuáles no. Ese trabajo lo hace una computadora que va aprendiendo a medida que navegas en la aplicación. Y de allí va armando sus recomendaciones y aunque no siempre sean acertadas, ese es otro dato, del cual aprende.

El Machine Learning es un área de inteligencia artificial (IA) que ayuda a las computadoras o las máquinas a aprender de todos los datos anteriores y a tomar decisiones inteligentes, sin necesidad de ser programadas. El marco de aprendizaje automático implica capturar y mantener un rico conjunto de información y transformarlo en una base de conocimiento estructurada para diferentes usos en diversos campos.

Las aplicaciones de esta tecnología se extienden a casi todas las áreas: educación, medicina, viajes espaciales, vehículos autónomos y un largo etcétera.

Existen tres tipo de machine learning: supervised learning, unsupervised learning y reinforcement learning. 

Cuando hablamos de supervised learning, nos referimos a que depende de datos que sean etiquetados por humanos, que luego la computadora procesa. Son problemas o procesos ya resueltos, pero que seguirán surgiendo en un futuro, así que lo se que hace es que los siguientes cálculos los realice la máquina.

Ejemplos: reconocimiento de voz, detección de spam, reconocimiento de escritura, todos ellos muy comunes como funciones básicas de nuestros teléfonos inteligentes.

En el unsupervised learning al algoritmo no tiene indicaciones previas y se le entregan una gigantesca cantidad de datos. Las máquinas no identifican patrones en bases de datos etiquetadas, sino que buscan similitudes. En este caso, los algoritmos no están programados para detectar un tipo específico de datos, como ocurría con el reconocimiento de escritura, sino que buscan ejemplos que se parezcan y puedan agrupar.

Ejemplo:  reconocimiento facial, el algoritmo no te “reconoce” como lo haría un amigo, sino gracias una serie de patrones comunes que le ‘dicen’ que se trata del mismo rostro guardado en la base de datos

Por último tenemos el reinforcement learning o aprendizaje por refuerzo. En este tipo de learning machine, la computadora puede aprender gracias a ensayo y error en diversas situaciones. El ejemplo clásico es la conducción de un vehículo en autónomo.

¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Síguenos en Twitter

 

Facebook

 

Instagram

 

Linkedin

 

Pinterest

Unity 3D 2020 Multiplayer Tutorial Photon 2 Multi Camera Players Parte 7

Si alguna vez estás construyendo un juego de disparos en primera persona para varios jugadores en Unity usando el complemento Photon, podrías encontrarte con este problema. El problema que discutimos es cuando tienes más de una cámara en tu escena porque hay una cámara conectada a cada objeto jugador. Esto hará que las cámaras se apilen una encima de la otra y que la cámara superior o principal no sea su cámara en primera persona, lo que significa que mientras controla su objeto de jugador local, es posible que no esté viendo su reproductor a través de su cámara.

Para solucionar este problema, debe desactivar la cámara de cada objeto de jugador que no sea su objeto de jugador local. Necesitará usar el componente de vista de Photon para verificar si la variable mía es falsa. Si es así, deberá usar una variable de cámara y establecer la variable de habilitación en falso. Esto hará que solo tengas una cámara activa en tu escena multijugador y esa será tu cámara local en primera persona. Al final de ésta implementación podrás tener la configuración para un prototipo de juego multijugador con camara independientes por cada player en la sala.

PlayerMovement

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
    private PhotonView PV;
    private CharacterController myCC;
    public float movementSpeed;
    public float rotationSpeed;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        myCC = GetComponent<CharacterController>();
    }
    // Update is called once per frame
    void Update()
    {
        if(PV.IsMine && PhotonNetwork.IsConnected)
        {
            BasicMovement();
            BasicRotation();
        }
    }
    void BasicMovement()
    {
        if(Input.GetKey(KeyCode.W))
        {
            myCC.Move(transform.forward * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.A))
        {
            myCC.Move(-transform.right * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.S))
        {
            myCC.Move(-transform.forward * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.D))
        {
            myCC.Move(transform.right * Time.deltaTime * movementSpeed);
        }
    }
    void BasicRotation()
    {
        float mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * rotationSpeed;
        transform.Rotate(new Vector3(0, mouseX, 0));
    }
}

AvatarSetup

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AvatarSetup : MonoBehaviour
{
    private PhotonView PV;
    public GameObject myCharacter;
    public int characterValue;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        if (PV.IsMine)
        {
            PV.RPC("RPC_AddCharacter", RpcTarget.AllBuffered, PlayerInfo.PI.mySelectedCharacter);
        }
    }
    [PunRPC]
    void RPC_AddCharacter(int whichCharacter)
    {
        characterValue = whichCharacter;
        myCharacter = Instantiate(PlayerInfo.PI.allCharacters[whichCharacter], transform.position, transform.rotation, transform);
    }
}

MenuController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MenuController : MonoBehaviour
{
    public void OnClickCharacterPick(int whichCharacter)
    {
        if (PlayerInfo.PI != null)
        {
            PlayerInfo.PI.mySelectedCharacter = whichCharacter;
            PlayerPrefs.SetInt("MyCharacter", whichCharacter);
        }
    }
}

PlayerInfo

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInfo : MonoBehaviour
{
    public static PlayerInfo PI;
    public int mySelectedCharacter;
    public GameObject[] allCharacters;
    private void OnEnable()
    {
        if (PlayerInfo.PI == null)
        {
            PlayerInfo.PI = this;
        }
        else
        {
            if (PlayerInfo.PI != this)
            {
                Destroy(PlayerInfo.PI.gameObject);
                PlayerInfo.PI = this;
            }
        }
        DontDestroyOnLoad(this.gameObject);
    }
    // Start is called before the first frame update
    void Start()
    {
        if (PlayerPrefs.HasKey("MyCharacter"))
        {
            mySelectedCharacter = PlayerPrefs.GetInt("MyCharacter");
        }
        else
        {
            mySelectedCharacter = 0;
            PlayerPrefs.SetInt("MyCharacter",mySelectedCharacter);
        }
    }
}

¿Quieres acceder al proyecto completo?

¡Registrate y hazte Premium!

  • Si quieres avanzar a un nuevo nivel en tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de intereses dentro de ZoeGeop, sino que también dispondrás de acceso exclusivo a materiales, soporte y recursos de nuestros proyectos en curso los cuales iremos actualizando constantemente para que puedas utilizarlos libremente e implementarlos en tus propios proyectos. Contarás además con 3 sesiones de asesoría a tu proyecto por parte del equipo de ZoeGeop al mes.
    Nota: Por cada sesión adicional tendrá un costo adicional.Si quieres avanzar a un nuevo nivel en tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de intereses dentro de ZoeGeop, sino que también dispondrás de acceso exclusivo a materiales, soporte y recursos de nuestros proyectos en curso los cuales iremos actualizando constantemente para que puedas utilizarlos libremente e implementarlos en tus propios proyectos. Contarás además con 1 sesión de asesoría a tu proyecto por parte del equipo de ZoeGeop al mes.
    Nota: Por cada sesión adicional tendrá un costo adicional.Si quieres disfrutar y difundir tus proyectos tecnológicos con este plan de suscripción no solamente tendrás acceso a los vídeos e información detallada de tutoriales y temas de interés dentro de ZoeGeop, sino que también podrás dar a conocer tus proyectos en nuestro marketplace global para que cualquier comprador o donante pueden contribuir al crecimiento de tu proyecto.

Processing. Please wait…

¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Twitter

 

Facebook

 

Instagram

 

Linkedin

 

Pinterest

Unity 3D 2020 Multiplayer Tutorial Photon 2 Leave Room Parte 6 (Para Principiantes)

Para esta lección Tutorial sobre cómo hacer un videojuego de Unity multijugador en Unity 3D usando el complemento Photon 2, mediante el uso de ésta herramienta le enseñaremos cómo desconectar jugadores para el juego multijugador que hemos creado. Por otro lado también le mostraremos cómo manejar el evento de un jugador diferente que abandona el juego y finalmente hablaremos sobre la migración del host. Motivado a ésto la migración del host es cuando el cliente maestro se desconecta del juego y otro cliente maestro debe hacerse cargo de las conexiones.

Lo primero que haremos es abrir nuestro script C # de configuración del juego en este script, crearemos una función de desconexión pública que luego podamos vincular a un botón de la interfaz de usuario. Esta función desconectará nuestro reproductor y luego nos regresará a la escena del menú principal. Si seguiste el video, ahora deberías tener un juego completamente en funcionamiento que permita al jugador conectarse y desconectarse a una sala de un juego multijugador cuando más lo desees.

AvatarSetup

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AvatarSetup : MonoBehaviour
{
    private PhotonView PV;
    public GameObject myCharacter;
    public int characterValue;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        if (PV.IsMine)
        {
            PV.RPC("RPC_AddCharacter", RpcTarget.AllBuffered, PlayerInfo.PI.mySelectedCharacter);
        }
    }
    [PunRPC]
    void RPC_AddCharacter(int whichCharacter)
    {
        characterValue = whichCharacter;
        myCharacter = Instantiate(PlayerInfo.PI.allCharacters[whichCharacter], transform.position, transform.rotation, transform);
    }
}

MenuController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MenuController : MonoBehaviour
{
    public void OnClickCharacterPick(int whichCharacter)
    {
        if (PlayerInfo.PI != null)
        {
            PlayerInfo.PI.mySelectedCharacter = whichCharacter;
            PlayerPrefs.SetInt("MyCharacter", whichCharacter);
        }
    }
}

PlayerInfo

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInfo : MonoBehaviour
{
    public static PlayerInfo PI;
    public int mySelectedCharacter;
    public GameObject[] allCharacters;
    private void OnEnable()
    {
        if (PlayerInfo.PI == null)
        {
            PlayerInfo.PI = this;
        }
        else
        {
            if (PlayerInfo.PI != this)
            {
                Destroy(PlayerInfo.PI.gameObject);
                PlayerInfo.PI = this;
            }
        }
        DontDestroyOnLoad(this.gameObject);
    }
    // Start is called before the first frame update
    void Start()
    {
        if (PlayerPrefs.HasKey("MyCharacter"))
        {
            mySelectedCharacter = PlayerPrefs.GetInt("MyCharacter");
        }
        else
        {
            mySelectedCharacter = 0;
            PlayerPrefs.SetInt("MyCharacter",mySelectedCharacter);
        }
    }
}
zoegeop
zoegeop

¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Twitter

 

Facebook

 

Instagram

 

Linkedin

 

Pinterest

Unity 3D 2020 Multiplayer Tutorial Photon 2 RPC llamadas Remotas Parte 5 (Para Principiantes)

Esta es otra lección de fotón 2 para nuestra serie de tutoriales sobre cómo hacer un videojuego multijugador de Unity en Unity. En esta lección de fotones, aprenderemos sobre los conceptos de una función RPC. Después de esta lección, deberías poder hacer tu propia función RPC y aplicarla a cualquier mecánica multijugador dentro de tus juegos.

Para esta lección tutorial, sobre cómo hacer un juego multijugador en Unity usando el complemento Photon 2 usaremos las funciones RPC que hemos aprendido para hacer un control básico de disparos en primera persona que se sincronizará a través de la red. Este tutorial le enseñará cómo usar la función RPC del complemento Photon 2 en otros escenarios. Después de esta lección, debe tener una mejor comprensión de la función RPC y lo que pueden hacer también cuando usarlos. También aprenderás cómo tomar cualquier máquina de juego y hacer que funcione en un juego multijugador.

Comenzaremos creando variables en nuestro script de configuración de Avatar, el primero será la salud del jugador y el siguiente será el daño del jugador. Luego crearemos un nuevo script de C# llamado Avatar Combat. En este script, crearemos algunas variables nuevas. Luego inicializaremos estas variables. Luego crearemos una función de disparo y usaremos Raycast para hacerlo. Primero queremos verificar la entrada del jugador y luego crearemos nuestro Raycast. Si el Raycast golpeó a otro jugador, entonces queremos eliminar la salud de ese jugador. Luego guardaremos nuestro script C# y volveremos a Unity.

En Unity, crearemos y agregaremos una nueva cámara a nuestro objeto avatar de jugador. Luego necesitamos adjuntar nuestros nuevos scripts a sus respectivos objetos y establecer las variables.

Luego volveremos a nuestro script de combate Avatar y convertiremos este script en un script que funcionará en toda la red. Haremos esto creando una función RPC que sincronizará la salud del jugador a través de la red cuando el jugador haya recibido un disparo.

Si seguiste el video, entonces ahora deberías tener un controlador FPS básico que funcione y que conecte la salud del jugador cuando te disparen.

AvatarSetup

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AvatarSetup : MonoBehaviour
{
    private PhotonView PV;
    public GameObject myCharacter;
    public int characterValue;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        if (PV.IsMine)
        {
            PV.RPC("RPC_AddCharacter", RpcTarget.AllBuffered, PlayerInfo.PI.mySelectedCharacter);
        }
    }
    [PunRPC]
    void RPC_AddCharacter(int whichCharacter)
    {
        characterValue = whichCharacter;
        myCharacter = Instantiate(PlayerInfo.PI.allCharacters[whichCharacter], transform.position, transform.rotation, transform);
    }
}

MenuController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MenuController : MonoBehaviour
{
    public void OnClickCharacterPick(int whichCharacter)
    {
        if (PlayerInfo.PI != null)
        {
            PlayerInfo.PI.mySelectedCharacter = whichCharacter;
            PlayerPrefs.SetInt("MyCharacter", whichCharacter);
        }
    }
}

PlayerInfo

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInfo : MonoBehaviour
{
    public static PlayerInfo PI;
    public int mySelectedCharacter;
    public GameObject[] allCharacters;
    private void OnEnable()
    {
        if (PlayerInfo.PI == null)
        {
            PlayerInfo.PI = this;
        }
        else
        {
            if (PlayerInfo.PI != this)
            {
                Destroy(PlayerInfo.PI.gameObject);
                PlayerInfo.PI = this;
            }
        }
        DontDestroyOnLoad(this.gameObject);
    }
    // Start is called before the first frame update
    void Start()
    {
        if (PlayerPrefs.HasKey("MyCharacter"))
        {
            mySelectedCharacter = PlayerPrefs.GetInt("MyCharacter");
        }
        else
        {
            mySelectedCharacter = 0;
            PlayerPrefs.SetInt("MyCharacter",mySelectedCharacter);
        }
    }
}

¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Twitter

 

Facebook

 

Instagram

 

Linkedin

 

Pinterest

Unity 3D 2020 Multiplayer Tutorial Photon 2 RPC llamadas Remotas Parte 4 (Para Principiantes)

Para esta lección tutorial, sobre cómo hacer un juego multijugador en Unity usando el complemento Photon 2 usaremos las funciones RPC que hemos aprendido para hacer un control básico de disparos en primera persona que se sincronizará a través de la red. Este tutorial le enseñará cómo usar la función RPC del complemento Photon 2 en otros escenarios. Después de esta lección, debe tener una mejor comprensión de la función RPC y lo que pueden hacer también cuando usarlos. También aprenderás cómo tomar cualquier máquina de juego y hacer que funcione en un juego multijugador.

Comenzaremos creando variables en nuestro script de configuración de Avatar, el primero será la salud del jugador y el siguiente será el daño del jugador. Luego crearemos un nuevo script de C# llamado Avatar Combat. En este script, crearemos algunas variables nuevas. Luego inicializaremos estas variables. Luego crearemos una función de disparo y usaremos Raycast para hacerlo. Primero queremos verificar la entrada del jugador y luego crearemos nuestro Raycast. Si el Raycast golpeó a otro jugador, entonces queremos eliminar la salud de ese jugador. Luego guardaremos nuestro script C# y volveremos a Unity.

En Unity, crearemos y agregaremos una nueva cámara a nuestro objeto avatar de jugador. Luego necesitamos adjuntar nuestros nuevos scripts a sus respectivos objetos y establecer las variables.

Luego volveremos a nuestro script de combate Avatar y convertiremos este script en un script que funcionará en toda la red. Haremos esto creando una función RPC que sincronizará la salud del jugador a través de la red cuando el jugador haya recibido un disparo.

Si seguiste el video, entonces ahora deberías tener un controlador FPS básico que funcione y que conecte la salud del jugador cuando te disparen.

AvatarSetup

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AvatarSetup : MonoBehaviour
{
    private PhotonView PV;
    public GameObject myCharacter;
    public int characterValue;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        if (PV.IsMine)
        {
            PV.RPC("RPC_AddCharacter", RpcTarget.AllBuffered, PlayerInfo.PI.mySelectedCharacter);
        }
    }
    [PunRPC]
    void RPC_AddCharacter(int whichCharacter)
    {
        characterValue = whichCharacter;
        myCharacter = Instantiate(PlayerInfo.PI.allCharacters[whichCharacter], transform.position, transform.rotation, transform);
    }
}

MenuController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MenuController : MonoBehaviour
{
    public void OnClickCharacterPick(int whichCharacter)
    {
        if (PlayerInfo.PI != null)
        {
            PlayerInfo.PI.mySelectedCharacter = whichCharacter;
            PlayerPrefs.SetInt("MyCharacter", whichCharacter);
        }
    }
}

PlayerInfo

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInfo : MonoBehaviour
{
    public static PlayerInfo PI;
    public int mySelectedCharacter;
    public GameObject[] allCharacters;
    private void OnEnable()
    {
        if (PlayerInfo.PI == null)
        {
            PlayerInfo.PI = this;
        }
        else
        {
            if (PlayerInfo.PI != this)
            {
                Destroy(PlayerInfo.PI.gameObject);
                PlayerInfo.PI = this;
            }
        }
        DontDestroyOnLoad(this.gameObject);
    }
    // Start is called before the first frame update
    void Start()
    {
        if (PlayerPrefs.HasKey("MyCharacter"))
        {
            mySelectedCharacter = PlayerPrefs.GetInt("MyCharacter");
        }
        else
        {
            mySelectedCharacter = 0;
            PlayerPrefs.SetInt("MyCharacter",mySelectedCharacter);
        }
    }
}

¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Twitter

 

Facebook

 

Instagram

 

Linkedin

 

Pinterest

Unity3D Multiplayer Tutorial Photon2

Aquí está la próxima lección sobre cómo hacer un juego multijugador en Unity usando el complemento Photon 2. Para esta lección, nos centraremos en el movimiento del jugador y sincronizaremos la transformación a través de la red utilizando la vista de transformación de Photon. Es muy importante poder sincronizar el movimiento de los jugadores a través de la red porque, sin hacerlo, los jugadores podrán verse en diferentes lugares de lo que realmente están. También es importante asegurarse de que cada jugador solo pueda controlar sus propios avatares.

Lo primero que debemos hacer es abrir nuestro prefab Avatar de Photon Player. En este prefabricado, agregaremos la Vista de transformación de Photon para que nuestro avatar jugador pueda sincronizar su movimiento. Luego, necesitaremos crear un nuevo script de C # para configurar los controles para el movimiento del objeto Avatar. Con este script C# abierto, lo primero que haremos es crear algunas variables nuevas. Luego inicializaremos todas nuestras variables. A medida que creamos las funciones de movimiento, primero debemos verificar la entrada del jugador. Según la entrada del jugador, moveremos el objeto avatar del jugador. Cuando llamamos a esta función de movimiento es la función de actualización, utilizaremos la variable Vista de Photon para verificar si este objeto es propiedad del jugador local. Esto es para asegurarse de que solo el jugador local pueda controlar su avatar y no los avatares de otras personas. Luego guardaremos nuestro script y volveremos a Unity 3D.

Si sigue el vídeo, ahora debería poder construir su proyecto. En la escena multijugador, ahora deberías poder controlar el movimiento de tu avatar de jugador local.

PlayerMovement

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
    private PhotonView PV;
    private CharacterController myCC;
    public float movementSpeed;
    public float rotationSpeed;
    // Start is called before the first frame update
    void Start()
    {
        PV = GetComponent<PhotonView>();
        myCC = GetComponent<CharacterController>();
    }
    // Update is called once per frame
    void Update()
    {
        if(PV.IsMine && PhotonNetwork.IsConnected)
        {
            BasicMovement();
            BasicRotation();
        }
    }
    void BasicMovement()
    {
        if(Input.GetKey(KeyCode.W))
        {
            myCC.Move(transform.forward * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.A))
        {
            myCC.Move(transform.right * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.S))
        {
            myCC.Move(transform.forward * Time.deltaTime * movementSpeed);
        }
        if (Input.GetKey(KeyCode.D))
        {
            myCC.Move(transform.right * Time.deltaTime * movementSpeed);
        }
    }
    void BasicRotation()
    {
        float mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * rotationSpeed;
        transform.Rotate(new Vector3(0, mouseX, 0));
    }
}

PhotonLobby

using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
public class PhotonLobby : MonoBehaviourPunCallbacks
{
    // Start is called before the first frame update
    public static PhotonLobby lobby;
    public GameObject battleButton;
    RoomInfo[] room;
    public GameObject cancelButtom;
    private void Awake()
    {
        lobby = this;
    }
    void Start()
    {
        PhotonNetwork.ConnectUsingSettings();
    }
    public override void OnConnectedToMaster()
    {
        Debug.Log("the conection is stablished");
        PhotonNetwork.AutomaticallySyncScene = true;
        battleButton.SetActive(true);
    }
    public void OnBattleButtonClicked()
    {
        Debug.Log("llego aca paso algo en la el battle button click");
        battleButton.SetActive(false);
        cancelButtom.SetActive(true);
        PhotonNetwork.JoinRandomRoom();
    }
    public override void OnJoinRandomFailed(short returnCode, string message)
    {
        //base.OnJoinRandomFailed(returnCode, message);
        Debug.Log("failed joining the room");
        CreateRoom();
    }
    void CreateRoom()
    {
        Debug.Log("llego a CreateRoom");
        int randomRoomName = Random.Range(0, 10000);
        RoomOptions roomOps = new RoomOptions()
        {
            IsVisible = true,
            IsOpen = true,
            MaxPlayers = (byte)MultiplayerSettings.multiplayerSettings.maxPlayers
        };
        PhotonNetwork.CreateRoom("Room" + randomRoomName, roomOps, null);
    }
    public override void OnCreateRoomFailed(short returnCode, string message)
    {
        //base.OnCreateRoomFailed(returnCode, message);
        Debug.Log("failed creating the room");
        CreateRoom();
    }
    public void OnCancelButtonCliked()
    {
        Debug.Log("Llego OnCancelButtonCliked");
        battleButton.SetActive(false);
        cancelButtom.SetActive(true);
        PhotonNetwork.LeaveRoom();
    }
}

PhotonPlayer

using Photon.Pun;
using System.IO;
using UnityEngine;
public class PhotonPlayer : MonoBehaviour
{
    // Start is called before the first frame update
    private PhotonView PV;
    public GameObject myAvatar;
    public GameObject myMainCamera;
    void Start()
    {
        PV = GetComponent<PhotonView>();
        int spawnPicker = Random.Range(0, GameSetUp.GS.spawnPoints.Length);
        if (PV.IsMine)
        {
            myAvatar = PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs", "PlayerAvatar"), GameSetUp.GS.spawnPoints[spawnPicker].position,
                GameSetUp.GS.spawnPoints[spawnPicker].rotation, 0);
            /*myAvatar = PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs", "Character 1"), GameSetUp.GS.spawnPoints[spawnPicker].position,
    GameSetUp.GS.spawnPoints[spawnPicker].rotation, 0);*/
        }
    }
}

PhotonRoom

using Photon.Pun;
using Photon.Realtime;
using System.IO;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PhotonRoom : MonoBehaviourPunCallbacks, IInRoomCallbacks
{
    // Start is called before the first frame update
    public static PhotonRoom room;
    private PhotonView PV;
    public bool IsGameLoaded;
    public int currentScene;
    private Photon.Realtime.Player[] photonPlayers;
    public int playersInRoom;
    public int myNumberInRoom;
    public int playerInGame;
    private bool readyToCount;
    private bool readyToStart;
    public float startingTime;
    private float lessThanMaxPlayer;
    private float atMaxPlayer;
    private float timeToStart;
    private void Awake()
    {
        if(PhotonRoom.room == null)
        {
            PhotonRoom.room = this;
        }
        else
        {
            if(PhotonRoom.room != this)
            {
                Destroy(PhotonRoom.room.gameObject);
                PhotonRoom.room = this;
            }
        }
        DontDestroyOnLoad(this.gameObject);
    }
    public override void OnEnable()
    {
        base.OnEnable();
        PhotonNetwork.AddCallbackTarget(this);
        SceneManager.sceneLoaded += OnSceneFinishedLoading;
    }
    public override void OnDisable()
    {
        base.OnDisable();
        PhotonNetwork.RemoveCallbackTarget(this);
        SceneManager.sceneLoaded -= OnSceneFinishedLoading;
    }
    void Start()
    {
        PV = GetComponent<PhotonView>();
        readyToCount = false;
        readyToStart = false;
        lessThanMaxPlayer = startingTime;
        atMaxPlayer = 6;
        timeToStart = startingTime;
    }
    // Update is called once per frame
    void Update()
    {
        if (MultiplayerSettings.multiplayerSettings.delayStart)
        {
            if(playersInRoom == 1)
            {
                RestartTimer();
            }
            if (!IsGameLoaded)
            {
                if (readyToStart)
                {
                    atMaxPlayer -= Time.deltaTime;
                    lessThanMaxPlayer = atMaxPlayer;
                    timeToStart = atMaxPlayer;
                }
                else if (readyToCount)
                {
                    lessThanMaxPlayer -= Time.deltaTime;
                    timeToStart = lessThanMaxPlayer;
                }
                Debug.Log("Displayer time to start to the players " + timeToStart );
                if (timeToStart <=0)
                {
                    StartGame();
                }
            }
        }
    }
    public override void OnJoinedRoom()
    {
        base.OnJoinedRoom();
        Debug.Log("Se Unio a OnJoinedRoom");
        photonPlayers = PhotonNetwork.PlayerList;
        playersInRoom = photonPlayers.Length;
        myNumberInRoom = playersInRoom;
        PhotonNetwork.NickName = myNumberInRoom.ToString();
        if (MultiplayerSettings.multiplayerSettings.delayStart)
        {
            Debug.Log("Displayer players in room out of max players possible ("+playersInRoom+":"+MultiplayerSettings.multiplayerSettings.maxPlayers+")");
            if(playersInRoom > 1)
            {
                readyToCount = true;
            }
            if (playersInRoom == MultiplayerSettings.multiplayerSettings.maxPlayers)
            {
                readyToStart = true;
                if (PhotonNetwork.IsMasterClient)
                {
                    return;
                }
                PhotonNetwork.CurrentRoom.IsOpen = false;
            }
        }
        else
        {
            StartGame();
        }
    }
    public override void OnPlayerEnteredRoom(Photon.Realtime.Player newPlayer)
    {
        base.OnPlayerEnteredRoom(newPlayer);
        Debug.Log("A new player has joined the room");
        photonPlayers = PhotonNetwork.PlayerList;
        playersInRoom++;
        if(MultiplayerSettings.multiplayerSettings.delayStart)
        {
            Debug.Log("Displayer players in room out of max players possible (" + playersInRoom + ":" + MultiplayerSettings.multiplayerSettings.maxPlayers + ")");
            if (playersInRoom > 1)
            {
                readyToCount = true;
            }
            if (playersInRoom == MultiplayerSettings.multiplayerSettings.maxPlayers)
            {
                readyToStart = true;
                if (!PhotonNetwork.IsMasterClient)
                {
                    return;
                }
                PhotonNetwork.CurrentRoom.IsOpen = false;
            }
        }
    }
    void StartGame()
    {
        IsGameLoaded = true;
        if (!PhotonNetwork.IsMasterClient)
            return;
        if(MultiplayerSettings.multiplayerSettings.delayStart)
        {
            PhotonNetwork.CurrentRoom.IsOpen = false;
        }
        PhotonNetwork.LoadLevel(MultiplayerSettings.multiplayerSettings.multiplayerScene);
    }
    void RestartTimer()
    {
        lessThanMaxPlayer = startingTime;
        timeToStart = startingTime;
        atMaxPlayer = 6;
        readyToCount = false;
        readyToStart = false;
    }
    void OnSceneFinishedLoading(Scene scene, LoadSceneMode mode)
    {
        currentScene = scene.buildIndex;
        if (currentScene ==MultiplayerSettings.multiplayerSettings.multiplayerScene)
        {
            IsGameLoaded = true;
            if (MultiplayerSettings.multiplayerSettings.delayStart)
            {
                PV.RPC("RPC_loadedGameScene", RpcTarget.MasterClient);
            }
            else
            {
                RPC_CreatePlayer();
            }
        }
    }
    [PunRPC]
    private void RPC_LoadedGameScene()
    {
        playerInGame++;
        if (playerInGame == PhotonNetwork.PlayerList.Length)
        {
            PV.RPC("RPC_CreatePlayer",RpcTarget.All);
        }
    }
    [PunRPC]
    private void RPC_CreatePlayer()
    {
        PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs", "PhotonNetworkPlayer"), transform.position, Quaternion
    .identity, 0);
    }
}

GameSetUp

using UnityEngine;
public class GameSetUp : MonoBehaviour
{
    // Start is called before the first frame update
    public static GameSetUp GS;
    public Transform[] spawnPoints;
    private void OnEnable()
    {
        if (GameSetUp.GS == null)
        {
            GameSetUp.GS = this;
        }
    }
}

MultiplayerSettings

using UnityEngine;
public class MultiplayerSettings : MonoBehaviour
{
    // Start is called before the first frame update
    public static MultiplayerSettings multiplayerSettings;
    public bool delayStart;
    public int maxPlayers;
    public int menuScene;
    public int multiplayerScene;
    private void Awake()
    {
        if(MultiplayerSettings.multiplayerSettings == null)
        {
            MultiplayerSettings.multiplayerSettings = this;
        }
        else
        {
            if(MultiplayerSettings.multiplayerSettings != this)
            {
                Destroy(this.gameObject);
            }
        }
        DontDestroyOnLoad(this.gameObject);
    }
}

¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

[latest-selected-content output=”slider” limit=”4″ date_limit=”1″ date_start=”2″ date_start_type=”months” image=”medium” css=”four-columns tall as-overlay light” type=”post” status=”publish” taxonomy=”category” orderby=”dateD” show_extra=”category” slidermode=”fade” slideslides=”1″ slidescroll=”1″ sliderinfinite=”true” slidercontrols=”true” sliderauto=”true” sliderspeed=”3000″ chrlimit=”120″ url=”yes”]

 

Suscríbete a nuestro canal de YouTube

Síguenos en nuestro canal de YouTube dedicado a tecnología, marketplace de proyectos tecnológicos, cursos online y tutoriales de desarrollo de videojuegos. Ofrecemos consultoría en desarrollo de software, marketing online, servicios de TI, hosting web, dominios web y más.

 

Siguenos en Patreon

Si quieres contribuir con cualquier aporte o donación hacia nuestros proyectos y el canal puedes hacerlo a través de nuestra cuenta en Patreon.

 

Únete a nuestro Discord

 

Twitter

 

Facebook

 

Instagram

 

Linkedin

 

Pinterest