Planet BANG - Videojuego Multijugador

En esta sección se atenderán las dudas relacionadas con sistemas de gestión de la calidad, procedimientos, buenas prácticas, normas y todo lo relacionado con aseguramiento de la calidad

Moderator: julianmartinez16

User avatar
MrDoom
Posts: 30
Joined: Mon Jan 22, 2018 10:42 am

Re: Planet BANG - Videojuego Multijugador

Post by MrDoom » Sun Apr 22, 2018 10:26 pm

Esta publicación es la del jueves 19/04/2018
¿Qué hice hasta hoy?

- Correcion de Bug prioritario (cuando hacia un golpe sin cargar del todo se quedaba paralizado).

- Agregado sistema de partículas que avisa cuando un jugador puede cargar.

- Agregado sonido que avisa cuando un jugador puede cargar.

- Agregado dos skins nuevas.

¿Qué haré hasta el próximo post?

- Sprint 7

Image

Image

- Checklist de diseño y código
https://docs.google.com/spreadsheets/d/ ... sp=sharing

¿Qué problemas tuve?
-
Last edited by MrDoom on Mon Apr 23, 2018 10:40 pm, edited 1 time in total.
Camilo Villegas - 000127837 - Gestión de la calidad - IDED

User avatar
MrDoom
Posts: 30
Joined: Mon Jan 22, 2018 10:42 am

Re: Planet BANG - Videojuego Multijugador

Post by MrDoom » Mon Apr 23, 2018 10:24 pm

Esta publicación es la del jueves 19/04/2018
Sprint #7

Multiplayer: 12
Polish Visual: 3

¿Qué hice hasta hoy?

- Descargado paquete de Photon Network para comenzar multijugador.

¿Qué haré hasta el próximo post?

- Trabajar en multijugador.
- Pulir efectos visuales

- Checklist de diseño y código
https://docs.google.com/spreadsheets/d/ ... sp=sharing

¿Qué problemas tuve?
-
Camilo Villegas - 000127837 - Gestión de la calidad - IDED

User avatar
MrDoom
Posts: 30
Joined: Mon Jan 22, 2018 10:42 am

Re: Planet BANG - Videojuego Multijugador

Post by MrDoom » Mon Apr 30, 2018 9:33 am

Esta publicación es la del jueves 26/04/2018 y la de hoy
¿Qué hice hasta hoy?

- Implementado multiplayer, ahora se visuzaliza el movimiento de otro jugador en otro computador

¿Qué haré hasta el próximo post?

- Trabajar en multijugador.

- Checklist de diseño y código
https://docs.google.com/spreadsheets/d/ ... sp=sharing

¿Qué problemas tuve?
-
Camilo Villegas - 000127837 - Gestión de la calidad - IDED

User avatar
MrDoom
Posts: 30
Joined: Mon Jan 22, 2018 10:42 am

Re: Planet BANG - Videojuego Multijugador

Post by MrDoom » Thu May 03, 2018 10:31 am

¿Qué hice hasta hoy?

- Se modificaron valores del "Transform View" para un movimiento suave de jugadores.

¿Qué haré hasta el próximo post?

- Trabajar en multijugador.

- Checklist de diseño y código
https://docs.google.com/spreadsheets/d/ ... sp=sharing

¿Qué problemas tuve?
- Serios problemas con el "Transform View", por más que se cambien sus valores, el movimiento de los jugadores aparece con Saltos incómodos debido a cantidades de código en Update(), editar el Update() de algunos scripts compromete la integridad de las mecánicas principales del jugador.
Camilo Villegas - 000127837 - Gestión de la calidad - IDED

User avatar
MrDoom
Posts: 30
Joined: Mon Jan 22, 2018 10:42 am

Re: Planet BANG - Videojuego Multijugador

Post by MrDoom » Tue May 08, 2018 5:20 pm

Hemos estado dedicando aprox 4 horas diarias al multijugador, en lo cual somos muy nuevos.
¿Qué hice hasta hoy?

