Jump to content
Unity Insider Forum

aktualisieren der scriptinhalte ohne reset im inspector möglich ?


Recommended Posts

hi,

 

wenn ich ein c# script an dem ich gerade schreibe aktualisiere und z.b. ein bool auf true speicher

wird das im inspector wenn ich das script auf ein objekt ziehe als true angezeigt.

 

wenn ich nun das projekt schließe ( ich weis nicht notwendig ) und wieder öffne ist es ja immernoch true.

 

wenn ich nun per editor ( monodev also dem standard ) im script von true auf false bei der deklarierung des boolean stelle ( IM STOP MODE !!! ) bleibt es im inspector auf true

 

wie kann ich das ändern

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meines Wissens nach nicht, denn dafür gibt es ja den Inspector. Bin mir gerade nicht ganz sicher, aber du könntest ja mal testen was passiert, wenn du ein [HideInInspector] davor hängst. Dann sollte das was du im Inspector gesetzt hast nicht mehr gültig sein... Nun bleit noch die Frage ob das ein bool ist, das du im Inspector verändern möchtest.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Indem du die Variable ein Mal nicht mitkompilierst. Aber das ist nicht das, was du tun willst: Der Wert, der im Code angegeben wird, ist für Unity der Standardwert. Ist er im Editor erst einmal gesetzt, gehört das zum Zustand des Objekts.

Du willst ja auch nicht, dass der Saldo deines Konto bei der Bank auf zehn Euro gesetzt wird, nur weil die Bank entscheidet, dass von nun an alle neuen Konten zehn Euro Startguthaben haben ;)

 

Wenn du das Grundlegend hast, dass du deine Standardwerte geändert haben willst, willst du das eher nicht im Code, sondern über Prefabs lösen. Alle Instanzen deines Prefabs, die einen Wert des Prefabs nicht überschreiben, übernehmen änderungen am Prefab.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich habe prefabs für jede komponente nur kann ich das so nicht machen :(

 

aktuelles bsp live und in farbe

 

public GameObject[] character;
public int player_aktive_number=0;
public int player_count=0;
void Start () {
player_count=character.Length;
}

 

wenn ich character mit 2 objekten fülle steht in player_count eine 2 beim starten soweit ja korrekt

 

wenn ich nun eine boolean hinzufüge like

public bool test=false;

 

ist der im inspector auf false

wenn ich nun das spiel starte bleibt er false

wenn ich nun beende und ihn im code auf true setze rotiert doch unten rechts das "aktualisieren"

wenn ich nun im inspector schaue steht da : false

da muss doch true rein

 

kann ich aber nicht per reset machen weil ich dann mein array character kicke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Sache ist doch die:

Soll eine Variable von außen geändert werden, stell ich die auf public. Dann ist sie im Inspector sichtbar.

Das Script mit dieser Variable kann ich für viele unterschiedliche Objekte nutzen und kann jetzt für jedes einzelne Objekt im Inspector einen eigenen Zustand setzen.

Zum Beispiel ein Prefab einer Tür, die in der Szene mehrfach vor kommt. Wenn du beim Szenenbauen willst, dass die Tür a offen sein soll und die Tür b zu, dann änderst du einfach die Variable des Scripts der zugehörigen Tür ab.

Klar hatte das Script einen Wert vorgegeben, sozusagen einen Defaultwert. Dieser wird dann beim ersten Start dem Inspectort übergeben und ist jetzt hinfällig.

Jetzt kannste am Code ändern was du willst, der Wert der Variable im Inspector bleibt.

Jedoch kannst du ja dieses veränderte Script einem anderen, neuen Objekt geben. Da wäre dann der neue Wert der Defaultwert!

 

Willst du das im Code ändern können, muss die Variable private sein. Dann geht das, denn dann ist von außen kein Zugriff und keine änderung möglich.

Jetzt kannst du leider diese Variable nicht direkt aus einem anderen Script ändern, was du vielleicht willst. Somit müsstest du ein public void erzeugen wo du aus dem anderen Script rein springst. In dem Void würde dann das Script selbst seine Variable ändern.

 

Deswegen immer vorher überlegen, ob eine Variable von außen gesteuert werden soll und wenn ja, was ist dann der Defaultwert dieser Variable.

Bei mir sind grundsätzlich erstmal alle Variablen private und sie bekommen ihren Wert auch erst in der Awake oder Start.

Ist sowieso meist nötig, wenn man einen Spielstand einlädt und somit an jedes Objekt seine abgespeicherte Eigenschaft übergibt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sobald dein Objekt in der Szene ist, ist es eigentlich schon im Betrieb. Unity arbeitet auch schon im Editor.

Ja, und wenn du jetzt den Wert einstellst wird dieser sofort als neuer Wert übernommen und der Defaultwert ist hinfällig.

Das ist ja auch bei der Ausrichtung oder der Position deines Objektes so.

Wenn du ein Prefab in die Szene legst, wird es mit abgespeicherter Ausrichtung hinzu gefügt.

Drehst du jetzt das Objekt etwas, wird es beim Play mit der neuen Drehung starten und nicht mit der, die das Prefab ursprüngich hatte. Gut, das ist jetzt kein Script, was einen Wert verändert bekommen hat, aber es ist eigentlich das Gleiche. änderungen im Inspector werden dem Objekt eingemeißelt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Den Thread könnte man fast oben anpinnen. Ich wette, jeder Anfänger hatte schon mindestens einmal eben dieses Problem :)

 

Mein bisheriger Lösungsansatz: Variable im Code auf private ändern und den Wert wie gewünscht einstellen. Spiel einmal starten (wichtig!). Dann Variable zurück auf public (wenn's denn überhaupt sein muss).

 

Lässt sich das evtl. besser lösen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...