Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 58,34€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Alberto Bravo Rodrigo

Ranking de puntuaciones para juego multijugador.Ayuda.

Recommended Posts

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);
        }
    }
}

 

Edited by pioj
Por favor, usa el <> o el "quote" para pegar código.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

×
×
  • Create New...