Jump to content
Unity Insider Forum

Statistiken und Daten an DB auf Webserver senden und auslesen?!


strudi

Recommended Posts

Hallo,

 

nach längerer Pause von Unity und vom Programmieren hat mich vor kurzem die Lust wieder gepackt und habe mit meinem Bruder ein kleines Projekt begonnen. Es soll(te) eigentlich nur dazu dienen um wieder rein zu kommen und gewisse Sachen wieder ins Gedächtnis zu bekommen und neue Dinge zu lernen.

 

Soweit läuft das Spiel aber es fehlt noch einiges an Feinschliff und an einigen Features. Was ich unbedingt implementieren möchte ist folgendes: Ich möchte gewisse Daten an eine Datenbank auf einem Webserver senden können um gewisse Statistiken erstellen bzw auswerten zu können. Als Beispiel käme mir in den Sinn, wie oft ein Gegner abgeschossen wurde oder wieviel Zeit insgesamt alle Spieler mit dem Spiel verbracht haben etc. Für mich persönlich wären diese Dinge interessant zu wissen und möglicherweise würde das die Spieler die das Spiel gespielt haben auch interessieren, wenn man es Ihnen mitteilt.

 

Ist sowas möglich? Wenn ja, hat jemand ein paar Denkanstöße oder Lösungsvorschläge? Habe mit Serverbasierten Dingen oder Datenbanken in Unity noch nicht wirklich viel am Hut gehabt. Hilft da womöglich das Snippet für Online-Highscorelisten?

 

Vielen Dank für etwaige Hilfestellungen!

 

Im Anhang noch ein paar Bilder des Projekts! (Noch) Nichts aufregendes, aber es funktioniert wie gewollt und der Lernfaktor und Spaß beim erstellen war und ist ebenfalls vorhanden! ;)

 

Lg

post-678-0-81785400-1398105045_thumb.jpg

post-678-0-37924100-1398105055_thumb.jpg

post-678-0-16463700-1398105066_thumb.jpg

post-678-0-53509000-1398105079_thumb.jpg

post-678-0-31552900-1398105089_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich arbeite grade an einem Tutorial: http://www.3dan.de/t...im-framework-1/ - Wenn es fertig ist, werde ich es auch hier ins Forum packen. Wird vlt etwas fett für das was du willst, aber dafür ist es sauber und wiederverwendbar. Ansonsten gibt es noch ein HighScore Tutorial - google mal "Highscore unity php". Der Code dort ist aber...naja...es funktioniert, schön ist anders. Wenn du etwas mehr willst, zieh dir mein Tutorial rein. So schwer ist das nicht. ;)

Ansonsten kannst aber auch noch so Dienste wie gameanalytics nutzen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe es jetzt mal geschafft ein einfaches Account- bzw. Loginsystem zu erstellen. Datenbank mit HeidiSQL erstellt und der Zugriff erfolgt derzeit nur lokal, ist also auf keinem Server hochgeladen. Jetzt möchte ich eine Tabelle für Achievments bzw Erfolge erstellen und diese an die Accounts binden, auch an jene Accounts die nachträglich erst hinzugefügt werden. Die Tabelle habe ich schon erstellt, aber ich stehe momentan auf dem Schlauch wegen den Beziehungen zwischen der Account Tabelle und der Erfolgstabelle.

Die Tabellen sehen folgendermaßen aus:

 

Users:

-ID

-Username

-Password

 

Achievments:

-ID

-AchievmentName

-AchievmentDescription

-MyProgress

-TargetProgress

-RewardPoints

 

Es muss ja eine Abhängigkeit bzw. eine Beziehung zwischen der Tabelle "Users" und "Achievments" geben. Nur weiß ich grad nicht wie bzw. mit welchem Primär- bzw Fremdschlüssel. Jeder User sollte mehrere (oder alle) Erfolge haben können. Das wäre meines Wissens nach eine m:n Beziehung? Aber wie löse ich das? Welche Spalten müssen miteinander verknüpft sein um eine solche Beziehung zu ermöglichen?

 

Hoffe es kann mir jemand helfen! Vielen Dank! ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Damit meint er wann der Spieler den Erfolg erhalten hat, was er jetzt speziell angibt ist die Millisekunden für das Datum.

 

Man kann natürlich auch einfach ein Date / DateTime für die erhalten spalte nehmen, nimmt halt mehr Platz in der DB weg, dafür spart man sich dann den Schritt aus den Millisekunden wieder ein Datum zu bauen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für den DB Zugriff bittet sich auch ein Object-Relational Mapper an, dann mußt du dich nicht selbst um das SQL kümmern sondern nur um deine PHP Objekte.

 

