Unity Multiplayer Multijugador Tutorial - Photon 2 (Part 2) (BEGINNER-FRIENDLY - Para Principiantes)

Bienvenido a esta nueva serie de tutoriales sobre la creación de videojuegos multijugador en Unity usando el complemento Photon 2 PUN. Para esta lección, le mostraremos cómo descargar, instalar y configurar el complemento Photon 2 en sus proyectos de Unity. Antes de seguir con cualquiera de las otras lecciones de esta serie de tutoriales, debe completar este video. Proporcionaremos los complementos descargables para todos los demás videos de esta serie, pero estos complementos no incluirán el complemento Photon original. Debe obtenerlo del sitio web oficial de Photon.

 

Lo primero que deberá hacer en esta lección es crear una cuenta de Photon. Una vez que haya registrado una cuenta, deberá crear un nuevo proyecto de aplicación Photon. Luego deberás completar información sobre tu juego multijugador y luego harás clic en crear. Después de crear una nueva aplicación, deberá copiar el ID de aplicación para más adelante.

De vuelta en Unity, deberá ir a Unity Asset Store y buscar el complemento gratuito PUN 2. Deberá descargar e instalar este complemento en su proyecto. Después de importar este complemento, aparecerá una nueva ventana. Este es el asistente de PUN y debe pegar su AppID de proyecto en esta ventana y luego hará clic en configurar proyecto. Lo siguiente que haremos es establecer nuestra primera conexión con el servidor maestro Photon. Para hacer esto, necesitaremos crear un nuevo script. En este nuevo script, lo único que haremos para este tutorial es inicializar la conexión de red.

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

Unity 3D 2020: Multiplayer Tutorial Photon 2 | - Configuration INICIO (BEGINNER-FRIENDLY!)

En ésta oportunidad comenzamos con la configuración inicial y la realización de la lógica de creación de salas unión  a salas, y ubicación de objeto player en la escena en ésta serie abarcaremos la creación de nuestro videojuego TPS en la modalidad Multijugador con Photon 2 en Unity 3D. La implementación multijugador es independiente del juego la haremos así para que puedas utilizarla en cualquier otro proyecto que requieras.

La baja latencia es un requisito esencial en los juegos multijugador en tiempo real. Por esta razón, Photon Cloud está alojado en todas las principales regiones del mundo para brindar a sus jugadores una latencia mínima.
Los juegos que dependen de una latencia baja, como los tipos de juegos FPS o RTS, conectan a los jugadores con la región más cercana. Los juegos que pueden manejar una mayor latencia, como los juegos por turnos, pueden conectar a todos los jugadores a la misma región.

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

Unity 3D 2020: Multiplayer Tutorial Photon 2 | #1 - Getting Started INICIO (BEGINNER-FRIENDLY!)

Acompáñanos en ésta nueva serie donde abarcaremos la creación de nuestro videojuego TPS en la modalidad Multijugador con Photon 2 en Unity 3D. La implementación multijugador es independiente del juego la haremos así para que puedas utilizarla en cualquier otro proyecto que requieras disfrútalo.


En pocas palabras, Photon Enterprise Cloud es como nuestra Photon Cloud pública bien establecida y agrega las siguientes características: se ejecuta en servidores dedicados, proporciona niveles de servicio garantizados (SLA) y soporte de alta prioridad. Otra gran ventaja: puede ejecutar su propia lógica de servidor autorizada a través de complementos.
Los escenarios típicos de Photon Enterprise Cloud son aplicaciones con 10 000 usuarios simultáneos o más, proyectos de juegos más grandes que necesitan una lógica de servidor autorizada o empresas cuyas políticas de cumplimiento las restringen a recursos dedicados.

Todos los productos de Photon Cloud se basan en una arquitectura de cliente a servidor, ¡la solución más estable para juegos multijugador! En las arquitecturas de igual a igual, los clientes a menudo no pueden conectarse debido a problemas de penetración de NAT. Este problema es aún peor en las redes móviles. Con Photon Cloud tus juegos siempre estarán conectados.
Nuestro equipo de operaciones supervisa los servidores las 24 horas del día, los 7 días de la semana y puede ampliar los recursos necesarios en cualquier momento. Ya sea que su juego necesite capacidad para cientos o cientos de miles de usuarios simultáneos: lo adaptamos a sus demandas.

¿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

snapchat

