Schlumpf Geschrieben 20. Februar 2013 Melden Share Geschrieben 20. Februar 2013 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 More sharing options...
AgentCodeMonk Geschrieben 20. Februar 2013 Melden Share Geschrieben 20. Februar 2013 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 More sharing options...
Sascha Geschrieben 20. Februar 2013 Melden Share Geschrieben 20. Februar 2013 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 More sharing options...
Schlumpf Geschrieben 20. Februar 2013 Autor Melden Share Geschrieben 20. Februar 2013 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 More sharing options...
Tiles Geschrieben 20. Februar 2013 Melden Share Geschrieben 20. Februar 2013 Das musst du dann im Inspector ändern, nicht im Code. Das was an Zustand im Inspector steht ist für das Game relevant, nicht das was im Code steht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AgentCodeMonk Geschrieben 20. Februar 2013 Melden Share Geschrieben 20. Februar 2013 Wie bereits schon gesagt: ist der Wert ersteinmal im Inspector gesetzt, ist es egal ob du das im Code änderst. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Schlumpf Geschrieben 20. Februar 2013 Autor Melden Share Geschrieben 20. Februar 2013 und genau das is doch wie z.b. in diesem fall total bescheuert d.h. ich müsste im "awake" erst mal alles auf true/false setzen und dann auf den korrekten wert Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiles Geschrieben 20. Februar 2013 Melden Share Geschrieben 20. Februar 2013 Tja, hat niemand gesagt dass das mit dem Inspektor nur Vorteile hat. Ein paar Pferdefüsse gibts halt auch Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 20. Februar 2013 Melden Share Geschrieben 20. Februar 2013 Imo ist's die einzig vernünftige Variante. Ansonsten dürfte man für zwei sich unterschiedlich schnell drehende Objekte erst einmal zwei Scripts schreiben Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Schlumpf Geschrieben 20. Februar 2013 Autor Melden Share Geschrieben 20. Februar 2013 ok danke euch dann weis ich woran ich hier dauernd scheiter btw wenn es einen interesiert Overview: Script compilation (Advanced) http://docs.unity3d....Advanced29.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 20. Februar 2013 Melden Share Geschrieben 20. Februar 2013 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 More sharing options...
Schlumpf Geschrieben 20. Februar 2013 Autor Melden Share Geschrieben 20. Februar 2013 danke dir nur das der inspector ohne auch nur 1x play zu drücken den ersten wert einer variable als wert nimmt is bisl ... naja aber nun weis ich wie ich damit umgehen muss is mir bisher nur nie so extrem aufgefallen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 20. Februar 2013 Melden Share Geschrieben 20. Februar 2013 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 More sharing options...
Schlumpf Geschrieben 20. Februar 2013 Autor Melden Share Geschrieben 20. Februar 2013 ok Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
FluchtNachVorn Geschrieben 22. Februar 2013 Melden Share Geschrieben 22. Februar 2013 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 More sharing options...
Sascha Geschrieben 22. Februar 2013 Melden Share Geschrieben 22. Februar 2013 Ja. Indem man gar nicht erst versucht, einzelne Variablen auf Code-Standard zurück zu setzen. Prefabs benutzen! 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.