Я не совсем уверен, как правильно это сформулировать, поэтому, пожалуйста, прости меня, если я допустил какие-либо ошибки. Я закончил создание простого игрового приложения Unity android и создал базу данных MySQL, используя phpmyadmin для подключения к игре Unity, чтобы сохранить данные для пользователя, такие как имя пользователя, пароль и счет. Он прекрасно работает на компьютере (как я прошел несколько уроков по его настройке), где есть соединение, и я могу свободно редактировать и обновлять базу данных. Тем не менее, когда я собираю свою игру для Android и создаю «apk» и вставляю ее в папку загрузок на моем телефоне, я захожу на страницу входа в систему и ввожу имя пользователя и пароль, кажется, что к ней вообще нет доступа. Сама кнопка для входа в систему даже не регистрируется, потому что она вообще не подключена к базе данных. Моя проблема в том, как сделать так, чтобы мой телефон с Android работал с базой данных через мое игровое приложение Unity.
Я совершенно не знаком с игровым приложением Android и с самой Unity, поэтому, пожалуйста, прости меня, если я допустил какие-либо ошибки. Я следовал учебному пособию по YouTube, как подключить мою игру Unity к базе данных MySQL. Я использую xampp и создал базу данных с помощью phpmyadmin, мне также пришлось установить Sublime text 3, чтобы написать php-код для связи с базой данных, и сохранить его в htdocs в xampp. После этого я пошел на единство и создал ac # скрипт для регистрации, входа и оценки для хранения в базе данных. На компьютере все хорошо работает и ошибок нет. Когда я встраиваю в apk для android, однако, он не работает.
Код, который я покажу ниже, - это мой login.php и скрипт c # для входа в мое единство. Комментарии для моего понимания. Это мой login.php:
<?php
$con = mysqli_connect("localhost", "root", "root", "unityaccess"); //enter website, admin username and password, name of database
//check that connection happened
if(mysqli_connect_errno()){
echo "1: Connection failed";//error code #1= connection failed, echo= is like console
exit(); // like return
}
//$username = $_POST["name"]; //the "$_" is the php way of saying const
$username = mysqli_real_escape_string($con, $_POST["name"]);//for better security
$usernameclean = filter_var($username, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
$password = $_POST["password"]; // can also use array to call both, but learn later
//check if name exists
$namecheckquery = "SELECT username, salt, hash, score FROM players WHERE username='" . $usernameclean . "';"; // the "." is the php version of "+" in other languages to combine or concatenate
$namecheck = mysqli_query($con, $namecheckquery) or die("2: Name check query failed"); // error code #2 = name check query failed, die is the same thing as exit but gives a bit of information
if(mysqli_num_rows($namecheck) != 1)
{
echo "5: Either no user with name, or more than one"; //error code #5 = number of names matching !=1
exit();
}
//get login info
$existinginfo = mysqli_fetch_assoc($namecheck); // means its an associative array, similar like POST but this time is the database sending it to here
$salt = $existinginfo["salt"];
$hash = $existinginfo["hash"];
$loginhash = crypt($password, $salt);
if($hash != $loginhash)
{
echo "6: Incorrect password"; //error code #6 = password does not hash to match table
exit();
}
echo "0\t". $existinginfo["score"];
?>
, а это мой c # скрипт Login.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Login : MonoBehaviour
{
public InputField nameField;
public InputField passwordField;
public Button submitButton;
public void CallLogin()
{
StartCoroutine(LoginPlayer());
}
IEnumerator LoginPlayer()
{
WWWForm form = new WWWForm();
form.AddField("name", nameField.text);
form.AddField("password", passwordField.text);
WWW www = new WWW("http://localhost/sqlconnect/login.php", form);
yield return www;
if(www.text[0] == '0')
{
DBManager.username = nameField.text;
DBManager.score = int.Parse(www.text.Split('\t')[1]);
UnityEngine.SceneManagement.SceneManager.LoadScene(0);
}
else
{
Debug.Log("User login failed. Error # " + www.text);
}
}
public void VerifyInputs()
{
submitButton.interactable = (nameField.text.Length >= 8 && passwordField.text.Length >= 8);
}
}
//And this is the DBManager.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class DBManager //static class so that we can access this from anywhere
{
public static string username;
public static int score;
public static bool LoggedIn
{
get
{
return username != null;
}
}
public static void LogOut()
{
username = null;
}
}
// Нет ошибок, егопросто когда я встраиваю его в apk и переношу на телефон, он просто не работает. Я новичок в этом, поэтому, пожалуйста, попробуйте дать фрагменты кода или пошаговое руководство. Я прошу прощения за причиненные неудобства, и ваша помощь очень ценится.