Wie man Code ein Self-Hosted PHP

Einführung

Erstellen Sie Ihre Leader

In diesem Beispiel wird phpMyAdmin verwendet, um die Datenbank zuzugreifen (nach rechts in den Admin-Panel gebaut). Sie wollen Ihre Datenbank öffnen und die Registerkarte SQL öffnen. Wenn Sie mehr Kontrolle über den Server haben, können Sie eine neue Datenbank erstellen.

Als nächstes legen Sie die folgende SQL:

Dies wird eine Tabelle mit drei Variablen erstellen:

  • Name. die hält Namen Ihrer Benutzer und die 10 Zeichen gespeichert werden. Dies ist unsere Tabelle Haupt Kennung, so dass bedeutet, dass es nur eine Zeile pro Benutzernamen speichern.
  • Ergebnis. , die jeweils höchsten Punktzahl hält des Nutzers. In diesem Beispiel ist es eine nicht signierte Variable, so kann es nur positiv sein. Wenn Sie eine negative Werte haben wollen, müssen Sie das ändern müssen.
  • ts. ein Zeitstempel können wir den Auftrag unserer Rangliste ändern verwenden.

Nun, wenn Sie SQL Server verwenden und nicht MySQL, können Sie immer noch TIMESTAMP verwenden. aber für den Wert musst du GETDATE () anstelle von CURRENT_TIMESTAMP verwenden.

Dadurch wird sichergestellt, eine erkennbar neue Zeile für jede Partitur hinzugefügt.

Klicken Sie auf Go und Sie sind fertig! Ihr Tisch ist jetzt alles bereit.

Einrichten Ihrer PHP-Dateien

Jetzt müssen Sie einige PHP-Dateien erstellen. Dies sind die mittleren Männer der Operation, einen Weg für die Einheit die Bereitstellung des Servers zuzugreifen. Die erste PHP-Datei, die Sie gehen zu müssen, ist AddScore.php. Sie verlassen nun die Server-Informationen aus, bevor wissen müssen.

(Ersetzen SQLHOST. Sqluser. Sqlpassword und YOURDATABASE mit Ihren eigenen Informationen.)

Hier haben wir nur versucht, auf die Datenbank zu verbinden. Wenn die Verbindung fehlschlägt, wird die Einheit darüber informiert, dass die Anfrage nicht erfolgreich war. Nun, Sie gehen zu wollen, einige Informationen an den Server zu übergeben:

Der Hash wird verwendet, um Ihre Daten zu verschlüsseln und stoppen Menschen aus Ihrer Rangliste Hacking. Es wird mit einer versteckten Schlüssel in Unity erzeugt und hier, und wenn die beiden Hash-Werte übereinstimmen sind Sie Zugriff auf Ihre Datenbank erlaubt.

Hier haben wir den Hash selbst erzeugen und prüfen, ob der Hash wir von Unity einzureichen ist identisch mit dem Hash wir erwarten. Wenn ja, können wir unsere Abfrage senden!

Mit if-Anweisungen, stellen wir sicher, dass die neuen Werte nur dann verwendet werden, wenn die neue Punktzahl größer als die aktuelle Punktzahl ist, sonst werden die ursprünglichen Werte verwendet.

Endlich haben wir unsere Abfrage ausführen und unsere PHP schließen.

Diese Datei geht auf unserem Server. Sie verlassen nun die URL merken müssen. Ebenso müssen wir zwei weitere PHP-Dateien mit unterschiedlichen Abfragen machen, die wir TopScores.php und GetRank.php nennen wollen.

Die TopScores Abfrage ist einfach:

Dadurch werden die Top-10-Werte basierend auf Punktzahl nehmen, und für gebundene Reihen versetzt den Spieler, der die Punktzahl zuerst am weitesten oben der Tabelle erhalten. Dieses Mal wollen wir auch Daten extrahieren, so dass wir auch hinzufügen:

Dies wird unsere Ergebnisse extrahieren und sie in einer Weise tabellarisieren wir sie in Arrays in Unity setzen können.

Schließlich haben wir GrabRank:

Dies wird uns unsere Spieler Rang in der Anzeigetafel. Wir können es dann extrahieren von $ row Echo [ ‚Rang‘].