La fortuna de Evan Spiegel y Bobby Murphy, creadores de Snapchat no es tan grande como las de Mark Zuckerberg o Jeff Bezos, pero destacan por ser los más jóvenes en la lista de los más ricos en Estados Unidos, de acuerdo con el ranking de la revista Forbes. Evan Spiegel nació en 1990 (tiene 29 años) y un patrimonio de 3.600 millones de dólares. Creó Snapchat en 2011 y es su director ejecutivo (CEO) desde mayo de 2012.  Por su parte, Bobby Murphy es el segundo millonario más joven de Estado Unidos (31 años), con una fortuna de 3.700 millones de dólares. Impresionante. Link:  https://newster.info/creadores-de-snapchat-son-los-jovenes-mas-ricos-de-eeuu/

Cómo funciona Snapchat?

Todo lo que necesitas para registrarte es tu nombre, una dirección de correo electrónico o un número de teléfono y tu fecha de nacimiento. Para agregar amigos, puedes subir tus contactos del celular o buscar personas que conozcas. También puedes agregar automáticamente a alguien tomando una foto de su «Snapcódigo«, un código QR único de cada usuario.

Después de eso, las cosas se ponen un poco confusas. En Snapchat, los snaps, no el texto, generalmente inician la comunicación. Para comenzar una conversación, toca el círculo grande de la cámara y toma una foto. Hay todo tipo de herramientas de edición así como filtros para adornar tus fotos y videos. Una vez que personalizas tu snap, puedes enviarlo a cualquier persona en tu lista de amigos o agregarlo a tu historia, que es un registro del día, que tus amigos pueden ver durante 24 horas y agregarlos a Snap Map, que muestra tu snap en un mapa con tu ubicación, que puede ser visto por otros en Snapchat.

Snapchat ofrece varias opciones para compartir y manejar los snaps. Además de los mensajes de texto individuales, Snapchat ofrece chats en los que todos en un grupo pueden contribuir. Puedes eliminar los mensajes de texto que envías, aunque en un chat grupal las otras personas verán que has borrado algo.

¿Quieres publicar tus propios proyectos?. ¡Pues qué 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

Tutorial para Optimizar Video Juegos 3D en Unity Book Of The Dead

Para renderizar cualquier objeto en la pantalla, el CPU tiene mucho trabajo que hacer: trabajar qué luces afecta ese objeto, configurar el shader y los parámetros del shader, y enviar comandos de dibujo al driver gráfico, que luego prepara los comandos para que sea enviado a la tarjeta gráfica.

Todo este uso del CPU “por objeto” es intensivo a los recursos, por lo que si usted tiene muchos objetos visibles, esto se puede agregar. Por ejemplo, si usted tiene miles de triángulos, es mucho más fácil en el CPU si todos están en un mesh, en vez de un mesh por triángulo (agregando hasta 1000 meshes). El precio de ambos escenarios en el GPU es muy similar, pero el trabajo hecho por el CPU para renderizar mil objetos (en vez de uno) es significativamente mayor.

Reduzca la cuenta visible de objetos. Para reducir la cantidad de trabajo que el CPU necesita hacer:

  • Combine objetos cerca juntos, ya sea manualmente, o utilizando el draw call batching de Unity.
  • Utilice menos materiales en sus objetos, colocando texturas en un texture atlas más grande.
  • Utilice menos cosas que cause que los objetos sean renderizados múltiples veces (como lo son los reflejos, sombras, y luces per-pixel).

Combine los objetos juntos para que cada mesh tenga al menos varios cientos de triángulos y utilice solo un Material para el mesh entero. Es importante que tenga en cuenta que combinar dos objetos que no compartan un material no le da a usted ningún incremento de rendimiento. La razón más común para tener múltiples materiales es que dos meshes no compartan la misma textura; entonces para optimizar el rendimiento del CPU, usted debe asegurarse que cualquier objeto que usted combine comparta las misma texturas.

¿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

Batalla en Windridge City Third Person Shooter Tutorial IA Part 12 Unity

El desarrollo de juegos independientes es una tendencia hoy en día. Recientemente, podemos notar que algunos de los principales desarrolladores de triple A dejan sus trabajos, donde solían liderar grandes proyectos, para comenzar sus propios estudios de juegos. O incluso los nuevos talentos, de los estudios de juegos independientes más vendidos, se niegan a mudarse a las principales editoriales, aferrándose a sus orígenes para enfocarse en expandir y mejorar sus franquicias de juegos independientes que los hicieron populares.

