F1R3ON Geschrieben 21. Mai 2020 Melden Share Geschrieben 21. Mai 2020 Liebe Community meine Fragen beziehen sich auf Scriptable Objects und ich hoffe Ihr könnt Sie mir beantworten. Ist es sinnvoll Scriptable Objects für Achievements / Items / Rassen von Charakteren zu verwenden? Meine Idee ist: Achievements per Scriptable Objects anzulegen mit Werten wie: Icon/Titel/Beschreibung/Prefab Das Prefab nenn ich Achievement und setze ein Skript welches Icon/Titel/Beschreibung vom Scriptable Object ladet. Danach erstell ich ein leeres Gameobject mit einem Skript, welches ein Parent Gameobject nimmt und in diesen per Schleife die Scriptable Objects als Gameobject während des Spiels anzeigt. Mein jetztiges Problem ist nur ich bekomm die Inhalte von Titel/Beschreibung nicht in das Prefab. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 21. Mai 2020 Melden Share Geschrieben 21. Mai 2020 vor 4 Stunden schrieb F1R3ON: Ist es sinnvoll Scriptable Objects für Achievements / Items / Rassen von Charakteren zu verwenden? Die sind generell überall da eine Überlegung wert, wo du Daten hast, die nicht speziell an bestimmte Objekte gebunden sind. Damit sind Items, Achievements und Charaktereigenschaften sehr gute Beispiele für Dinge, bei denen man gut ScriptableObjects benutzen kann. vor 4 Stunden schrieb F1R3ON: Mein jetztiges Problem ist nur ich bekomm die Inhalte von Titel/Beschreibung nicht in das Prefab. Naja, du ziehst das Achievement-SO aus den Assets in deine Komponente, nachdem du ein Feld dafür gemacht hast: [SerializeField] private Achievement achievement; bzw. [SerializeField] private Achievement[] achievements; für mehrere. Dann greifst du halt drauf zu: someTextComponent.text = achievement.title; Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
F1R3ON Geschrieben 27. Mai 2020 Autor Melden Share Geschrieben 27. Mai 2020 Das versteh ich, dass man eine Referenz benötigt. Nur sagen wir ich hab 3 Scriptable Objects und 1 Prefab, das Prefab wird in einer Schleife 3x wiederholt und in einem Scrollview angezeigt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 28. Mai 2020 Melden Share Geschrieben 28. Mai 2020 Ah ja, genau so macht man das. Nach dem Instantiate die Instanz initialisieren. Siehe auch hier. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
F1R3ON Geschrieben 29. Mai 2020 Autor Melden Share Geschrieben 29. Mai 2020 Hab leider dennoch ein Problem mit Scriptable Objects ^^" "Ich bekomm es nicht hin während der Laufzeit den Bool zu ändern und das in der Liste von LoadAchievement nur das jeweilige Freigeschalten wird." Bzw. wenn man ein Achievement freischaltet soll das jeweilige Gameobject seine Color ändern das klappt aber nicht während der Laufzeit nur wenn man die Szene neustartet. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 29. Mai 2020 Melden Share Geschrieben 29. Mai 2020 Für solche Sachen sind Events ganz gut. Du kannst z.B. in dein Achievement-SO ein Event einbauen: public event Action onChangeUnlockStatus; Und dann dieses Event im richtigen Moment auslösen: public void Unlock() { unlocked = true; onChangeUnlockStatus?.Invoke(); } Objekte, die auf das Event reagieren sollen, tragen sich dort ein, sobald sie zum reagieren bereit sind: public void Initialize(Achievement achievement) { titleText.text = achievement.title; descriptionText.text = achievement.description; achievement.onChangeUnlockStatus += OnChangeUnlockStatus; } private void OnChangeUnlockStatus() { if (achievement.unlocked) { // change image or background color } } Und sie tragen sich wieder aus, wenn sie zerstört werden: achievement.onChangeUnlockStatus -= OnChangeUnlockStatus; Der Ablauf ist also: Anzeige-GO wird initialisiert (setzt Text und Beschreibung usw.) und trägt eine Reaktion (Methode "OnChangeUnlockStatus") beim Event ein. Achievement wird freigeschaltet Alle im Event eingetragenen Reaktionen werden ausgelöst Anzeige-GO verändert sich 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.