Unser Quellcode enthält auch eine sanitiser Funktion, die Nutzer von der Eingabe Schimpfwörter auf Ihre Rangliste verhindern, oder eine SQL-Injection-Attacke versucht.

Ein einfaches Minigame in Unity

Jetzt brauchen wir ein Spiel mit unserem Highscore Bord nutzen zu können! Wir werden nur testen, wie viele Klicks jeder Benutzer in 10 Sekunden tun, aber Sie können Ihre Rangliste zu jedem Spiel hinzuzufügen.

Wir werden, indem sie vier GUIText Objekte starten. Diese sollten über das Mittelzentrum für die Bequemlichkeit verankert werden. Sie können diese mit Pixel einstellen versetzt sie an der richtigen Stelle zu bekommen, aber wenn Sie sie wollen, dass ihre Position für jede Auflösung anzupassen, ist es einfacher, die X- und Y-Position zu ändern (zwischen 0 und 1); Andernfalls müssen Sie sie beim Start anpassen.

Sie haben jedoch die Schriftgröße beim Start anpassen, wenn Sie bei allen Auflösungen ausgeführt werden sollen. Eine schnelle Möglichkeit, dies zu tun ist, indem sie auf den Bildschirm des Höhe stützen. Wir können dies tun, indem Sie eine Klasse zu machen, das dies tut und es allen unseren Textobjekte angebracht, aber es ist viel einfacher, das von einer Klasse zu tun.

Es spielt keine Rolle, welche Aufgabe wir als „Manager“ wählen, so können wir nur diese Klasse auf unseren Klick-Zählern setzen. Also in unserer ersten Klasse, die wir schreiben:

Dadurch wird jedes Textobjekt in der Szene finden und es zu einer vernünftigen Größe skalieren.

Jetzt wollen wir die Klickzähler um größer zu sein als der andere Text, so dass, wenn wir diese Klasse dort bleiben wir haben den zusätzlichen Bonus, dass wir auch dann, wenn die guiText in Frage prüfen, kann das eine dieser Gameobject angebracht ist:

Das Klicken Komponente des Spiels wird sehr einfach sein. Zu Beginn wollen wir nicht den Timer bis zum ersten Klick rückwärts zu zählen, so werden wir zwei private bools in unserer Klasse machen - firstClick und allowedToClick. In Start () können wir firstClick auf false und allowedToClick auf true gesetzt.

Jetzt müssen wir die Zähler, um tatsächlich die Klicks aufzeichnen, und es gibt ein paar Möglichkeiten, dies zu tun. Wir könnten einen Integer-Variable halten, die die Punktzahl verfolgt, oder wir könnten es etwas weniger effizient, aber in einer Zeile machen (und mit etwas so einfach wir nicht wirklich optimieren müssen, aber es ist gut, Praxis). So werden wir den Klick in der Update () Funktion, registrieren und den Wert erhöhen, um die Zeichenfolge zu lesen.

Wie man hier sehen kann, wird die Inkrementierung durch das Lesen der Zeichenfolge als eine ganze Zahl erreicht, das Hinzufügen einer, und dann Konvertierung in einen String zurück. Sie werden auch hier sehen, dass wir einen Koroutine, sobald die ersten Klick ausgeführt haben, die den Countdown beginnt.

Wir werden Rekursion in dieser Funktion verwenden. Auch hier konnten wir eine ganze Zahl verwenden, die den Countdown-Wert für die Effizienz hält, aber wir werden wieder String-Manipulation verwenden.

Hinweis: Es ist wichtig, dass wir verwendet StartCoroutine () und nicht nur diese Funktion aufrufen, weil es ein IEnumerator ist. Die Ausbeute Anweisung bewirkt, dass es für eine Sekunde warten, bevor eine Aktion ausgeführt wird. Es entfernt man aus dem Zähler, und wenn der Wert nicht Null ist, es nennt sich wieder. Auf diese Weise wird die Funktion zählt nach unten, bis er 0 erreicht.

Name Eintrag

Danach hält es der Benutzer klicken, fragt nach dem Benutzernamen und greift auf unsere zweite und dritte Klassen (die wir schreiben sind über!). Wir haben einen Blick auf, was diese tun jetzt, mit NameEnter beginnen.