Con el mercado de juegos independientes como evidencia, los desarrolladores de juegos tienen cada vez más herramientas para desarrollar sus propios juegos en la actualidad. Los propios motores de juego, encargados de hacer más rápida y sencilla la tarea de creación de juegos, son aún más accesibles, sin necesidad de grandes inversiones.

Los creadores de Unity también brindan un gran mercado, Asset Store, donde es posible adquirir varios paquetes de nivel profesional a precios justos. Dichos activos pueden considerarse uno de los mejores aliados de los estudios independientes, ahorrando mucho tiempo y dinero. Incluso hay paquetes completamente gratuitos de alta calidad a considerar, que no dejan nada que desear en comparación con las alternativas pagas.

¿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

⚡Es el mejor recurso si quieres hacer un tirador en tercera persona o de arriba hacia abajo.

⚡Tiene un controlador suave y receptivo

⚡Tiene un juego de armas y combate cuerpo a cuerpo divertido y pulido.

⚡ ¡Y tiene una IA increíble y creíble!

⚡Controles móviles para vista TopDown

⚡Modo de estrategia para la vista superior de PC

⚡Inspirándonos en el combate en juegos como Mass Effect, Division, Ghost Recon Online, creamos una plantilla para ayudarte a crear ese tipo de juegos. Ahora puedes saltarte meses de juego de creación de prototipos, ¡simplemente salta y crea tu Cover Shooter!

La IA inteligente se volvió mucho más inteligente.

AI puede volver a llamar o a la policía

La IA puede ser de combate o civil.

Sistema inteligente de generación de IA

Rifle de francotirador o pistola con zoom

Sube cubiertas altas

Escena nocturna con modo de investigación AI

Zona de «césped» de baja visibilidad para esconderse

Y muchas mejoras más.

-Implementación de prevención de incendios amigos

-Muchas correcciones y mejoras en el comportamiento y la toma de decisiones de la IA

-Implementación de depuración y visualización de IA

-Cambió cómo funciona mirar a escondidas en las esquinas

-Cambió la forma en que apunta hacia atrás desde una cobertura alta.

-Granadas añadidas

-Se agregó un sistema de Alertas donde varios sonidos y eventos notifican a la IA de la presencia de un enemigo.

-AI puede atacar objetos que no sean personajes (por ejemplo, cámaras de seguridad).

-Añadido balanceo de personajes.

-Se agregaron patrullas de IA.

-Se agregaron investigaciones de IA.

-AI puede olvidarse del enemigo.

-Hitboxes. Los personajes reciben diferentes daños dependiendo de dónde son golpeados.

-Se agregó el estado inactivo cuando los personajes no apuntan mientras están parados.

-Colisiones de cámara, evitación de obstáculos.

-Los brazos pueden apuntar independientemente de los cuerpos.

-Carrera de personajes añadida.

-Sistema de sueño de personajes. Los componentes están desactivados para los personajes que están lejos.

Comienzos del comportamiento del grupo AI. El número de ataques agresivos de IA al mismo tiempo puede ser limitado.

-Mejor comunicación de IA. La información sobre el enemigo y la investigación se transmite entre la IA.

-Inicios de un sistema de desvanecimiento de obstáculos.

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

ZoeGeop Technologies
MarketPlace

Crea tu cuenta


Suscribete 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 entre otros.

Suscríbete



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

Es el mejor recurso si quieres hacer un tirador en tercera persona o de arriba hacia abajo.

⚡Tiene un controlador suave y receptivo

⚡Tiene un juego de armas y combate cuerpo a cuerpo divertido y pulido.

⚡ ¡Y tiene una IA increíble y creíble!

⚡Controles móviles para vista TopDown

⚡Modo de estrategia para la vista superior de PC

⚡Inspirándonos en el combate en juegos como Mass Effect, Division, Ghost Recon Online, creamos una plantilla para ayudarte a crear ese tipo de juegos. Ahora puedes saltarte meses de juego de creación de prototipos, ¡simplemente salta y crea tu Cover Shooter!

La IA inteligente se volvió mucho más inteligente.

AI puede volver a llamar o a la policía

La IA puede ser de combate o civil.

Sistema inteligente de generación de IA

Rifle de francotirador o pistola con zoom

Sube cubiertas altas

Escena nocturna con modo de investigación AI

Zona de «césped» de baja visibilidad para esconderse

Y muchas mejoras más.