- Se creo un script de sincronización de posición para ambos jugadores.

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sync : Photon.PunBehaviour
{
    Vector3 trueLoc;
    Quaternion trueRot;
    PhotonView pv;

    void Start ()
    {
        pv = GetComponent<PhotonView>();
	}

    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        //we are reicieving data
        if (stream.isReading)
        {
            //receive the next data from the stream and set it to the truLoc varible
            if (!pv.isMine)
            {//do we own this photonView?????
                trueLoc = (Vector3)stream.ReceiveNext();//the stream send data types of "object" we must typecast the data into a Vector3 format
                this.trueRot = (Quaternion)stream.ReceiveNext();


            }
        }
        //we need to send our data
        else
        {
            //send our posistion in the data stream
            if (pv.isMine)
            {
                stream.SendNext(transform.position);
               // stream.SendNext(transform.position);
            }
        }
    }

    void Update()
    {
        if (!pv.isMine)
        {
                transform.position = Vector3.Lerp(transform.position, trueLoc, Time.deltaTime*2f);
            

            
            transform.rotation = Quaternion.Lerp(transform.rotation, trueRot, Time.deltaTime*2f);
        }

    }
}
- Se creo otro script de sincronización en la cual se pasa la Rotacion y se ahorran un par de Ifs

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SyncTest : Photon.MonoBehaviour {

    private PhotonView PhotonView;
    private Vector3 TargetPosition;
    private Quaternion TargetRotation;

	// Use this for initialization
	void Start () {
        PhotonView = GetComponent<PhotonView>();
	}
	
    private void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.isWriting)
        {
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
        } else
        {
            TargetPosition = (Vector3)stream.ReceiveNext();
            TargetRotation = (Quaternion)stream.ReceiveNext();

        }
    }

	// Update is called once per frame
	void Update () {
		if (!PhotonView.isMine)
        {
            SmoothMove();
        }
	}

   

    private void SmoothMove()
    {
        transform.position = Vector3.Lerp(transform.position, TargetPosition, Time.deltaTime*5);
        transform.rotation = Quaternion.RotateTowards(transform.rotation, TargetRotation, Time.deltaTime*5);

    }
}
¿Qué haré hasta el próximo post?

- Hacer que la sincronización de posición de cada jugador funcione correctamente, sin retrasos o descoordinacion.

- Checklist de diseño y código
https://docs.google.com/spreadsheets/d/ ... sp=sharing

¿Qué problemas tuve?
- Como mencione antes, somos TOTALMENTE nuevos en este campo y ningun profesor tiene muchos conocimientos acerca de Networking usando Photon.
Camilo Villegas - 000127837 - Gestión de la calidad - IDED

User avatar
MrDoom
Posts: 30
Joined: Mon Jan 22, 2018 10:42 am

Re: Planet BANG - Videojuego Multijugador

Post by MrDoom » Wed May 16, 2018 11:48 pm

Hemos estado dedicando aprox 4 horas diarias al multijugador, en lo cual somos muy nuevos.
¿Qué hice hasta hoy?

- Los jugadores ahora están sincronizados desde la selección de Skins, ambos pueden cambiar de skin y se actualiza en linea.

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using XInputDotNetPure;

public class PlayerSelectionOnline : Photon.PunBehaviour
{
    PlayerIndex index1, index2, index3, index4;
    GamePadState state1, state2, state3, state4;
    GamePadState prevState1, prevState2, prevState3, prevState4;

    [SerializeField] MainMenu mainMenu;
    [SerializeField] ScriptablePlayer[] scriptablePlayers;
    public Skins skinsReference;
    [SerializeField] GameObject[] skinsPlayers;
    [SerializeField] Text[] txtsToJoin;
    int[] actualSkin;
    bool[] playerJoined;
    bool[] playerReady;
    public static int onlineNumber;
    Vector3[] initialPos;
    GameObject [] initialSkins;
    bool firstMove;
    public int[] ActualSkin
    {
        get
        {
            return actualSkin;
        }
    }

    void Start()
    {
        index1 = PlayerIndex.One;
        index2 = PlayerIndex.Two;
        index3 = PlayerIndex.Three;
        index4 = PlayerIndex.Four;

        actualSkin = new int[4];
        actualSkin[0] = 0;
        actualSkin[1] = 0;
        actualSkin[2] = 0;
        actualSkin[3] = 0;

        playerReady = new bool[4];
        playerJoined = new bool[4];
        firstMove = true;
        initialPos = new Vector3[4];
        initialPos[0] = new Vector3(-18,1,49);
        initialPos[1] = new Vector3(18, 1, 49);
        initialPos[2] = new Vector3(-18, -19, 49);
        initialPos[3] = new Vector3(18, -19, 49);
        initialSkins = new GameObject[4];
        for (int i = 0; i < initialSkins.Length; i++)
        {
            initialSkins[i] = skinsPlayers[i];
        }
        //for (int i = 0; i < initialPos.Length; i++)
        //{
        //    initialPos[i] = skinsPlayers[i].transform.position;
        //}

        onlineNumber = PhotonNetwork.playerList.Length;
    }

    void Update()
    {
        prevState1 = state1;
        prevState2 = state2;
        prevState3 = state3;
        prevState4 = state4;
        state1 = GamePad.GetState(index1);
        state2 = GamePad.GetState(index2);
        state3 = GamePad.GetState(index3);
        state4 = GamePad.GetState(index4);

        if (mainMenu.skinSelection.alpha == 1)
        {
            //if (prevState1.Buttons.A == ButtonState.Released && state1.Buttons.A == ButtonState.Pressed && !playerJoined[0])
            //{
            //    PlayerJoin(PhotonNetwork.player.ID);
            //}
            //if (prevState2.Buttons.A == ButtonState.Released && state2.Buttons.A == ButtonState.Pressed && !playerJoined[1])
            //{
            //    PlayerJoin(1);
            //}
            //if (prevState3.Buttons.A == ButtonState.Released && state3.Buttons.A == ButtonState.Pressed && !playerJoined[2])
            //{
            //    PlayerJoin(2);
            //}
            //if (prevState4.Buttons.A == ButtonState.Released && state4.Buttons.A == ButtonState.Pressed && !playerJoined[3])
            //{
            //    PlayerJoin(3);
            //}
        }
        #region Inputs Joystick 1
        if (prevState1.ThumbSticks.Left.X != 1 && state1.ThumbSticks.Left.X == 1)
        {
            SkinMovement(true, PhotonNetwork.player.ID-1);
            Debug.Log("Analogo");
        }
        if (prevState1.ThumbSticks.Left.X != -1 && state1.ThumbSticks.Left.X == -1)
        {
            SkinMovement(false, PhotonNetwork.player.ID-1);
        }
        #endregion
        #region Inputs Joystick 2
        if (prevState2.ThumbSticks.Left.X != 1 && state2.ThumbSticks.Left.X == 1)
        {
            SkinMovement(true, 1);
        }
        if (prevState2.ThumbSticks.Left.X != -1 && state2.ThumbSticks.Left.X == -1)
        {
            SkinMovement(false, 1);
        }
        #endregion
        #region Inputs Joystick 3
        if (prevState3.ThumbSticks.Left.X != 1 && state3.ThumbSticks.Left.X == 1)
        {
            SkinMovement(true, 2);
        }
        if (prevState3.ThumbSticks.Left.X != -1 && state3.ThumbSticks.Left.X == -1)
        {
            SkinMovement(false, 2);
        }
        #endregion
        #region Inputs Joystick 4
        if (prevState4.ThumbSticks.Left.X != 1 && state4.ThumbSticks.Left.X == 1)
        {
            SkinMovement(true, 3);
        }
        if (prevState4.ThumbSticks.Left.X != -1 && state4.ThumbSticks.Left.X == -1)
        {
            SkinMovement(false, 3);
        }
        #endregion
        #region Players Are Ready
        if (prevState1.Buttons.A == ButtonState.Released && state1.Buttons.A == ButtonState.Pressed && playerJoined[0])
            PlayersReady(PhotonNetwork.player.ID);
        //if (prevState2.Buttons.A == ButtonState.Released && state2.Buttons.A == ButtonState.Pressed && playerJoined[1])
        //    PlayersReady(1);
        //if (prevState3.Buttons.A == ButtonState.Released && state3.Buttons.A == ButtonState.Pressed && playerJoined[2])
        //    PlayersReady(2);
        //if (prevState4.Buttons.A == ButtonState.Released && state4.Buttons.A == ButtonState.Pressed && playerJoined[3])
        //    PlayersReady(3);
        #endregion
        #region Players Cancel
        if (prevState1.Buttons.B == ButtonState.Released && state1.Buttons.B == ButtonState.Pressed && playerJoined[0])
            PlayersCancel(0);
        if (prevState2.Buttons.B == ButtonState.Released && state2.Buttons.B == ButtonState.Pressed && playerJoined[1])
            PlayersCancel(1);
        if (prevState3.Buttons.B == ButtonState.Released && state3.Buttons.B == ButtonState.Pressed && playerJoined[2])
            PlayersCancel(2);
        if (prevState4.Buttons.B == ButtonState.Released && state4.Buttons.B == ButtonState.Pressed && playerJoined[3])
            PlayersCancel(3);
        #endregion
        if (prevState1.Buttons.Start == ButtonState.Released && state1.Buttons.Start == ButtonState.Pressed)
            SceneManager.LoadScene("MultiplayerLevel");
        if (prevState2.Buttons.Start == ButtonState.Released && state2.Buttons.Start == ButtonState.Pressed)
            SceneManager.LoadScene("MultiplayerLevel");
    }
    [PunRPC]
    public void PlayersReady(int playerNumber)
    {
        scriptablePlayers[playerNumber].actualSkin = skinsReference.skins[ActualSkin[playerNumber]];
        playerReady[playerNumber] = true;
        skinsPlayers[playerNumber].GetComponent<VFX>().Score();
        Debug.Log(PhotonNetwork.player.ID);
    }
    void OnPhotonSerializeView (PhotonStream stream, PhotonMessageInfo message)
    {
        if (stream.isWriting)
        {
            stream.SendNext(scriptablePlayers[PhotonNetwork.playerList.Length]);
        }
        else
        {
            scriptablePlayers[PhotonNetwork.playerList.Length] = (ScriptablePlayer)stream.ReceiveNext();
        }
    }
    public void PlayersCancel(int playerNumber)
    {
        playerReady[playerNumber] = false;
        txtsToJoin[playerNumber].CrossFadeAlpha(1, 1, true);
        skinsPlayers[playerNumber].SetActive(false);
        playerJoined[playerNumber] = false;
    }
    public void PlayerJoin(int playerNumber)
    {
        foreach (var item in PhotonNetwork.playerList)
        {
            Debug.Log(item.ID);
        }
        switch (playerNumber)
        {
            case 0:
                playerJoined[playerNumber] = true;
                //skinsPlayers[0].SetActive(true);
                skinsPlayers[0] = PhotonNetwork.Instantiate(skinsReference.skins[0].name, initialPos[0], Quaternion.identity, 0);
                txtsToJoin[0].CrossFadeAlpha(0, 1, true);
                break;
            case 1:
                playerJoined[playerNumber] = true;
                //skinsPlayers[1].SetActive(true);
                skinsPlayers[1] = PhotonNetwork.Instantiate(skinsReference.skins[0].name, initialPos[1], Quaternion.identity, 0);
                txtsToJoin[1].CrossFadeAlpha(0, 1, true);
                break;
            case 2:
                playerJoined[playerNumber] = true;
                //skinsPlayers[2].SetActive(true);
                skinsPlayers[2] = PhotonNetwork.Instantiate(skinsReference.skins[0].name, initialPos[2], Quaternion.identity, 0);
                txtsToJoin[2].CrossFadeAlpha(0, 1, true);
                break;
            case 3:
                playerJoined[playerNumber] = true;
                //skinsPlayers[3].SetActive(true);
                skinsPlayers[3] = PhotonNetwork.Instantiate(skinsReference.skins[0].name, initialPos[3], Quaternion.identity, 0);
                txtsToJoin[3].CrossFadeAlpha(0, 1, true);
                break;
        }
    }
    public void SkinMovement(bool right, int playerNumber)
    {

        if (firstMove)
        {
            firstMove = false;
            initialSkins[0].transform.position = new Vector3(-18, -82, 49);
            initialSkins[1].transform.position = new Vector3(18, -82, 49);
            initialSkins[2].transform.position = new Vector3(-18, -82, 49);
            initialSkins[3].transform.position = new Vector3(-18, -82, 49);
        }
        if (playerJoined[playerNumber])
        {
            if (right && ActualSkin[playerNumber] < skinsPlayers.Length - 1)
                ActualSkin[playerNumber]++;
            if (!right && ActualSkin[playerNumber] >= 1)
                ActualSkin[playerNumber]--;

            GameObject lastSkin = skinsPlayers[playerNumber];
            //lastSkin.SetActive(false);
            PhotonNetwork.Destroy(lastSkin);
            skinsPlayers[playerNumber] = PhotonNetwork.Instantiate(skinsReference.skins[ActualSkin[playerNumber]].name, initialPos[playerNumber], Quaternion.identity,0);
            //skinsPlayers[playerNumber] = Instantiate(skinsReference.skins[ActualSkin[playerNumber]], initialPos[playerNumber], Quaternion.identity);
            skinsPlayers[playerNumber].SetActive(true);
        }
    }
}


¿Qué haré hasta el próximo post?

- Corregir los errores que se presentan cuando los jugadores colisionan.

- Checklist de diseño y código
https://docs.google.com/spreadsheets/d/ ... sp=sharing
- Repositorio
https://github.com/juanpa1612/Planet-Bang.git

¿Qué problemas tuve?
- Como mencione antes, somos TOTALMENTE nuevos en este campo y ningun profesor tiene muchos conocimientos acerca de Networking usando Photon.
Camilo Villegas - 000127837 - Gestión de la calidad - IDED

User avatar
MrDoom
Posts: 30
Joined: Mon Jan 22, 2018 10:42 am

Re: Planet BANG - Videojuego Multijugador

Post by MrDoom » Mon May 21, 2018 10:27 am

¿Qué hice hasta hoy?

- Los jugadores ahora entran al campo de juego con las skins seleccionadas.

- Los jugadores sincronizan su posición y rotación en el campo de juego.

- Los sistemas de partículas se sincronizan.

- El movimiento de "Quickscope" funciona en multijugador.

- Avances mayores en la detección de colisiones en multijugador.

¿Qué haré hasta el próximo post?

- Terminar de stremear al servidor todas las condiciones para que hayan colisiones funcionales.

- Stremear al servidor la vida de cada jugador.

- Checklist de diseño y código
https://docs.google.com/spreadsheets/d/ ... sp=sharing
- Repositorio
https://github.com/juanpa1612/Planet-Bang.git

¿Qué problemas tuve?
- Las entregas finales....
Camilo Villegas - 000127837 - Gestión de la calidad - IDED

Post Reply