In NameEnter () wir gehen, damit ein Benutzer seinen Benutzernamen eingeben, mit einigen Einschränkungen. Zunächst wollen wir _ den Unterstrich angezeigt werden soll. das wird so schnell gelöscht werden, da sie ihren Namen eingeben beginnen. Hinzu kommt, wollen wir nicht, sie in der Lage sein, Zeichen zu verwenden, wie \ 'oder ‚. da diese würde unsere SQL-Abfragen vermasseln.

Wir werden einen String-Builder verwenden, um dies zu schaffen. Zuerst werden wir einige Variablen an der Spitze unserer Klasse platzieren:

Die MaxNameLength sollte auf die gleiche Länge eingestellt werden, wie Sie für Ihre VARCHAR Länge verwendet, wenn Sie Ihre Tabelle. Hier haben wir unseren String-Builder, player. und zwei Boolesche Werte. Das erste, backspacepossible. ist die Fähigkeit des Benutzers Backspace zu halten, um zu steuern Zeichen zu löschen. Das zweite ist, um anzuzeigen, ob sie ihren Namen noch die Eingabe begonnen haben.

In Start (). wir müssen ein paar Dinge kümmern. Wir werden alle Texte mit Ausnahme der Toptext nannte man deaktivieren; wir können das in einer foreach-Schleife tun, wie zuvor.

Hier können Sie sehen, wir ein paar Dinge getan haben. Wir haben behindert unsere erste Klasse (ClickTimes), wie wir es nicht mehr verwenden. Wir haben erstellt auch eine Instanz von playerNameTemp und den beigefügten es mit _. Spieler können so sehen, wo ihr Name geht, und wir haben unsere Variablen initialisiert.

Jetzt müssen wir die Spieler ermöglichen, tatsächlich ihren Namen eingeben. Am Ende des Update () legen wir den folgenden Ausschnitt:

Dies wird sicherstellen, dass der Text zeigt, was unsere String-Builder Aufzeichnungen.

Weiter behandeln wir die Zeicheneingabe:

Also, vorausgesetzt, die Länge des String-Builder ist kleiner als die maximale Länge des Namens, und solange der Benutzer Zeichen eingibt, die entweder Buchstaben, Ziffern, Leerzeichen oder Unterstreichungen (obwohl Sie nur alphanumerische Zeichen gelassen werden kann), wird die Zeichenfolge mit der neuen Ziffer angehängt. Im Fall, dass dies die erste Presse ist, wird der ursprüngliche Strich entfernt werden, bevor der neue Brief hinzugefügt wird.

Solange es noch keine Zeichen in unseren String-Builder und Backspace ist möglich, kann der Benutzer Zeichen entfernen. Beachten Sie den Unterschied zwischen den ersten und zweiten Aussagen. Der ehemalige verwendet GetKeyDown (). während die letzteren verwendet GetKey () (und prüft unsere bool). Der Unterschied ist, dass wir jedes Mal ein Zeichen drückt der Benutzer Backspace löschen sollten, aber nicht ständig, während die Benutzer es nach unten halten.

Die Koroutinen BackspaceInitialHold () und () einfach warten, 0,15 und 0,05 Sekunden, bzw., und dann backspacepossible auf wahr gesetzt. So, nachdem unsere Benutzer Backspace gehalten hat unten für 0,15 Sekunden, solange sie noch Backspace halten, wird ein Zeichen alle 0,05 Sekunden gelöscht werden (solange die Länge größer als Code> 0).

Auch wir sehen vor, dass, wenn dies die erste Taste drückt der Benutzer, initialpress ausgelöst wird (so wird es nicht versuchen, ein Zeichen zu entfernen, sobald sie drücken etwas anderes).

Zu allem weg, brauchen wir, damit der Benutzer Return drücken, um die Namenseingabe zu beenden.

Solange der Benutzer eine Art von Eingabe gemacht hat und die Länge größer als 0 wird der Name akzeptiert werden. Alle unsere Textobjekte erhalten gelöscht, wir diese Klasse zu deaktivieren, und wenden wir uns auf unsere dritte Klasse, Highscore. Alle drei unserer Klassen haben auf unserem Objekt im Editor gesetzt werden.

