Como criar um sistema de Ranking simples.
5 participantes
Página 1 de 1
Como criar um sistema de Ranking simples.
Bom estou tendo muita dificuldade para fazer um sistema de ranking para o meu jogo, queria fazer um offiline simples que mostrasse apenas as 5 melhores pontuações, já vi vários vídeos ensinando más não deu certo nenhum, vários deles usavam mysql só que não tenho muito conhecimento sobre isso, que me atrapalha bastante. Se alguém tiver algum tutorial que me ajudasse ou algo que pudesse me ajudar agradeceria muito.
luansantos- Iniciante
- PONTOS : 2499
REPUTAÇÃO : 7
Idade : 27
Áreas de atuação : Minha área central é programação, mas me dou bem em todas as outras áreas, menos em Design. S2
Respeito as regras :
Re: Como criar um sistema de Ranking simples.
Tenho esse aqui para voce textar e ter ideias.
Em 1 object vaziu coloque esses 2 scripts
No primeiro script adicione 2 texts para clicks e tempo
No sgundo coloque uma quantidade de text dentro de um panel e coloque no segundo
script,
Adicione 2 butoes um para salva e outro para deletar
Em 1 object vaziu coloque esses 2 scripts
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class GameController : MonoBehaviour {
public Text clickCounterText, timeRemainingText;//Textos de clicks e tempo
public InputField playerName;//Input
int totalClicks = 0;
int timeRemaining = 10;
bool gameInPlay = true;
void Start ()
{
StartCoroutine (OneSecond ());
}
IEnumerator OneSecond()
{
while (1==1)
{
yield return new WaitForSeconds (1.0f);
timeRemaining--;
timeRemainingText.text = "Time: " + timeRemaining;
if (timeRemaining == 0)
{
EndGame();
break;
}
}
}
void EndGame()
{
gameInPlay = false;
}
public void InitialsEntered()//Para mostrar
{
GetComponent<RankingController>().CheckForHighScore(totalClicks,playerName.text);
}
void Update()
{
if (!gameInPlay) return;
if(Input.GetKeyDown(KeyCode.Space))//Aperte para adicionar os clicks
{
totalClicks++;
clickCounterText.text = "Clicks: " + totalClicks;
}
}
}
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class RankingController : MonoBehaviour
{
public Text[] highScores;//Adicione a quantidade de textos para mostrar, eu coloco 5
int[] highScoreValues;
string[] highScoreNames;
void Start ()
{
highScoreValues = new int[highScores.Length];
highScoreNames = new string[highScores.Length];
for (int x = 0; x < highScores.Length; x++)
{
highScoreValues[x] = PlayerPrefs.GetInt("highScoresValues" + x);
highScoreNames[x] = PlayerPrefs.GetString("highScoresNames" + x);
}
DrawScores();
}
void SaveScores()//Salvar scores
{
for (int x = 0; x < highScores.Length; x++)
{
PlayerPrefs.SetInt("highScoresValues" + x, highScoreValues[x]);
PlayerPrefs.SetString("highScoresNames" + x, highScoreNames[x]);
}
}
public void CheckForHighScore(int _value, string _userName)//Checar scores
{
for (int x = 0; x < highScores.Length; x++)
{
if(_value > highScoreValues[x])
{
for(int y = highScores.Length - 1; y>x; y--)
{
highScoreValues [y] = highScoreValues [y - 1];
highScoreNames [y] = highScoreNames [y - 1];
}
highScoreValues [x] = _value;
highScoreNames [x] = _userName;
DrawScores();
SaveScores();
break;
}
}
}
void DrawScores()
{
for (int x = 0; x < highScores.Length; x++)
{
highScores[x].text = highScoreNames[x] + ": " + highScoreValues[x].ToString();
}
}
public void DeleteSave()//Deletar scores
{
//PlayerPrefs.DeleteKey("Nome da Chave(key)");
PlayerPrefs.DeleteAll();
}
}
No primeiro script adicione 2 texts para clicks e tempo
No sgundo coloque uma quantidade de text dentro de um panel e coloque no segundo
script,
Adicione 2 butoes um para salva e outro para deletar
Re: Como criar um sistema de Ranking simples.
Cara obrigado pela ajuda, mas não tive sucesso em usa-lo pois não funcionou, não salvou os dados.
luansantos- Iniciante
- PONTOS : 2499
REPUTAÇÃO : 7
Idade : 27
Áreas de atuação : Minha área central é programação, mas me dou bem em todas as outras áreas, menos em Design. S2
Respeito as regras :
Re: Como criar um sistema de Ranking simples.
Ja tentou chamar a void SaveScore no update()?
Phph09- Profissional
- PONTOS : 3791
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: Como criar um sistema de Ranking simples.
Essa funçao voce coloca em um botao para salvar
No botao de Space quanto mais apertar vai adicionar pontos
- Código:
void SaveScores()
- Código:
DeleteSave()
No botao de Space quanto mais apertar vai adicionar pontos
Re: Como criar um sistema de Ranking simples.
Eu alterei umas coisas para adaptar-se com o jogo que estou fazendo, estou tentando fazer quando o player colidir aumente o meu score, o score aumenta mas na hora de mostrar o ranking não aparece o nome e nem os pontos apenas uns números aleatórios (25,26).
ficou assim
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class controller : MonoBehaviour {
public Text clickCounterText, timeRemainingText;
public InputField playerName;
int totalScores = 0;
bool gameInPlay = true;
void Start ()
{
}
public void InitialsEntered()
{
GetComponent<RankingController>().CheckForHighScore(totalScores,playerName.text);
}
void Update()
{
SaveScores();
}
void OnTriggerEnter(Collider other){
if (other.tag == "latinha") {
totalScores++;
clickCounterText.text = "Clicks: " + totalScores;
}
}
}
ficou assim
luansantos- Iniciante
- PONTOS : 2499
REPUTAÇÃO : 7
Idade : 27
Áreas de atuação : Minha área central é programação, mas me dou bem em todas as outras áreas, menos em Design. S2
Respeito as regras :
Re: Como criar um sistema de Ranking simples.
Ficou faltando o nome do player
- Código:
public InputField playerName;
- Código:
public string playerName
Re: Como criar um sistema de Ranking simples.
Muito obrigado pela ajuda, finalmente consegui fazer o ranking, modifiquei e joguei o script no personagem do meu game. Vou deixar aqui os scripts que modifiquei para talvez ajudar outra pessoa ^^
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class RankingController : MonoBehaviour
{
public Text[] highScores;
int[] highScoreValues;
string[] highScoreNames;
void Start ()
{
highScoreValues = new int[highScores.Length];
highScoreNames = new string[highScores.Length];
for (int x = 0; x < highScores.Length; x++)
{
highScoreValues[x] = PlayerPrefs.GetInt("highScoresValues" + x);
highScoreNames[x] = PlayerPrefs.GetString("highScoresNames" + x);
}
DrawScores();
}
void SaveScores()
{
for (int x = 0; x < highScores.Length; x++)
{
PlayerPrefs.SetInt("highScoresValues" + x, highScoreValues[x]);
PlayerPrefs.SetString("highScoresNames" + x, highScoreNames[x]);
}
}
public void CheckForHighScore(int _value, string _userName)
{
for (int x = 0; x < highScores.Length; x++)
{
if(_value > highScoreValues[x])
{
for(int y = highScores.Length - 1; y>x; y--)
{
highScoreValues [y] = highScoreValues [y - 1];
highScoreNames [y] = highScoreNames [y - 1];
}
highScoreValues [x] = _value;
highScoreNames [x] = _userName;
DrawScores();
SaveScores();
break;
}
}
}
void DrawScores()
{
for (int x = 0; x < highScores.Length; x++)
{
highScores[x].text = highScoreNames[x] + ": " + highScoreValues[x].ToString();
}
}
}
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class controller : MonoBehaviour {
public Text clickCounterText, timeRemainingText;
public InputField playerName;
int totalScores = 0;
bool gameInPlay = true;
void Start ()
{
}
public void InitialsEntered()
{
GetComponent<RankingController>().CheckForHighScore(totalScores,playerName.text);
}
void Update()
{
}
void OnTriggerEnter(Collider other){
if (other.tag == "latinha") {
totalScores++;
clickCounterText.text = "Clicks: " + totalScores;
}
}
}
luansantos- Iniciante
- PONTOS : 2499
REPUTAÇÃO : 7
Idade : 27
Áreas de atuação : Minha área central é programação, mas me dou bem em todas as outras áreas, menos em Design. S2
Respeito as regras :
Re: Como criar um sistema de Ranking simples.
vou pegar uma carona aqui, estou querendo fazer um ranking offline com 20 colocações.
no meu jogo no fim do ultimo stage, vai aparecer um input para escrever o nome do jogador e salvar esse nome, que vai ter 7 caracteres no máximo. Quero fazer esse input para o nome igual nesse jogo aqui, vejam o tempo entre 1:00:55 a 1:03:04
no jogo o input tem 3 caracteres mas vou fazer com 7.
quero tambem que à medida que varias pessoas forem jogando e fazendo novas pontuações recordes, os maiores pontos vão sendo salvos e mesmo que a pessoa ligue o jogo de novo depois de fecha-lo, as maiores pontuações estarão lá.
com os scripts acima do luansantos consigo isso?
o que devo alterar nos scripts?
ainda não sei bem como fazer esse sistema de ranking se alguém puder me ajudar agradeço muito!!
no meu jogo no fim do ultimo stage, vai aparecer um input para escrever o nome do jogador e salvar esse nome, que vai ter 7 caracteres no máximo. Quero fazer esse input para o nome igual nesse jogo aqui, vejam o tempo entre 1:00:55 a 1:03:04
no jogo o input tem 3 caracteres mas vou fazer com 7.
quero tambem que à medida que varias pessoas forem jogando e fazendo novas pontuações recordes, os maiores pontos vão sendo salvos e mesmo que a pessoa ligue o jogo de novo depois de fecha-lo, as maiores pontuações estarão lá.
com os scripts acima do luansantos consigo isso?
o que devo alterar nos scripts?
ainda não sei bem como fazer esse sistema de ranking se alguém puder me ajudar agradeço muito!!
Flávio- MembroAvançado
- PONTOS : 2833
REPUTAÇÃO : 29
Áreas de atuação : Aprendizagem em:
Programação C#;
Pixelart
Respeito as regras :
Re: Como criar um sistema de Ranking simples.
Na primeira vez que a pessoa instalar o jogo no computador, o jogo vai ter uma memória definida com 10 colocações no ranking de 1 a 10, com as pontuações 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000 e 100000 respectivamernte do ultimo colocado até o primeiro, e com os nomes ficticios ANA, PEDRO, VIVIANE, BRUNO, CLAUDIA, JONAS, KAIQUE, MARINA, PAULO e JOAO respectivamente.
Quando a pessoa jogar pela primeira vez, se o score que ela conseguir for menor que 10000, vai permancer esse ranking da memória acima com os mesmos nomes; mas se a pessoa conseguir mais de 10000, o nome que ela digitar agora vai entrar no ranking e a colocação será aquela conforme a quantidade de pontos conseguidos.
E de agora em diante, à medida que a pessoa for jogando, os novos nomes que ela for escrevendo e scores conseguidos vai sendo gravados no lugar daquela memória lá em cima.
esses dois scripts faz isso ou seria algo mais complexo? alguem pode me ajudar? porque sistema de ranking tá sendo dificil
Quando a pessoa jogar pela primeira vez, se o score que ela conseguir for menor que 10000, vai permancer esse ranking da memória acima com os mesmos nomes; mas se a pessoa conseguir mais de 10000, o nome que ela digitar agora vai entrar no ranking e a colocação será aquela conforme a quantidade de pontos conseguidos.
E de agora em diante, à medida que a pessoa for jogando, os novos nomes que ela for escrevendo e scores conseguidos vai sendo gravados no lugar daquela memória lá em cima.
esses dois scripts faz isso ou seria algo mais complexo? alguem pode me ajudar? porque sistema de ranking tá sendo dificil
Flávio- MembroAvançado
- PONTOS : 2833
REPUTAÇÃO : 29
Áreas de atuação : Aprendizagem em:
Programação C#;
Pixelart
Respeito as regras :
Re: Como criar um sistema de Ranking simples.
Usa o DreamIo: Link
Ele e online em tempo real e de graça
Tutorial:
Ele e online em tempo real e de graça
Tutorial:
BRGC- ProgramadorMaster
- PONTOS : 3054
REPUTAÇÃO : 59
Idade : 20
Áreas de atuação : C#, C++, C, Flutter
Respeito as regras :
Re: Como criar um sistema de Ranking simples.
BRGC achei interessante esse sistema de ranking guardado em nuvem
meu ranking vai ficar dessa forma:
https://imgur.com/a/gdESTIb
a coluna 'RANK' que vai de 1ST a 10TH vai ficar desse jeito, nada vai mudar aí.
os demis subtitulos 'NAME', 'ST', 'SCORE' e 'LEVEL' também ficam no lugar em que estão.
os traços ------- , o numero '1' , os '00000000' e a palavra NORMAL eu digitei só para mostrar o tamanho do campo e numero de caracteres.
usei esse sistema de ranking que ensina no video mas acontece que na hora que dou play fica dessa forma:
https://imgur.com/a/1u9kXaW
fica tudo no campo do score onde tem os 00000000
eu poderia expandir os campos do score mas os nomes e os st nao ficam alinhados, como na iamgem:
https://imgur.com/a/6Ea4J5C
só os scores ficam alinhados
eu queria saber o que dá para mudar nos scripts para que os nomes, os st, os scores e o level ficam cada um em seu campo.
tambem quero que apareça no ranking o LEVEL escolhido pelo jogador no inicio do jogo. o que preciso alterar nos scripts?
script Highscores
script DisplayHighscores
fiz algumas alterações nos scripts originais para o ranking aparecer conforme nas imagens
meu ranking vai ficar dessa forma:
https://imgur.com/a/gdESTIb
a coluna 'RANK' que vai de 1ST a 10TH vai ficar desse jeito, nada vai mudar aí.
os demis subtitulos 'NAME', 'ST', 'SCORE' e 'LEVEL' também ficam no lugar em que estão.
os traços ------- , o numero '1' , os '00000000' e a palavra NORMAL eu digitei só para mostrar o tamanho do campo e numero de caracteres.
usei esse sistema de ranking que ensina no video mas acontece que na hora que dou play fica dessa forma:
https://imgur.com/a/1u9kXaW
fica tudo no campo do score onde tem os 00000000
eu poderia expandir os campos do score mas os nomes e os st nao ficam alinhados, como na iamgem:
https://imgur.com/a/6Ea4J5C
só os scores ficam alinhados
eu queria saber o que dá para mudar nos scripts para que os nomes, os st, os scores e o level ficam cada um em seu campo.
tambem quero que apareça no ranking o LEVEL escolhido pelo jogador no inicio do jogo. o que preciso alterar nos scripts?
script Highscores
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Highscores : MonoBehaviour {
const string privateCode = "7waH-2m5a0GJS2cpLMaYxA8quMXq695UOMNpOoAmjIqA";
const string publicCode = "5b2450fd191a8a0bcc7c3a7c";
const string webURL = "http://dreamlo.com/lb/";
DisplayHighscores highscoreDisplay;
public Highscore[] highscoresList;
static Highscores instance;
void Awake() {
/*AddNewHighscore("B.K.V", 100000);
AddNewHighscore("M.A.K", 90000);
AddNewHighscore("T.E.V", 80000);
AddNewHighscore("Y.D.X", 70000);
AddNewHighscore("S.A.Y", 60000);
AddNewHighscore("D.I.K", 50000);
AddNewHighscore("W.O.Z", 40000);
AddNewHighscore("X.T.N", 30000);
AddNewHighscore("B.O.B", 20000);
AddNewHighscore("T.R.E", 10000);*/
highscoreDisplay = GetComponent<DisplayHighscores>();
instance = this;
}
public static void AddNewHighscore(string username, int score) {
instance.StartCoroutine(instance.UploadNewHighscore(username, score));
}
IEnumerator UploadNewHighscore(string username, int score) {
WWW www = new WWW(webURL + privateCode + "/add/" + WWW.EscapeURL(username) + "/" + score);
yield return www;
if (string.IsNullOrEmpty(www.error)) {
print("Upload Successful");
DownloadHighscores();
}
else {
print("Error uploading: " + www.error);
}
}
public void DownloadHighscores() {
StartCoroutine("DownloadHighscoresFromDatabase");
}
IEnumerator DownloadHighscoresFromDatabase() {
WWW www = new WWW(webURL + publicCode + "/pipe/");
yield return www;
if (string.IsNullOrEmpty(www.error)) {
FormatHighscores(www.text);
highscoreDisplay.OnHighscoresDownloaded(highscoresList);
}
else {
print("Error Downloading: " + www.error);
}
}
void FormatHighscores(string textStream) {
string[] entries = textStream.Split(new char[] { '\n' }, System.StringSplitOptions.RemoveEmptyEntries);
highscoresList = new Highscore[entries.Length];
for (int i = 0; i < entries.Length; i++) {
string[] entryInfo = entries[i].Split(new char[] { '|' });
string username = entryInfo[0];
int score = int.Parse(entryInfo[1]);
highscoresList[i] = new Highscore(username, score);
print(highscoresList[i].username + ": " + highscoresList[i].score);
}
}
}
public struct Highscore {
public string username;
public int score;
public Highscore(string _username, int _score) {
username = _username;
score = _score;
}
}
script DisplayHighscores
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DisplayHighscores : MonoBehaviour {
public Text[] camposDeHighscore;
private Highscores scriptHighscores;
void Start() {
scriptHighscores = GetComponent<Highscores>();
AtualizarHighscores();
}
public void OnHighscoresDownloaded(Highscore[] highscoreList) {
for (int i = 0; i < camposDeHighscore.Length; i++) {
camposDeHighscore[i].text = "";
if (i < highscoreList.Length) {
camposDeHighscore[i].text += highscoreList[i].username + " " + 1 + " " + highscoreList[i].score;
}
}
}
void AtualizarHighscores() {
scriptHighscores.DownloadHighscores();
}
}
fiz algumas alterações nos scripts originais para o ranking aparecer conforme nas imagens
Flávio- MembroAvançado
- PONTOS : 2833
REPUTAÇÃO : 29
Áreas de atuação : Aprendizagem em:
Programação C#;
Pixelart
Respeito as regras :
Re: Como criar um sistema de Ranking simples.
alguem pode me dar uma dica conforme o que pretendo fazer acima? sistema ranking tá meio dificil p mim ainda porque envolve muito codigo com for e foreach que eu ainda nao dominei muito
agradeço quem puder me ajudar
agradeço quem puder me ajudar
Flávio- MembroAvançado
- PONTOS : 2833
REPUTAÇÃO : 29
Áreas de atuação : Aprendizagem em:
Programação C#;
Pixelart
Respeito as regras :
Tópicos semelhantes
» Como criar um ranking online na Unity usando a PlayFab e o Facebook?
» Como criar sistema de Habilidades (Skills) para o personagem 2D / e sistema de batalha 2D
» (Duvida) Como criar um sistema de dialogos?
» Como criar inventário simples no unity
» Como Criar um Sistema de Coop? (Photon)
» Como criar sistema de Habilidades (Skills) para o personagem 2D / e sistema de batalha 2D
» (Duvida) Como criar um sistema de dialogos?
» Como criar inventário simples no unity
» Como Criar um Sistema de Coop? (Photon)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos