Przy takim podejściu zignoruj wszelkie zagrożenia bezpieczeństwa
Nie rób tego w ten sposób . Nie ma znaczenia, czy ochrona nadejdzie przed, czy po. Skończysz przepisywanie całego kodu, ponieważ hasło jest na stałe zakodowany w Twojej aplikacji, który można dekompilować i łatwo pobrać . Wykonaj połączenie teraz we właściwy sposób, aby nie trzeba było ponownie pisać całej aplikacji.
Uruchom polecenie bazy danych na swoim serwerze za pomocą php, perla lub dowolnego języka, w którym jesteś wygodny, ale powinno to zostać zrobione na serwerze.
W Unity użyj WWW
lub UnityWebRequest
klasy do komunikacji z tym skryptem, a następnie będziesz mógł wysyłać i odbierać informacje z Unity na serwer. Istnieje wiele przykładów. Nawet z tym nadal musisz wdrożyć własne zabezpieczenia, ale jest to znacznie lepsze niż to, co masz teraz.
Możesz także odbierać dane wielokrotne za pomocą json.
Poniżej znajduje się kompletny przykład z tej wiki Unity. Pokazuje, jak współdziałać z bazą danych w Unity za pomocą php po stronie serwera i Unity + C# po stronie klienta.
Po stronie serwera :
Dodaj wynik za pomocą PDO :
Wystąpił błąd.', $e->getMessage() ,'
'; } $realHash =md5($_GET['nazwa'] . $_GET['wynik'] . $secretKey); if($realHash ==$hash) { $sth =$dbh->prepare('WSTAW WARTOŚCI punktów (null, :name, :score)'); spróbuj { $sth->wykonaj($_GET); } catch(Wyjątek $e) { echo 'Wystąpił błąd.
', $e->getMessage() ,'
'; } } ?>
Pobierz wynik za pomocą PDO :
Wystąpił błąd.', $e->getMessage() ,'
'; } $sth =$dbh->query('WYBIERZ * Z wyników ORDER BY score OBNIŚĆ LIMIT 5'); $sth->setFetchMode(PDO::FETCH_ASSOC); $wynik =$sth->pobierzWszystko(); if(count($wynik)> 0) { foreach($wynik jako $r) { echo $r['nazwa'], "\t", $r['wynik'], "\n"; } }?>
Włącz zasady międzydomenowe na serwerze :
Plik ten powinien mieć nazwę „crossdomain.xml” i umieścić w katalogu głównym serwera WWW. Unity wymaga, aby witryny internetowe, do których chcesz uzyskać dostęp za pośrednictwem żądania WWW, miały politykę międzydomenową.
Strona klienta/jedności :
Kod klienta z Unity łączy się z serwerem, wchodzi w interakcję z PDO i dodaje lub pobiera wynik w zależności od tego, która funkcja jest wywoływana. Ten kod klienta został nieznacznie zmodyfikowany w celu skompilowania z najnowszą wersją Unity.
ciąg prywatny secretKey ="mySecretKey"; // Edytuj tę wartość i upewnij się, że jest taka sama jak ta przechowywana w łańcuchu serverpublic addScoreURL ="http://localhost/unity_test/addscore.php?"; //pamiętaj, aby dodać ? do twojego urlpublic string highscoreURL ="http://localhost/unity_test/display.php";//Tekst do wyświetlenia wyniku onpublic Tekst statusText;unieważnij Start(){ StartCoroutine(GetScores());}// pamiętaj, aby użyć StartCoroutine podczas wywoływania tej funkcji!IEnumerator PostScores(string name, int score){ //To łączy się ze skryptem php po stronie serwera, który doda nazwę i wynik do bazy danych MySQL. // Dodaj do niego ciąg reprezentujący imię gracza i jego wynik. skrót ciągu =Md5Sum(nazwa + wynik + tajny klucz); string post_url =addScoreURL + "name=" + WWW.EscapeURL(name) + "&score=" + wynik + "&hash=" + hash; // Opublikuj adres URL na stronie i utwórz obiekt do pobrania, aby uzyskać wynik. WWW hs_post =nowy WWW(post_url); plon zwraca hs_post; // Poczekaj, aż pobieranie się zakończy if (hs_post.error !=null) { print("Wystąpił błąd podczas wysyłania najlepszego wyniku:" + hs_post.error); }}// Pobierz wyniki z bazy danych MySQL do wyświetlenia w GUIText.// pamiętaj, aby użyć StartCoroutine podczas wywoływania tej funkcji!IEnumerator GetScores(){ statusText.text ="Ładowanie wyników"; WWW hs_get =nowy WWW(URL_wysokiej); wydajność zwraca hs_get; if (hs_get.error !=null) { print("Wystąpił błąd podczas uzyskiwania najlepszego wyniku:" + hs_get.error); } else { statusText.text =hs_get.text; // to jest tekst GUI, który wyświetla wyniki w grze. }}ciąg publiczny Md5Sum(string strToEncrypt){ System.Text.UTF8Encoding ue =new System.Text.UTF8Encoding(); byte[] bajty =ue.GetBytes(strToEncrypt); // zaszyfruj bajty System.Security.Cryptography.MD5CryptoServiceProvider md5 =nowy System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] hashBytes =md5.ObliczHash(bajty); // Konwertuj zaszyfrowane bajty z powrotem na łańcuch (o podstawie 16) string hashString =""; for (int i =0; i
To tylko przykład, jak prawidłowo to zrobić. Jeśli chcesz wdrożyć funkcję sesji i dbać o bezpieczeństwo, zapoznaj się z OAuth 2.0 protokół. Powinny istnieć biblioteki, które pomogą w rozpoczęciu korzystania z OAuth protokół.