Jump to content
Unity Insider Forum

Inspector OnValidate aktuelles Element


Kurumi-chan

Recommended Posts

Hey Leute,

gibt es eine Möglichkeit genau herauszufinden, in welchem Array-Element die aktuelle Änderung stattfindet, sodass man nicht jedes mal jedes Element aktualisieren muss, sondern nur das indem auch die Änderung stattfindet? 

Ich habe hier ein Verschachteltes Array mit mehreren Elementen, wenn ich jetzt den Basiswert ändere, dann sollen sich halt im Unterarray die Werte entsprechend aktualisieren.

LG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin!

Ne, in OnValidate weißt du gar nichts. Du kannst ja trotzdem schauen, ob die Werte in allen Unterarrays dem Basiswert entsprechen und sie andernfalls abändern.

OnValidate ist nicht für komplexe Anwendungsfälle gedacht. Wenn dein Kontext aber komplexe Dinge erfordert, musst du mit Editor-Code ran. Also einen eigenen Inpector oder PropertyDrawer. Wenn es hier allerdings nur um Performance geht, mach dir darum keine Sorgen. Solange du nicht große Datenmengen hast, ist Performance nicht so kritisch im Editor.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin Sascha, 

ja es ging mir in erster Linie um Performance. Ich habe ein Array in dem alle Attribute des Charakters enthalten sind und darin dann ein Array in dem die Werte für jedes einzelne Level sind. Das sind in meinem Fall 100. Können also je nach Anzahl der Attribute einige Werte zusammen kommen. 

Aber wenn du sagst, dass das nicht ganz so tragisch ist, dann bin ich ja beruhigt.

Danke dir ☺️

Ach und gibt es auch eine Methode bei den Scriptable Objects, die nur einmalig aufgerufen wird, z.B beim erstmaligem initialisieren. OnEnable wird leider jedes mal aufgerufen, sobald ich meine Datenbank öffne.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Awake wird bei SOs auch aufgerufen, aber halt jedes Mal beim Initialisieren. ScriptableObjects werden garbage collected, sodass das irgendwann nochmal passieren kann. Aber halt in einer neuen Instanz, was ja richtig ist. Du kannst das Löschen mit HideFlags.DontUnloadUnusedAsset verhindern. Wenn es um deserialisierte Werte des SOs geht, kannst du deine SO-Klasse ISerializationCallbackReceiver implementieren lassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, das ist auch interessant. Damit kann ich sicherlich noch was anfangen 😁 Danke dir für diesen Hinweis. 

Habe es jetzt so gelöst, dass ich die Scriptable Objects gar nicht mehr selbst erstelle, sondern durch einen neuen Button im Editor. Der ist dann auch nur da, wenn es noch keine DB gibt. Der erstellt diese dann und zudem kann ich alles, was ich einmalig machen will, über diesen Button machen. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Etwas besseres ist mir halt auch nicht eingefallen 😅

Und mit den Flags, bzw. dem Interface habe ich es nicht geschafft. Vor allem, da ich ja trotzdem irgendwann die Objekte wieder zerstören muss und ich dann ja doch wieder die Awake Methode aufrufe.

Aber es hat natürlich jetzt auch den weiteren Vorteil, dass ich nicht jede Unterdatenbank von Hand erstellen muss. Also wieder ein wenig weniger Arbeit 😂 Lösche ja immer mal wieder die Dbs, um zu testen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...