-Implementación de prevención de incendios amigos

-Muchas correcciones y mejoras en el comportamiento y la toma de decisiones de la IA

-Implementación de depuración y visualización de IA

-Cambió cómo funciona mirar a escondidas en las esquinas

-Cambió la forma en que apunta hacia atrás desde una cobertura alta.

-Granadas añadidas

-Se agregó un sistema de Alertas donde varios sonidos y eventos notifican a la IA de la presencia de un enemigo.

-AI puede atacar objetos que no sean personajes (por ejemplo, cámaras de seguridad).

-Añadido balanceo de personajes.

-Se agregaron patrullas de IA.

-Se agregaron investigaciones de IA.

-AI puede olvidarse del enemigo.

-Hitboxes. Los personajes reciben diferentes daños dependiendo de dónde son golpeados.

-Se agregó el estado inactivo cuando los personajes no apuntan mientras están parados.

-Colisiones de cámara, evitación de obstáculos.

-Los brazos pueden apuntar independientemente de los cuerpos.

-Carrera de personajes añadida.

-Sistema de sueño de personajes. Los componentes están desactivados para los personajes que están lejos.

Comienzos del comportamiento del grupo AI. El número de ataques agresivos de IA al mismo tiempo puede ser limitado.

-Mejor comunicación de IA. La información sobre el enemigo y la investigación se transmite entre la IA.

-Inicios de un sistema de desvanecimiento de obstáculos.

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

ZoeGeop Technologies
MarketPlace

Crea tu cuenta


Suscribete 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 entre otros.

Suscríbete



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

Internet
Hace 50 años por primera vez una computadora se conectó con otra a distancia, un hito que se reconoce como el puntapié inicial del Internet. Este aniversario levanta una pregunta de cara al futuro: ¿cómo será la red de redes dentro de 50 años?

Para responderla, el estadounidense Centro Pew de Investigaciones consultó a 530 expertos de la informática, quienes ofrecieron sus puntos de vista, la mayoría de ellos muy optimista sobre los aportes que seguirá brindando Internet a la humanidad. Algunos lanzaron advertencias, mientras otros ven un futuro oscuro.

Estas son cinco de las predicciones lanzadas por los expertos para el Internet que tendremos en 2069.

|.- Interfaz cerebro máquina

«Creo que para 2069 la interfaz cerebro-máquina estará completamente desarrollada, y si creemos que las aplicaciones de la inteligencia artificial podrían ser aterradoras para el futuro de la humanidad, entonces las interfaces cerebro-computadora son materia de pesadillas si los marcos legales y éticos bajo los cuales se utilizan no se consideran cuidadosamente desde el principio. Estoy segura de que habrá otras tecnologías, tal vez desarrolladas por IA, que aún no conocemos pero que dominarán el mundo en 2069 como lo hace Internet en 2019 «.

Wendy Hall, profesora de ciencias de la computación en la Universidad de Southampton, Reino Unido, y directora ejecutiva del Web Science Institute

2.- Occidente no dominará Internet

«Es posible que las fuerzas que impulsan la tecnología en años futuros ya no se basen en los «países occidentales», y el concepto de Internet como «libre» desaparecerá. Las compañías líderes como Google, Microsoft y Apple serán de menor importancia. Los individuos no podrán controlar sus vidas ni podrán decir quiénes son y qué quieren ser. El problema no es que haya una entidad que controle la información, sino tantas personas diferentes de tantas culturas y jurisdicciones».

Teus Hagen, pionero de Internet en los Países Bajos, ex presidente y director de NLnet

3.- Miniaturización y reto moral

«Espero que en los próximos 50 años los dispositivos se reduzcan a tamaños pequeños y se integren en nuestras propias personas. Entonces habrá dos puntos de inflexión. El primero será una división entre los que tienen y los que no tienen tecnología. Aquellos que tienen la tecnología se beneficiarán de ella de maneras que aquellos que no la tienen no pueden hacerlo.

Cuanto más avanzada sea la tecnología, más será el caso. (…) El segundo será una evolución moral. La privacidad tal como se concibió en la era anterior al advenimiento de Internet está casi muerta a pesar de los intentos de la Unión Europea y California de detener la marea. La cantidad de información que las personas dan sobre sus vidas más privadas está creciendo rápidamente. Se requerirá una evolución proporcional de la moral para mantenerse al día con los desarrollos tecnológicos para mantenerse al día o se producirá el caos».

