Tom12 Geschrieben 10. September 2017 Melden Share Geschrieben 10. September 2017 Hallo liebe Community, ich programmiere gerade ein Clicker Idle Spiel. Nun möchte ich die Coinanzahl speichern. meine Coins sind als float "geschrieben". was ich bis jetzt habe public float Points; private void Start() { Points = PlayerPrefs.Getfloat("Point"); } public void Save() { PlayerPrefs.SetFloat("Point", Points); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 10. September 2017 Melden Share Geschrieben 10. September 2017 Soweit ist alles ok. Was fehlt dir oder was verstehst du nicht? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tom12 Geschrieben 10. September 2017 Autor Melden Share Geschrieben 10. September 2017 vor 2 Minuten schrieb malzbie: Soweit ist alles ok. Was fehlt dir oder was verstehst du nicht? Das es nicht funktioniert ich starte das spiel in unity klicke paar mal gehe wieder raus und das nächste mal wieder mit 0 points. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mr 3d Geschrieben 10. September 2017 Melden Share Geschrieben 10. September 2017 Rufst du deine 'Save()' Methode auch irgendwo auf? ^^ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tom12 Geschrieben 10. September 2017 Autor Melden Share Geschrieben 10. September 2017 vor 8 Minuten schrieb Mr 3d: Rufst du deine 'Save()' Methode auch irgendwo auf? ^^ Nein wo soll ich die einbauen ? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mr 3d Geschrieben 10. September 2017 Melden Share Geschrieben 10. September 2017 Rein logisch würde ich es in die 'OnApplicationQuit()' methode schreiben. void OnApplicationQuit(){ Debug.Log("saving.."); Save(); } ( https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnApplicationQuit.html ) Aber ich bin mir nicht 100% sicher, ob man sich darauf verlassen kann, dass Unity die immer aufruft.. Ich würde sagen 'SetFloat' ist von der performance her gesehen keine sehr 'teure' methode, deshalb könntest du sie einfach immer aufrufen, wenn sich der Wert von 'Points' ändert. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 10. September 2017 Melden Share Geschrieben 10. September 2017 Mr 3d war schneller, OnApplicationQuit() sollte auch gehen... Der Unterschied ist eigentlich nur, daß OnDestroy() vorher aufgerufen wird. Wenn du nicht viel programmieren möchtest, dann sollte das hier funktionieren, es speichert die Punkte, wenn du das Spiel beendest. Die "prints" kannst du entfernen, sie helfen nur damit du siehst was passiert. Die Punkte müssen natürlich irgendwann geändert werden zwischen Start() und OnDestroy(). Daher habe ich mal die Methode SetPoints() ergänzt. Diese kannst du von "außen" aufrufen: // In einer anderen Klasse, die Verwendung von "GameScore" // Das Skript GameScore muss an einem Gameobject hängen! using UnityEngine; using System.Collections; public class MyGame : MonoBehaviour { private GameScore gameScoreSaver; void Start() { gameScoreSaver = (GameScore)FindObjectOfType(typeof(GameScore)); } void CalculateScore() { // Highscore ? float highscore = gameScoreSaver.GetPoints(); // Der Spieler hat 50 Punkte erreicht, nur ein Beispiel... float points = 50; if (points>highscore) gameScoreSaver.SetPoints(points); } } using UnityEngine; using System.Collections; public class GameScore : MonoBehaviour { private float Points; void Start() { Points = PlayerPrefs.GetFloat("Point"); print("Loaded Points: " + Points); } // Punkte setzen public void SetPoints(float points) { Points = points; } // Punkte abfragen public float GetPoints() { return Points; } void OnDestroy() { PlayerPrefs.SetFloat("Point", Points); print("Saved Points: " + Points); } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tom12 Geschrieben 10. September 2017 Autor Melden Share Geschrieben 10. September 2017 vor 2 Stunden schrieb Zer0Cool: void OnDestroy() { PlayerPrefs.SetFloat("Point", Points); print("Saved Points: " + Points); } Diese Methode funktioniert bei mir nicht. die Konsole gibt mir aus das 0 Punkte gespeichert werden. An was könnte es liegen ? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 10. September 2017 Melden Share Geschrieben 10. September 2017 Das liegt daran, daß 0 Punkte geladen werden und du dann auch 0 Punkte speicherst. Wie bereits gesagt, du musst irgendwann Punkte setzen. Daher hatte ich dir ja oben ein Beispiel geschrieben. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tom12 Geschrieben 10. September 2017 Autor Melden Share Geschrieben 10. September 2017 vor 19 Minuten schrieb Zer0Cool: Das liegt daran, daß 0 Punkte geladen werden und du dann auch 0 Punkte speicherst. Wie bereits gesagt, du musst irgendwann Punkte setzen. Daher hatte ich dir ja oben ein Beispiel geschrieben. und wie soll ich dann die den Inhalt der Float "Points" speichern also statt 0 dann Points ? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 10. September 2017 Melden Share Geschrieben 10. September 2017 Ich glaube du verstehst mich nicht... Schau dir oben mal die beiden Klassen genauer an ... Beim Start läd Unity die Punkte, die sind 0, weil keine Punkte gespeichert wurden oder weil die letzten gespeicherten Punkte eben 0 waren. Wenn du dein Spiel verlässt werden wieder 0 Punkte gespeichert, weil sie haben sich nicht verändert! Du musst die Punkte die du speichern willst auch irgendwann setzen, ansonsten speichert Unity immer 0. Daher hatte ich dir oben ein Beispiel gegeben, mit der "GameScore"-Klasse. Diese Klasse hat eine Methode SetPoints() und diese Methode muss dein Spiel aufrufen und diese Punkte werden dann auch gespeichert. Schau dir einfach mal die MyGame-Klasse an, sie enthält alles was du brauchst. Und deine Punkte oben als public-Variable an dein Skript zu übergeben macht keinen Sinn, weil du dort immer dieselbe Punktzahl speicherst. Daher werden Methoden verwendet um die aktuelle Punktzahl zu setzen (siehe wiederum Klasse "MyGame"). Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.