Jump to content
Unity Insider Forum

Beste Umsetzung mit Scriptable Objects


F1R3ON

Recommended Posts

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

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

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

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:

  1. Anzeige-GO wird initialisiert (setzt Text und Beschreibung usw.) und trägt eine Reaktion (Methode "OnChangeUnlockStatus") beim Event ein.
  2. Achievement wird freigeschaltet
  3. Alle im Event eingetragenen Reaktionen werden ausgelöst
  4. Anzeige-GO verändert sich
Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...