Requisições WEB com Unity 3D

Aprenda a fazer requisições em páginas da Internet usando o Unity 3D através da classe WWW.

No decorrer de um jogo após seu lançamento ou novas versões, é comum termos a necessidade de implementar uma requisição com algum servidor web, seja para notificações de atualizações, anúncios ou até mesmo para o cadastro e autenticação do usuário. Dentro do Unity, podemos facilmente fazer requisições utilizando duas classes, que são elas: WWWform e WWW.

Neste artigo você confere como fazer a programação para validar se um determinado usuário existe, para isto exige que você tenha ao menos um pouco de conhecimento dentro do Unity.

Vamos utilizar duas cenas, uma para a autenticação e outra com o jogo, caso o usuário exista, pois bem, na cena um, adicione dois Input Field, um Text e um button.

Os Input Field têm o nome de txtUsuario e txtSenha, sendo que o txtSenha tem sua propriedade Content Type marcada como Password. Já o componente Text será utilizado para exibir as mensagens de erros ou validações.

Organize seu Canvas como mostra a imagem abaixo.

A requisição será feita no seguinte endereço: http://www.satellasoft.com/exemplos/autenticar.php, este arquivo está esperando uma requisição do tipo post para os campos txtUsuario e txtSenha. O usuário e senha para autenticação deverá ser: usuário = usuario senha = a123z.

Código 01:

<??php
    //Senha = a123z
    if(filter_input(INPUT_POST, "txtUsuario") == "usuario" && md5(filter_input(INPUT_POST, "txtSenha")) == "ee470cb6a8db3838cd196c215be7ef64"){
        echo "valid";
    }else{
        echo "none";
    }
     
?>

Se o usuário e senha for válido, retorna a mensagem “valid”, senão “none”.

Agora voltando para o Unity, crie um Script em C# chamado de Autenticar, atribua ele como um componente de qualquer objeto em cena, aqui foi atribuído a câmera. Insira o algoritmo mostrado abaixo, leia com muita atenção os comentários para que possa entender cada parte.

Código 02:

using UnityEngine;
using UnityEngine.UI;//Importamos a bibliteca UI
using System.Collections;
using UnityEngine.SceneManagement; //Importamos a biblioteca para gerenciamento de cenas

public class Autenticar : MonoBehaviour
{
    //Documentação: https://docs.unity3d.com/ScriptReference/WWWForm.html

    private string url = "http://www.satellasoft.com/exemplos/autenticar.php"; //Armazena a URL da requisição

    public InputField txtUsuario; //Referência ao componente Text correspondente ao usuário.
    public InputField txtSenha; //Referência ao componente Text correspondente a senha.
    public Text txtResultado; //Referência ao componente Text correspondente ao resultado.


    public void aut()
    {
        txtResultado.text = "Procesando..."; //Antes da requisição exibe o texto de processamento

        if (txtUsuario.text.Length >= 3 && txtSenha.text.Length >= 3) //Se o usuário e senha conter 3 ou mais letras, então retorna true
        {
            StartCoroutine(this.AutenticarUsuario()); // Inicia uma Coroutine para o método AutenticarUsuario()
        }
        else
        {
            txtResultado.text = "Formulário inválido"; //Se os dados forem inválidos, exive o texto
        }
    }

    //Método que retorna um IEnumerator, chamado de AutenticarUsuario
    public IEnumerator AutenticarUsuario()
    {

        WWWForm wForm = new WWWForm(); //Criamos uma instância do objeto WWWForm

        wForm.AddField("txtUsuario", txtUsuario.text); //O método addField recebe dois parâmentros, o primeiro é o nome do campo e o segundo o valor.
        wForm.AddField("txtSenha", txtSenha.text);

        WWW w = new WWW(url, wForm);
        /*
         * Criamos uma instância do objeto WWW e passamos dois parâmentros
         * 1º Param - URL na qual contém a página de validação
         * 2º Param - Passamos os campos e dados criados através do WWWForm
         */

        yield return w; //Aguardamos o retorno das informações

        if (!string.IsNullOrEmpty(w.error)) //Se a propriedade Error do retorno da variável w foi diferente de nulo ou vazio, é por que contém erros.
        {
            txtResultado.text = w.error; //Exibe a mensagem de erro
        }
        else
        {
            if (w.text.ToString() == "valid") //Se o valor retornado foi iguala valido..
            {
                txtResultado.text = "Carregando cena...";//Exibe o texto.
                SceneManager.LoadScene(1);//Chama a cena 1, correspondente ao jogo
            }
            else
            {
                txtResultado.text = "Usuário ou senha inválido"; //Exibe texto
            }
        }

    }
}

Com o script criado adicione as referências aos respectivos componentes do UI.

No clique do botão, selecione o objeto que contém do scripte em seguida selecione o método aut();

Agora basta executar seu projeto, teste com um usuário e senha inválido e depois com usuário e senha válidos.

Se o usuário e senha for válido, a cena dois será carregada.

Muito simples, não? Caso houverem dúvidas, deixem nos comentários.