Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Alberto Bravo Rodrigo en Febrero 14, 2018, 04:18:47 PM

Título: Ranking de puntuaciones para juego multijugador.Ayuda.
Publicado por: Alberto Bravo Rodrigo en Febrero 14, 2018, 04:18:47 PM
Hola a todos.
 
Esta es mi primera consulta en este foro así que que disculparme si no soy muy claro exponiendo mi problema.
 
Estoy intentando construir un Ranking de puntuaciones int para mi juego multijugador y estoy teniendo algún problema para construirlo. Estoy trabajando con Unet HLAPI y cuando un cliente se conecta se añade el gameObject jugador del cliente a un vector de gameObjects. Ese vector que contiene los jugadores de los clientes se ordena utilizando la clase Sort para tener los jugadores correctamente ordenados en función de la puntuación que tienen almacenada en una variable int, para mostrarlo posteriormente en el ranking en la UI. Hasta ahí creo que todo correcto. El problema es que cuando un jugador se desconecta de la partida la clase Sort sigue intentando acceder al gameObject que ya no está dentro del vector que contenía a ese gameObject y se generan muchos errores de referencia. Entonces yo necesitaría hacer que no se intente acceder a ese gameObject cuando el cliente se haya desconectado. He intentado varios caminos y ninguno me ha funcionado correctamente. A continuación pongo mi código para alguna sugerencia. No sé si estoy utilizando el mejor camino para hacer el Ranking, si tuviera que cambiar mi código para algún camino mejor estaría abierto así que acepto todo tipo de sugerencias. Gracias por vuestra ayuda de antemano.
 
Código C#:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
public class RankingMatch : NetworkBehaviour
{
    [SerializeField]
    List<GameObject> zombies = new List<GameObject>();
    [Header("Time Variables")]
    [SerializeField]
    private float time;
    [SerializeField]
    private float nextcomunicationTime = 1f;
    [SerializeField]
    private float comunicationTime;
    void Start()
    {
    }
    void Update()
    {
        time = GameObject.Find("NetworkManager").GetComponent<CustomNetworkManager>().time;
        if (time >= comunicationTime)
        {
            if (zombies.Count >= 2)
            {
                zombies.Sort(new sort());
                
            }
            comunicationTime = Time.time + nextcomunicationTime;
        }
    }
    public void AddZombie(GameObject zombie)
    {
        zombies.Add(zombie);
    }
    public void DeleteZombie(GameObject zombie)
    {
        zombies.Remove(zombie);
        Debug.Log("Zombie Deleted");
    }
    private class sort : IComparer<GameObject>
    {
        int IComparer<GameObject>.Compare(GameObject _objA, GameObject _objB)
        {
            int t1 = _objA.GetComponent<ZombieAttributes_Net>().zombieScore;
            int t2 = _objB.GetComponent<ZombieAttributes_Net>().zombieScore;
            return t1.CompareTo(t2);
        }
    }
}

 
 
Título: Ranking de puntuaciones para juego multijugador.Ayuda.
Publicado por: Diego Garcia en Marzo 15, 2018, 02:02:41 AM
Hay varias maneras mucho más faciles de hacer un ranking, desde usar una base de datos hasta usar APis que te ayudan para ello (gratuitas) resolviste el problema? podría darte una mano.