Jonathan Swerdloff, consultor y especialista en sistemas de datos para Driven Inc

4.- Expuestos a la extinción

«La gran mayoría de los usuarios de Internet serán consumidores pasivos a los que se les ofrece una ilusión de agencia en el sistema para entregarlos como un recurso a aquellos que se benefician del consumidor. Ya vemos esto con Facebook y otras compañías.

La manera en que los datos de los usuarios de Facebook y otros lugares han sido explotados en el proceso democrático para afectar los resultados en beneficio de quienes pagan los datos es indicativo de hacia dónde se dirige Internet. (…) ¿Creo que nuestra supervivencia como especie se ve amenazada por nuestra evolución tecnológica?

Sí. ¿Creo que sobreviviremos? Probablemente, porque somos un animal tenaz. ¿Creo que valdrá la pena sobrevivir en un mundo como ese? Probablemente no. ¿Creo que el mundo estaría mejor si, como especie, no sobreviviéramos? Absolutamente. Eso es algo que podríamos esperar: que nos saquemos, que nos extingamos. Incluso si somos reemplazados por nuestras máquinas, es probable que el mundo sea un lugar mejor sin nosotros».

Simon Biggs, profesor de artes interdisciplinarias en la Universidad de Edimburgo

5.- La red será invisible

«Creo que Internet ya no existirá en la forma en que lo vemos hoy. No será posible ver Internet como una gran red de dispositivos conectados, sino que será algo único que funcione de manera generalizada y transparente, como el aire que existe en todas partes, por lo que nos olvidamos de su existencia. Usaremos el medio ambiente para transmitir información, a través de plantas, suelo, agua, etc. (…) Algunas personas usarán prótesis para obtener / transmitir / visualizar y procesar información, tal vez conectada directamente al cerebro y trabajando al unísono con los lóbulos cerebrales. La información recibida del entorno puede verse como una ‘nueva entrada sensorial’. Por lo tanto, todas las interfaces y herramientas serán totalmente remodeladas: sin mouse, sin menús, sin ‘pantallas azules de la muerte’. Otros, de la ‘vieja escuela, ‘utilizará dispositivos portátiles «plug-and-play».

Edson Prestes, profesor y director de robótica en la Universidad Federal de Rio Grande do Sul, Brasil

Más predicciones sobre el futuro de internet en:

(https://newster.info/7-predicciones-sobre-el-internet-que-tendremos-en-50-anos/)

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

ZoeGeop Technologies
MarketPlace

Crea tu cuenta

Suscríbete

¡Hola! Bienvenidos a este video donde les mostraremos cómo crear un primer producto mínimo viable de un juego MMORPG en la modalidad Survival en tercera y primera persona. Este paso será de gran ayuda a la hora de implementar un juego totalmente funcional del tipo rol masivo online. Por lo tanto requiere ciertos conocimientos de programación, aunque también pueden utilizarlo diseñadores de videojuegos o cualquier que esté iniciando en este grandioso mundo.

Para los jugadores es la emoción de escabullirse a través de ciudades abandonadas tratando de evadir y superar a otros humanos en lugar de forzar una misión NPC tras otra.

Para los desarrolladores es la idea de crear una sandbox donde los jugadores puedan interactuar entre ellos.

En lugar de gastar innumerables recursos en líneas de búsqueda repetitivas, tipos de monstruos y niveles.

¿Por qué uSurvival?

uSurvival es el motor de supervivencia multijugador más simple y fácil de usar por una simple razón: el 99% de los proyectos multijugador fallan porque son demasiado complejos.

Mantener tanto el código como la arquitectura increíblemente simple es de suma importancia para el desarrollador lobo solitario.

Originalmente creado como un proyecto de investigación, uSurvival fue lanzado para preparar y probar nuevas tecnologías para uMMORPG v2.

uSurvival recibe el máximo cuidado y atención para garantizar un código de la más alta calidad para los proyectos de todos.

Acá les dejamos el link para que accedan al asset en Unity Asset Store.

https://assetstore.unity.com/packages/templates/systems/usurvival-95015

Espero que lo disfruten y cualquier duda o comentario por favor dejarlo en la casilla correspondiente.
¿Quieres publicar tus propios proyectos?. ¡Pues que esperas!

ZoeGeop Technologies
MarketPlace

Crea tu cuenta


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 entre otros.

Suscríbete



Patreon

 

Discord

 

Facebook