Jump to content
Unity Insider Forum

nordseekrabe

Members
  • Content count

    59
  • Joined

  • Last visited

Community Reputation

0 Neutral

About nordseekrabe

  • Rank
    Advanced Member

Recent Profile Visitors

601 profile views
  1. nordseekrabe

    SceneManager.SetActiveScene(scene)

    Moin, liebe Unity-Freunde, wieder einmal auf der Suche nach Anregungen und Tipps. Habe mich sehr ausführlich mit dem Thema beschäftigt: wie kann man in Unity von der Szene B aus die Eigenschaften eines Objekts der Szene A ändern ? Grundsätzlich scheint das wohl nicht möglich ? Ich habe für mich einen Umweg gefunden : Wenn ich die Szene (A), in der sich mein Objekt, von dem ich eine Eigenschaft ändern möchte, befindet, "additiv" zur Szene B, von der aus die Eigenschaft geändert werden soll, aufrufe, kann ich tatsächlich die Eigenschaft verändern. Jetzt das Problem: nun lösche ich die Ausgangsszene (Szene B, SceneManager.UnloadSceneAsync(Buildindex)) und aktiviere die Szene A, die ja in der Hierarchy vorhanden ist, mit SceneManager.SetActiveScene(scene) (Scene scene = SceneManager.GetSceneByName("Hobbyraum");), scheint alles zu klappen. Leider fehlt das Hintergrundbild der Szene (das ist ein GameObject mit SpriteRenderer und damit dem Bild der Szene). Wie kann ich das lösen ? Klingt ziemlich kompliziert und mancher mag fragen, was soll der Blödsinn: man stelle sich aber nur eine einfache Szene vor. Der Spieler muss in einem Kellerraum einen Hauptschalter umlegen, damit in einem anderen Raum Strom vorhanden ist, also die Eigenschaft z.B. einer Steckerleiste von Strom weg zu Strom da wechselt. Und dann haben wir genau obige Konstellation. Ich frage jetzt einfach so pauschal, ohne Code beizufügen. Falls erforderlich, sende ich selbstverständlich umgehend nach. Gruß von der Ostseeküste Nordseekrabbe
  2. nordseekrabe

    Save/ Open Scene

    Moin, eine kleine Ergänzung meinerseits.....mit dem Hinweis von Sascha wurde mir heute Abend klar, dass ich wohl eine "static" Variable mit einer "const" Variablen gleichgesetzt habe. Also habe ich irrtümlich geglaubt, eine static Variable könne nicht verändert werden. Damit ergeben sich wahrscheinlich einige neue Optionen. Danke, Sascha und viel Spaß beim Fußball Gruß Nordseekrabbe
  3. nordseekrabe

    Save/ Open Scene

    Moin, wie kann ich diese Prämisse erfüllen : eine Variable "interaktivitaet.begehbar = false" wird durch das richtige Vorgehen durch den Player zur Variablen "interaktivitaet.begehbar = true" und soll genau so für den Rest des Spieles bleiben ??? Geht das nicht nur über die Speicherung der neuen Variablen ? Gruß Nordseekrabbe
  4. nordseekrabe

    Save/ Open Scene

    Moin, vielleicht ein richtiger Ansatz, Tarantel. Du meinst, wenn ich vor dem Szenenwechsel mit PlayerPrefs Dooropen == true speichere und bei erneutem Loadscene() dieser Szene ein Load(PlayerPrefs) mitstarten lasse, sollte es eigentlich funktionieren !? Muss ich heute testen !! Erstmal danke schön und allen einen zufriedenstellenden Tag wünscht Nordseekrabbe
  5. nordseekrabe

    Save/ Open Scene

    Moin, schon mal einen großen Dank an Poldi007. Werde mich morgen eingehend mit den Scripts beschäftigen. Auf den ersten, schnellen Blick hin fürchte ich, dass hierbei auch "nur" Objekte gespeichert werden können. Für mich wäre aber wichtig, abgelaufene Aktionen, gelöste Rätsel zu speichern. Vielleicht noch einmal ein Beispiel: Der Spieler sammelt verschiedene Objekte in verschiedenen Szenen und sammelt sie im Inventar. Wenn er diese Objekte (z.B. Teilcode) beisammen hat, kann er mit dem nun kompletten Code ein Zahlenschloss öffnen und eine neue Szene damit erreichen. Diesen Ablauf muss man nun speichern, damit nicht bei einem weiteren Besuch der Zahlenschlosstür das gleiche Procedere erforderlich ist, um in die Szene zu gelangen, denn diese wird ja als von Anfang an gespeicherte Szene beim Neustart wieder ausgewählt. Vielleicht gibt es ja eine Chance mit der Methode "IsDirty()", da muss ich aber noch einiges dazu in Erfahrung bringen. Eine gute Nacht wünscht Nordseekrabbe
  6. nordseekrabe

    Save/ Open Scene

    oh, besten Dank, Tarantel. Bin sehr gespannt. Aber ist schon klar, dass "F5" auch von jemandem mit Code (vermutlich C oder C++) ins Spiel gebracht wurde !! Gruß Nordseekrabbe
  7. nordseekrabe

    Save/ Open Scene

    Moin, und danke für die beiden Antworten. Ich glaube, dass ich da einen Gedankenfehler hatte, da die beiden Methoden (Save As und Open Scene) nicht "in game" funktionieren. Aber genau das benötige ich wohl. Bislang fehlt mir noch eine Idee, wie man Aktivitäten des Players, abgearbeitete Rätsel in einer Szene speichern könnte. Wen aus Game in Scene wechsele, sind ja alle Veränderungen weg. Inventar, Scores und Punktergebnisse oder ähnliches kann ich mir zur Speicherung mit PlayerPrefs oder Scriptableobjects einigermaßen vorstellen. Aber, z. B. in einer Szene hat der Player ein Rätsel gelöst und erhält dafür ein Objekt ins Inventar. Dieses Objekt zu speichern sollte mir noch gelingen. Aber wie sage ich dem Spiel, bzw. der Szene, das Rätsel ist jetzt gelöst, du musst nicht bei jedem neuen Besuch in dieser Szene dieses Problem nochmals lösen. z.B. im Kühlschrank ist ein Stück Torte, das der Player sich nimmt, jetzt sollte der Kühlschrank für das gesamte Spiel leer bleiben. z.B. der Player hat verschiedene Objekte gesammelt, mit deren Hilfe gelingt es ihm, eine abgesperrte Tür zu öffnen. Ist das einmal erledigt, darf er diese Aktion nicht bei jedem neuen Besuch in der Szene nochmals ausführen müssen. Speicherung von ausgeführten Aktionen, das ist , glaube ich, mein Problem. Es war doch immer so einfach, bei Indy oder Monkey Island oder all' den anderen Spielen, F5 gedrückt und das Spiel war gesichert, falls man beim nächsten Problem "in den Brunnen" fällt. Gruß Nordseekrabbe
  8. nordseekrabe

    Save/ Open Scene

    Moin, konnte bislang bei meiner Suche zum o.g. Thema nicht fündig werden. Meine Frage ist: wie kann ich per Script die Methoden Save Scene As und Open Scene aus dem Unity-Menue "File" einsetzen ? Dabei ist mein Gedanke, vor einem Szenenwechsel den aktuellen Stand der laufenden Szene per Scripting zu speichern, die dann unter neuem Namen auch jederzeit in diesem Stadium wieder geladen werden könnte (open scene). Geht das überhaupt ? Wie immer besten Dank für Eure Anregungen ! Gruß Nordseekrabbe
  9. nordseekrabe

    Gameobject im Szenenwechsel

    Moin, inzwischen bin ich mit der Entwicklung meines Projektes ein ganzes Stück weiter gekommen und habe nun auch das Inventar mit dem neuen UI-Design umgesetzt. Soweit klappt auch die Aufnahme eines Objektes in das Inventar, wird in die neuen Szenen mitgenommen, nur beim Zurückgehen in seine Ursprungs-Szene verschwindet das Objekt leider nicht nur aus der Szene (in der es ursprünglich war und wie gewünscht), sondern auch aus dem Inventar. Den Code von oben habe ich übernommen; es scheint also, dass if (itemScene.itemID == itemInventory.itemID) { print("Doppeltes Item '" + itemScene.gameObject + "' zerstört"); Destroy(itemScene.gameObject); } das Objekt komplett "zerstört". Das konnte ich bislang nicht unterbinden. Wo klemmt es, was mache ich falsch ? Für jede Anregung bin ich sehr dankbar. Gruß von der Ostseeküste Nordseekrabbe
  10. nordseekrabe

    Inventar und Objekte

    Guten Abend, Jolinah, besten Dank für Deine Antwort. Ich hatte es schon befürchtet, dass das mit dem "alten" OnGUI() zusammenhängen könnte. Das Auskommentieren von RemoveDublicats() hat leider keinen Erfolg gebracht. Mit dem neuen GUI habe ich schon heftige Kämpfe ausgefochten, es gibt ja eine Vielzahl von (vermeintlichen) Tutorials hierzu. Meine Unwissenheit und häufig die Kompliziertheit der Beispiele (eigentlich möchte ich doch nur einige Objekte in den Szenen sammeln und dann für irgendwelche Tasks einsetzen und nicht 'Stacken' und 'Typisieren' und und..) haben mich bisher (wieder einmal) scheitern lassen. Ein guter Tipp zu einem einfachen(!!!) Inventory wäre also eine sehr große Hilfe ! Euch allen wünsche ich eine gute neue Woche und grüße wie immer von der Ostseeküste Nordseekrabbe
  11. nordseekrabe

    Inventar und Objekte

    Da ich immer noch beim Inventory und den Objekten bin, bleibe ich mal in diesem Thread...ich hoffe, das ist okay ? Wenn ich die Szene mit 2 oder mehreren Objekten im Inventar verlasse, bleiben sie lediglich für einen Szenenwechsel vorhanden, beim nächsten Wechsel sind sie gelöscht, mit der Fehlermeldung: GUI Error: You are pushing more GUIClips than you are popping Was ist das denn ? Das Inventory-Script ist oben noch vorhanden, habe allerdings die if-Bedingung(nur!! das if) mit GUI.Button und die folgenden Befehle gelöscht (print und RestoreFrom....); hinzugefügt ist das Szenenwechsel-Script, was jedem Objekt, das mit aus der Szene mitgenommen werden soll, zugewiesen bekommt. using UnityEngine; using UnityEngine.SceneManagement; public class Szenenwechsel : MonoBehaviour { [HideInInspector] public Aktionsmanager aktionsManager; InteraktivesElement interaktivitaet; public Room zimmer; public enum Room { Arbeitszimmer, Badezimmer, Bibliothek, Diele, Kueche, Wohnzimmer } void Start() { aktionsManager = GameObject.Find("Aktionsmanager").GetComponent<Aktionsmanager>(); interaktivitaet = GetComponent<InteraktivesElement>(); } void OnMouseDown() { if (aktionsManager.aktuelleAktion == "Gehe zu" && interaktivitaet.begehbar) { // die Diele ist der Startraum if (zimmer == Room.Arbeitszimmer) SceneManager.LoadScene(7); if (zimmer == Room.Badezimmer) SceneManager.LoadScene(8); if (zimmer == Room.Bibliothek) SceneManager.LoadScene(9); if (zimmer == Room.Kueche) SceneManager.LoadScene(29); if (zimmer == Room.Wohnzimmer) SceneManager.LoadScene(38); } } } Inventar als empty GO mit zugewiesenem Inventory-Script und DontDestroyOnLoad(gameObject)-Script ist als Prefab in jeder Szene. Wie komme ich aus diesem Dilemma. Wie immer, jeder Tipp hilft lernen und weiterkommen; besten Dank und schönes Wochenende Gruß Nordseekrabbe
  12. nordseekrabe

    Objekt im Objekt finden

    eine prima verständliche Erläuterung zu meinem Problem mit den "Public Objekten, danke. Was mir besonders missfällt ist folgendes: z.B. im Script ObjektOeffnen werden 3 Objekte public deklariert und müssen dann in der Szene im Inspektor zugewiesen werden. Wenn ich nun aber die Szene wechsele und dort einem ganz anderen Objekt das ObjektOeffnen-Script zuweise, muss ich auch hier im Inspektor nicht nur das neue Objekt zuweisen , sondern auch die 3 anderen Objekte aus der vorherigen Szene, oder etwa nicht ? Zumindest erscheinen die 3 Slots auch im Inspektor in der neuen Szene. Oder können die dann einfach leer bleiben, wenn diese Objekte in der neuen Szene nicht benötigt werden ? Sonst wird das doch ein riesiger "Schwanz", wenn in meinetwegen 30 Szenen irgendwelche Objekte mit dem ObjektOeffnen-Script arbeiten. Ich hoffe, das mein Unbehagen ein Stück weit nachvollziehbar ist.
  13. nordseekrabe

    Inventar und Objekte

    Es war tatsächlich, wie Du vermutest hattest, ein Buchstabenverdreher im ItemScript-Slot. Nachdem behoben, hat alles, wie gewünscht, geklappt. Der Hinweis mit dem "neuen" Inventory war Gold wert; besten Dank dafür. Mit der Aktivierung der Components (enabled = true) oder des gesamten Objektes (SetActive(true)) über eine public Deklaration und dann einer (erzwungenermaßen) Zuweisung im Inspektor bin ich noch nicht glücklich. Versuche einmal, andere Lösungen in den zahlreichen Unity-Tuts zu finden. Aber jetzt bin ich erst einmal wieder einen kleinen Schritt weiter. Jetzt hat uns wohl der Herbst gefunden, heute regnet es seit langem wieder einmal in Kiel. Dennoch ein schöner Tag an alle wünscht Nordseekrabbe
  14. nordseekrabe

    Inventar und Objekte

    Ja, stimmt...Im Inspektor erscheint tatsächlich im Slot des Inventory-Scripts als Element 0 der Schraubenzieher im Moment des "Nimm" -Befehls. Jetzt heißt es herausfinden, woran die Methode FindItemByName("Schraubenzieher") scheitert. Morgen ist aber auch noch ein Tag, erst einmal vielen Dank! Nordseekrabbe
  15. nordseekrabe

    Inventar und Objekte

    Moin, Jolinah, danke für die rasche Antwort. Habe die Anregungen übernommen. DerEinsatz von "Inventory.Instance" hat zumindest keine Fehlermeldung gebracht, die Objekte sind im Inventar-Display wie gehabt mit Image und Name vorhanden. Eine Kontrolle im Inspektor habe ich derzeit nicht. Bei der Bedingungskonstellation wird die neue Syntax( Inventory.Instance.FindItemByName("Schraubenzieher") != null) zwar angenommen, aber das Programm springt weiterhin in den Else-Befehl. D.h. dann wohl, dass das Programm das Objekt nicht im Inventar findet. Könnte das daran liegen, dass die Methode nach einem Item(Itemname) sucht, der Schraubenzieher aber als GameObject deklariert ist ? Die Veränderung, wie von Dir empfohlen, von PlaceItemToInventar(Item myItem) klingt gut, aber wie kann Raycast ein Item finden ? einen schönen Abend wünscht Nordseekrabbe
×