Schau dir vielleicht mal die folgenden an:

Vielleicht mußt du auch mal nach Vergleichen suchen, um zu entscheiden welches am besten geeignet ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, habe nun auch einen OnlineHighscore mit Hilfe des Unity Wiki erstellt, wenn auch in einer abgeänderten Form. Die Liste wird nach "Time" und "Score" sortiert. Je weniger Zeit man braucht, desto weiter oben steht man in der Highscoreliste. Das Auslesen aus der Datenbank und das Anzeigen der Daten in der Szene in Unity funktioniert auch wunderbar.

Nun stellt sich mir die Frage, ob man so irgendwie die erreichte Platzierung mit einer Zahl versehen kann? Der erste Platz mit einer "1", der zweite mit einer "2" etc. Und wie man die eigene Platzierung seperat irgendwie anzeigen kann, wenn man recht weit hinten sein sollte in der Tabelle. Das Problem das ich sehe ist, dass die Tabelle nur nach einem gewissen Schema sortiert wird und nirgends die tatsächliche Platzierung gespeichert ist. Jemand eine Idee?

 

Danke lg

Link zu diesem Kommentar
Auf anderen Seiten teilen

...das erinnert mich daran mein Tutorial fertig zu machen ;)

 

könnte so aussehen:

    public class Scoreboard : MonoBehaviour
    {
	    // 1. string vom Server parsen
	    // parsen hier oder so dann jedes mal AddPlayerToScoreboard("SuperDuperPlayerName", 54315);
	    // 2. "Spieler" in eine Liste packen.
	    public class ScoreboardPlayerDings
	    {
		    public string PlayerName;
		    public float Score;
		    public int Ranking;
	    }
	    public List<ScoreboardPlayerDings> ScoreboardList = new List<ScoreboardPlayerDings>();
	    public void AddPlayerToScoreboard(string pName, float score)
	    {
		    var p = new ScoreboardPlayerDings {PlayerName = pName, Score = score};
		    ScoreboardList.Add(p);
		    SortList();
	    }
	    public void SortList()
	    {
		    // order desc
		    //ScoreboardList = ScoreboardList.OrderByDescending(x => x.Score).ToList();
		    // order asc
		    ScoreboardList = ScoreboardList.OrderBy(x => x.Score).ToList();
		    foreach (var p in ScoreboardList)
		    {
			    p.Ranking = ScoreboardList.IndexOf(p) + 1;
		    }
	    }
	    private void OnGUI()
	    {
		    GUILayout.BeginVertical();
		    foreach (ScoreboardPlayerDings scoreboardPlayerDingse in ScoreboardList)
		    {

			    GUILayout.Label("Ranking: "+scoreboardPlayerDingse.Ranking +" Name: " + scoreboardPlayerDingse.PlayerName + " Score: " + scoreboardPlayerDingse.Score);

		    }
		    GUILayout.EndVertical();

	    }
    }

 

 

 

Mal so fix aus der Hüfte...geht bestimmt noch schöner

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank AgentCodeMonkey! Werd ich mir am Abend mal genauer ansehen! Ich ordne die Liste momentan im PHP-File ... so wie ich das sehe, kann ich das verwerfen und die Liste per Code in Unity sortieren ... Hmm ok, wie gesagt, mit DBs in Unity kenn ich mich noch nicht so genau aus! :)

 

Und wenn ich per Zeit und Score sortieren will?

 

ASC

Time

 

DESC Score

 

hmm muss mir das genauer ansehen ... ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kein Ding!

Na das ist ja keine "DB" in dem Sinne, nur ne sortierte Liste... und die braucht schon irgendwie sinnvolle Daten. Wenn ich mich recht erinnere gibt das Tutorial schon die 10 besten Spieler zurück. Ich hab einfach nochmal eine Sortierung hinzugefügt... wer weiß... vlt kann es hilfreich sein. Würde sich auch gut für nen lokalen Multiplayer eigenen... wo man schon bei der Wiederverwendbarkeit wäre.

 

Ich hoffe der Code erklärt sich von allein. Unschön finde ich die Schleife bei der Sortierung... vlt gibt es da noch was Eleganteres ....aber wie ich sehe schleicht Marrrk durch den Thread^^ mal sehen was er auspackt ;)

 

desc

ScoreboardList = ScoreboardList.OrderByDescending(x => x.Score).ToList();

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...