Wir haben gerade Highscore ‚s SetName () Funktion aufgerufen, und früher nannten wir SetScore (). Jede dieser Funktionen setzt einfach die Werte der privaten Variablen, die wir jetzt in unsere Rangliste einreichen würden.

Zugriff auf den Leader in Unity

Dies ist das GUIText Fertig, dass wir unsere Rangliste stützen würden auf. Sie sollten den Text stellen Sie sicher, die Mitte-links verankert ist, und linksbündig. Sie können auch eine Schrift hier wählen.

Wir alle müssen unsere Werte aus der Zeit vor - der Schlüssel Sie generiert, die URLs, die Sie Ihre PHP-Dateien, die hochgeladen und so weiter. Das Highscores und Benutzervariablen wird unter Verwendung von zwei öffentlichen Funktionen aufgerufen SetScore () und SetName (). die wir im vorhergehenden Abschnitt verwendet.

Wir brauchen IEnumerators hier verwenden, um unsere SQL-Abfragen zu behandeln, weil wir auf eine Antwort warten müssen. Wir werden unsere erste Koroutine beginnen, AddScore (). sobald die Klasse aktiviert ist.

Erstens haben wir unsere Hash mit dem privaten Schlüssel erstellen, eine Funktion mit einem MD5-Hash in der gleichen Weise wie PHP md5 () zu erstellen. Es ist ein Beispiel dafür auf Unity Community Wiki.

Wenn hier der Server aus irgendeinem Grund nicht verfügbar ist, führen wir einen Fehler () Funktion. Sie können wählen, was Sie in Ihrer Fehlerbehandlung erfolgen sollen. Wenn die Gäste richtig geschrieben wird, aber wir werden unser nächstes Koroutine starten: GrabRank ().

Jetzt können wir unsere letzten Koroutine verwenden. Dieser wird binden alles. Wir beginnen mit der URL zum letzten Mal Zugriff auf:

Aber dieses Mal wollen wir die Daten, die wir in ein Array von Strings erhalten aufzuteilen. Zunächst einmal können wir einen String Split wie so verwenden:

Dadurch wird sichergestellt, jedes Ergebnis wird ein neues Element in unserem String-Array sein, solange eine neue Zeile oder ein Register gefunden wird (was es sein wird!). Wir werden jetzt diese in zwei weitere Arrays genannt Namen und Noten teilen.

Wir haben jetzt zwei neue Arrays hergestellt, die jeweils die Hälfte der Größe des ersten Arrays sind. Wir teilten uns dann jeden ersten String in unserem Namen Array und jeder zweite in unserem Ticker-Array.

Und jetzt sind wir bereit, unsere Text-Objekte zu erstellen, auf der Grundlage unserer BaseGUIText Fertig. Wir instanziiert die Titel einzeln und setzen ihren Text - zum Beispiel:

Sobald wir dies für alle unsere Titel gemacht haben, passen wir unsere Positionen, so dass der neue Text weiter unten angezeigt wird.

Als nächstes führen wir eine for-Schleife, die durch unsere ganze Top-10-Liste durchlaufen wird, die Einstellung der Namen, Rang und Punktzahl (und sicherstellen, dass der Text sinnvoll verankert ist), und dann noch einmal die Positionen eingestellt werden. Jede Iteration, prüfen wir, ob der Rang des Benutzers gleich der Rang angezeigt, und wenn ja recolour wir den Text so, dass die Punktzahl des Benutzers wird gelb hervorgehoben:

Und dann, endlich, prüfen wir, ob der Rang des Benutzers über 10 ist, wenn es ist, dass wir ein Tor am unteren Rande in der elften Schlitz zu veröffentlichen, zusammen mit ihrem Rang und färben es gelb.

Schlussfolgerung

Voilà; unsere Rangliste ist fertig! In den Quelldateien habe ich auch eine PHP-Datei, die die Reihen über und unter den Benutzernamen des Benutzers greifen wird, so dass Sie sie genau zeigen, wo sie auf dem Brett sind.

In Verbindung stehende Artikel