[ASSET PACKAGE] Game Check Update
Página 1 de 1
[ASSET PACKAGE] Game Check Update
Fala meu povo, depois de 1 semana mexendo com unity web e essas coisas na unity resolvi criar meu proprio teste de check for update, checagem de atualizaçao atraves da unity mesmo, essa gambiarra é feita atraves de um arquivo de texto(TXT) hospedado na web, ouvi muitas duvidas por ai de como faço um game launcher para ver se existe atualizaçao para meu jogo e etc,
Resumo do Pacote;
Botao checar atualizaçao
printar versao atual
printar a nova
disponibilizar o botao de download
fazer download
fim.
obs: o programa nao atualiza seu jogo automaticamente , mais ele faz o download de um arquivo adaptado comforme o desenvolvedor possua, recomendo uma atualizaçao em um arquivo .zip, .rar etc
digamos que o usuario quer verificar se tem uma nova versao do jogo ,é exatamente o básico que fiz aqui, ai o user faz isso dentro do jogo mesmo o download do arquivo zip diretamente no seu jogo, tudo atraves de um arquivo de texto, entao digamos ,depois que o user baixou o arquivo só é ele extrair na pasta e substituir, isso poupa o trabalho do jogador abrir o navegador , entrar no site ainda e procurar o arquivo para baixar etc,
Script
Quem souber adaptar ou reaproveitar com modificaçoes deixo ao seu criterio.
o link abaixo tem um .Package para baixar junto com o programa de teste tudo feito na unity
Link: Package + Teste Aqui
esse é o arquivo usado no exeplo:
versao.txt
Unity usada:
2019.4.28f1
Resumo do Pacote;
Botao checar atualizaçao
printar versao atual
printar a nova
disponibilizar o botao de download
fazer download
fim.
obs: o programa nao atualiza seu jogo automaticamente , mais ele faz o download de um arquivo adaptado comforme o desenvolvedor possua, recomendo uma atualizaçao em um arquivo .zip, .rar etc
digamos que o usuario quer verificar se tem uma nova versao do jogo ,é exatamente o básico que fiz aqui, ai o user faz isso dentro do jogo mesmo o download do arquivo zip diretamente no seu jogo, tudo atraves de um arquivo de texto, entao digamos ,depois que o user baixou o arquivo só é ele extrair na pasta e substituir, isso poupa o trabalho do jogador abrir o navegador , entrar no site ainda e procurar o arquivo para baixar etc,
Script
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Origan.Plugins;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Text.RegularExpressions;
//este scripts apenas check por uma atualizacao de jogo em um documento de texto na web, onde contem a nova versao e a url do jogo
public class Teste : MonoBehaviour
{
private const string appVersion = "1.0.1"; //a versao digamos do meu jogo/app
//essa é a minha url de teste do github coloque um arquivo de texto na sua url a qual voce tenha acesso a leitura para funcionar
private string URL_CHECK_UPDATE = "https://gitcdn.xyz/repo/developezbr/Testes/main/versao.txt"; //coloque sua url aqui,url do arquivo txt para analizar
private string URL_ARQUIVO_UPDATE = ""; //deixa vazio por enquanto,essa string sera usada como endereço do arquivo atualizado para download, sera obtida do arquivo de texto
/** Resummo:
* para testar
* hospede um arquivo com nome versao.txt em algum site onde ele possa ser lido peloprograma via script, testado no github onde o link do arquivo foi convertido pra link direto
* edite e no arquivo coloque na linha 1 a versao
* exemplo: versao=1.0.0
* e na linha 2 coloque a url
* exemplo: url= h t t p://etc.com/arquivo.zip
* e salve o arquivo,
* quando for lido , todo o texto depois de = sera lido, edite conforme queira
* assim que a conexao for sucedida o progra,a vai ler esse arquivo da web e fazer comparaçao das versoes por maior numero
* essa checagem e feita por remoçao dos pontos, exemplo : 1.0.5, sera 105
* pode usar algum site de teste de arquivos pra url de download para testar
* ------->
* como o teste funciona
* TelaChecarAtualizacao e TelaDownload , sao dois objetos vazios dentro do canvas o
* TelaChecarAtualizacao começa ativado e o TelaDownload fica desativado ate o usuario clicar no botao de download
* o botao download fica inativo e só ativa depois de checar o arquivo
* 1- todos os componentes Text dentro do pai TelaChecarAtualizacao começam inativo
* o script App é um assistent apenas para pegar caminhos para salvar
*/
//----------2 gameobjects vazio para cada açao no ditor/jogo,estao dentro do canvas--------
//-----------gameobect vazio parent 1, tela de check update----------
public GameObject TelaChecarAtualizacao; //Objeto vazio PAI, arrasta para ca
//--------filhos--------
public Button BotaoChecarAtualizacao; //Botao usado para fazer o check de atualizacao, arrasta para ca
public Text TextoVerificacao; //Texto UI de verificao, exemplo :buscando atualizacao , arrasta para ca
public Text TextoVersaoAtual; //Text UI versao padrao , sera mostrada a versao atual do jogo/app , arrasta para ca
public Text TextoMostraNovaVersao; //Text UI nova versao, o numero da nova versao sera mostrado aqui , arrasta para ca
public Text TextoMostraURLNovaVersao; //Text UI URL da nova versao, apos de analizar o arquivo TXT ira mostrar a url de download aqui, arrasta para ca
public Button BotaoDownloadUpdate; //Botao se uma atualizacao estiver disponivel, o button de downoad estara disponivel para download , arrasta para ca
//-----------gameobet vazio parent 2, tela de download update-----------
public GameObject TelaDownload; //Objeto vazio PAI
//---------filhos-------
public Image DownloadBarIMG; //sera barra de download, um objeto image UI, arraste para ca
public Text TextoDownloadEnProgress; //Text UI ira mostrar o progresso de download aqui em texto em %, arrasta para ca
public float ProgressDownload; //a contage do proresso do arquivo ,float
// Start is called before the first frame update
void Start()
{
//botao ao apertar iniciara a conexao com o arquivo versao.txt da web e fazer a checagem de leitura de atualizacao no arquivo
BotaoChecarAtualizacao.onClick.AddListener(() => { StartCoroutine(ConectarChecarAtualizacao()); /*Ienumerator*/ });
//botao ira preparar e começar a baixar/salvar o arquivo no computador, recomendando url arquivo compactado
BotaoDownloadUpdate.onClick.AddListener(() => { StartCoroutine(BaixarAtualizacao()); /*Ienumerator*/ });
}
//ienumetor vai checar se tem uma nova atualizacao, necessario conexao com internet
IEnumerator ConectarChecarAtualizacao()
{
BotaoChecarAtualizacao.interactable = false; //se o botao foi apertado .desativar interacao
TextoVerificacao.enabled = true; //ativa o text de verificao
yield return new WaitForSeconds(3f); //esperar tempo
TextoVersaoAtual.enabled = true; //ativar o texto da versao atual
TextoMostraNovaVersao.enabled = true; //ativar o texto de nova versao
TextoVersaoAtual.text = "versao atual: " + appVersion; //exibe a versao do atual do jogo/app
TextoMostraNovaVersao.text = "nova versão: connectando..."; //exibe a msg connectando,
yield return new WaitForSeconds(3); //esperar tempo
//declaracao o UnityWebRequest
UnityWebRequest req = UnityWebRequest.Get(URL_CHECK_UPDATE); //URL_CHECK_UPDATE a url onde esta o arquivo versao.txt na pagina da web
DownloadHandler hand = req.downloadHandler;
yield return req.SendWebRequest(); //enviar pedido para a web
//checar o resultado da resposta da web ,talvez se der algum erro
if (req.error != null)
{
print(req.error); //printar (console editor unity somente) se erro
}
else
{
//se o arquivo foir encontrado e sucedido
string VersaoPadrao = appVersion.Replace(".", ""); //pegar versao padrao do app e remove os pontos, ex: 1.1.0, 110
string[] SepararLinhas = Regex.Split(hand.text, "\n"); //separa o texto do arquivo da web versao.txt em 2 linhas: versao e url da nova atualizacao
string NovaVersaoWeb = SepararLinhas[0].Substring(SepararLinhas[0].IndexOf("=") + 1); //pega so a versao linha 1 index 0
string LinhaURL = SepararLinhas[1].Substring(SepararLinhas[1].IndexOf("=") + 1); //pega linha 2 index 1, a URL no arquivo web
URL_ARQUIVO_UPDATE = LinhaURL; //endereço da nova atualizaçao sera armazenado aqui
string NovaVersao = NovaVersaoWeb.Replace(".", ""); //pega nova versao e remove os pontos .ex: 2.5.1 , 251
int NovaV, VelhaV;
print(SepararLinhas[1]); //exibe a nova versao no console do editor somente, para teste
//ver se pode passar para integer, int
int.TryParse(NovaVersao, out NovaV); //NovaV é atribuida nova versao
int.TryParse(VersaoPadrao, out VelhaV); //VelhaV é atribuida versao do app/jogo
yield return new WaitForSeconds(1); //esperar tempo
//calculando a nova e a versão anterior, se a nova for maior que a anterior atualizacao disponivel
if (NovaV > VelhaV)
{
TextoVerificacao.text = "Nova versão disponivel!"; //atualiza o texto exibindo que tem uma nova atualizacao
TextoMostraNovaVersao.text = "nova versao: " + NovaVersaoWeb; //a nova versao é exibida nesse texto
TextoMostraURLNovaVersao.enabled = true;
TextoMostraURLNovaVersao.text = "http://" + LinhaURL; //exibe a url da nova versao
BotaoDownloadUpdate.interactable = true; //Disponibiliza interaçao do botao de download
}
}
yield return null;
}
//ienumerator aqui que acontece a conexao de download,vai fazer o download e salva o arquivo no computador
IEnumerator BaixarAtualizacao()
{
UnityWebRequest req = UnityWebRequest.Get(URL_ARQUIVO_UPDATE); //URL_ARQUIVO_UPDATE essa é a url da nova versao armazenada
//se windows build, aqui digamos que quando eu clicar no botao baixar atualizacao, ira fazer o download do arquivo e vai salvar logo na pasta da build do jogo
if (Application.platform == RuntimePlatform.WindowsPlayer)
{
DownloadHandlerFile file = new DownloadHandlerFile(App.GetBuildPath() + URL_ARQUIVO_UPDATE.Substring(URL_ARQUIVO_UPDATE.LastIndexOf("/") + 1));
req.downloadHandler = file;
}
//se editor, digamos que quando eu clicar no botao baixar atualizacao, ira fazer o download do arquivo e vai salvar logo na pasta assets do jog
if (Application.platform == RuntimePlatform.WindowsEditor)
{
DownloadHandlerFile file = new DownloadHandlerFile(App.GetAssetsPath() + URL_ARQUIVO_UPDATE.Substring(URL_ARQUIVO_UPDATE.LastIndexOf("/") + 1));
req.downloadHandler = file;
}
TelaChecarAtualizacao.SetActive(false); //desativa o gameobject pai
TelaDownload.SetActive(true); //ativa o gameobject pai
req.SendWebRequest(); //enviar pedido a web
yield return StartCoroutine(Download(req)); /*IEnumerator*/
}
//ienumerator aqui acontece a contagem do progresso de download e atualiza a barra de download
IEnumerator Download(UnityWebRequest req)
{
//enquando nao completar, atualizar a barra de download
while (!req.isDone)
{
ProgressDownload = req.downloadProgress;
DownloadBarIMG.fillAmount = ProgressDownload;
TextoDownloadEnProgress.text = Mathf.Round(DownloadBarIMG.fillAmount * 100) + "%"; //converter o progresso de download para int arrendondado
yield return null;
}
//se finalizou
if (req.downloadHandler.isDone)
{
TextoDownloadEnProgress.text = "Download Concluido."; //quando o arquivo for baixado com sucesso, atualiza o texto
yield return new WaitForSeconds(3); //esperar tempo
TelaDownload.SetActive(false); //desativa a tela de download
TelaChecarAtualizacao.SetActive(true); //ativa a tela de checar novamente
TextoMostraNovaVersao.enabled = false; //desativa o Text da nova versao
}
}
}
Quem souber adaptar ou reaproveitar com modificaçoes deixo ao seu criterio.
o link abaixo tem um .Package para baixar junto com o programa de teste tudo feito na unity
Link: Package + Teste Aqui
esse é o arquivo usado no exeplo:
versao.txt
Unity usada:
2019.4.28f1
Tópicos semelhantes
» FPS Asset package completo
» Unity5 FBX Exporter (Free Package/Asset)
» [TUTORIAL] Unity 3D - Package Manager e Asset Store
» Asset para game de terror
» Sistema de Update do Game
» Unity5 FBX Exporter (Free Package/Asset)
» [TUTORIAL] Unity 3D - Package Manager e Asset Store
» Asset para game de terror
» Sistema de Update do Game
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos