Ankündigung

Einklappen
Keine Ankündigung bisher.

Rigid Body-Child von Rigid Body-Parent per Tastendruck aus- und einschalten?

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • jugglerjuggler
    Empty
    • 22.02.2018
    • 9

    Rigid Body-Child von Rigid Body-Parent per Tastendruck aus- und einschalten?

    Hallo alle,

    mir folgender Konstellation habe ich Schwierigkeiten, und ich möchte euch um Rat bitten:
    Ich habe ein Rigid Body Object (Würfel), welches sich per Schwerkraft durch die Gegend bewegt. Dieses hat als Child ein weiteres Rigid Body Object (Zweiter Würfel). Das Child hängt in festem Abstand am Parent. Letzterem möchte ich gerne in der Game Engine per Logic Bricks eine Steuerung zuweisen, die es erlaubt, dieses Objekt per Tastendruck auszuschalten und bei erneutem Tastendruck wieder einzuschalten. Mit "ausschalten" meine ich: Das Objekt soll unsichtbar werden, und es soll nicht mehr auf Kollisionen reagieren bzw. bei Kollision keine Reaktion auslösen. Mit "einschalten" meine ich: Das Objekt soll am selben Ort relativ zum Parent-Object wieder sichtbar werden, an dem es zuvor auch war (fester Abstand in allen Dimensionen), und es soll wieder kollidieren.
    Es gelingt mir, das zweite Objekt wie gewünscht per Tastendruck unsichtbar und wieder sichtbar zu machen, allerdings kollidiert es auch im unsichtbaren Zustand weiter mit anderen Objekten.
    Die Optionen unter "Dynamic Operation" im "Edit Object"-Actuator wie etwa "Disable Rigid Body" und "Suspend Dynamics" haben bislang in keiner Kombination den gewünschten Effekt gebracht. Leider war ich bis jetzt auch mit dem "Edit Object"-Actuator erfolglos ("End Object" bzw. "Add Object").

    Ich freue mich über jeden Hinweis - vielen Dank euch vorab!
    jugglerjuggler
  • HG1
    HG1
    Empty
    • 31.08.2017
    • 108

    #2
    1. Möglichkeit:
    Du musst zwei Objekte anlegen. Eines mit und eines ohne Kollision (Ghost oder No Collision). Dann kannst du mit einem Edit Object -> Replace Mesh Aktuator das eine Mesh und austauschen.
    Du musst Phys aktivieren damit das Physikmesh auch getuscht wird. Wenn du das objekt unsichtbar machen möchtest dann kannst du das zweite Mesh unsichtbar machen oder durch eines mit nur einen Vertex tauchen.

    2. Möglichkeit:
    Zweite Möglichkeit ist eine Empty im richtigen Abstand an den Spieler zu "parenten". Dann per Edit Object -> Add Objekt das Objekt zu adden und per Parent -> Set Parent das Child an das Empty zu "parenten".

    Damit bei beiden Lösungen nicht immer mehr Childs zum Parent hinzufügst, musst du per Property oder Set State verhindern das nur ein Objekt hinzugefügt wird wenn gerade keines vorhanden ist.

    Hier eine Beispiel Datei zur zweiten Möglichkeit.


    Angehängte Dateien

    Kommentar

    • jugglerjuggler
      Empty
      • 22.02.2018
      • 9

      #3
      Vielen herzlichen Dank für die Tipps plus Datei! Damit sollte ich zurechtkommen. ​​​​​​

      Kommentar

      • jugglerjuggler
        Empty
        • 22.02.2018
        • 9

        #4
        Als absoluter Neuling in der Game Engine bin ich nun durch HG1s Tipps ein bisschen weitergekommen. Danke vielmals!

        Als .blend lade ich meinen ersten Versuch der Umsetzung hoch: Ich habe mich an das alte C64-Spiel "Space Taxi" erinnert und als erste Übung versucht, die Spielmechanik nach meiner Erinnerung nachzubilden (jetzt im Nachhinein habe ich mir das Spiel auf Youtube nochmal angeschaut und mich angenehm in alte Zeiten zurückversetzt gefühlt...).

        Die Düsen meines rudimentären Würfelraumschiffs können mit den Pfeiltasten betätigt werden. Ich habe eine leichte Schwerkraft eingestellt, und mit Space kann eine wunderschönes Klotzfahrwerk an- und ausgeschaltet werden. Man kann die Plattformen anfliegen und landen.
        So weit so gut.

        Hier meine Fragen:
        1. Warum verlässt mein Raumschiff nach einer Weile Spiel seine Y-Position? Die habe ich doch eigentlich als unveränderlich eingestellt, dachte ich? Ich möchte die ganze Bewegung (erstmal) zweidimensional halten.
        2. Wie könnte ich erreichen, dass das Raumschiff nur mit ausgefahrenem Fahrwerk landen darf (= dass eine Landung ohne Fahrwerk erkannt wird, was dann zu wilden Explosionen oder was auch immer führen könnte)?
        3. Wie könnte ich erreichen, dass das Raumschiff auch bei ausgefahrenem Fahrwerk nur mit einer bestimmten Höchstgeschwindigkeit in Z-Richtung landen darf (= bei Überschreiten einer bestimmten Z-Geschwindigkeit im Augenblick einer Kollision des Fahrwerks mit einem Plattform-Objekt wiederum die Kaputt-geh-Aktion ausgelöst wird, also wilde Explosionen...)?
        4. Wie kann ich das Zittern im gelandeten Zustand verhindern?

        Danke erneut für alle Tipps vorab!
        jugglerjuggler
        Angehängte Dateien

        Kommentar

        • PeterBluewin
          Empty
          • 24.09.2017
          • 149

          #5
          Zitat von jugglerjuggler Beitrag anzeigen
          1. Warum verlässt mein Raumschiff nach einer Weile Spiel seine Y-Position? Die habe ich doch eigentlich als unveränderlich eingestellt, dachte ich? Ich möchte die ganze Bewegung (erstmal) zweidimensional halten.
          2. Wie könnte ich erreichen, dass das Raumschiff nur mit ausgefahrenem Fahrwerk landen darf (= dass eine Landung ohne Fahrwerk erkannt wird, was dann zu wilden Explosionen oder was auch immer führen könnte)?
          3. Wie könnte ich erreichen, dass das Raumschiff auch bei ausgefahrenem Fahrwerk nur mit einer bestimmten Höchstgeschwindigkeit in Z-Richtung landen darf (= bei Überschreiten einer bestimmten Z-Geschwindigkeit im Augenblick einer Kollision des Fahrwerks mit einem Plattform-Objekt wiederum die Kaputt-geh-Aktion ausgelöst wird, also wilde Explosionen...)?
          4. Wie kann ich das Zittern im gelandeten Zustand verhindern?
          Hallo, ich versuches mal kurz darauf zu antworten:
          zu 1. muss ich mir noch in der Blender-Datei ansehen. Aber setzte mal Constrains für die Begrenzungen auf deinem Spielfeld.
          zu 2. ganz einfach, in dem du prüfst, ob dein Fahrwerk ausgefahren ist oder nicht. Ist es nicht ausgefahren und der Collision-Sensor erkennt eine Kollision mit der Oberfläche, erfolgt die Explosion.
          zu 3. Das kann nur per Python Script programmiert werden. Dabei werden die Logic Bricks durch das Script erweitert (Pyhton Controller). Mit diesem Script wird die komplette Bewegung kontrolliert und auch die Landegeschwindigkeit. Wie so ein Script aufgebaut ist, kann du in zahlreichen Fohren unter dem Stichwort "Mous Control" oder "Mouse Look" finden. Ich habe z.B. ein umfanchreiches Script zur Kontrolle eine Anflugs an einen Planeten geschrieben. Da Planeten eine unterschiedliche Größe haben, ist der Abstand zur Oberfläche immer unterschiedliche. Also muss der Bremsvorgang immer unterschiedliche durchgeführt werden.
          zu 4. Was für ein Zittern? (Du solltest die Collision Bounds mal von Triangle Mesh auf Box setzen)

          Schau dir auch mal mein Projekt "Planetensystem mit der BGE" an
          https://blendpolis.de/forum/technik/...ge-vorstellung

          Hinweis: Habe mir dein kleines Spiel am angesehen.
          Was ich besonders ungünstig empfinde ist, dass die Steuerung genau umgekehrt der Tastenbelegung ist, also Hoch ist runter, Rechts ist Links, usw. Empfehle, diese Grunsätzlichen Fehler zu beseitigen und eine klare Beschriftung in den Logic Bricks zu machen. Also für ein Keyboard-Sensor UP Arrow, kann man den Sensor auch mit KbUp bezeichnen. Für ein Down Arrow, kann man z.B. KbDown eintragen. etc. Dann kann man auch den Code besser lesen und du selbst kannst später dein eigenes Spiel besser verstehen, wenn z.B. ein Fehler zu beseitigen ist. Hättest du das gemacht, wäre dir selbst auch aufgefallen, dass du zwei Keyboard-Sensoren mit den gleichen Tasten belegt hast, nämlich Left Arrow.

          Viele Grüße
          Peter
          Zuletzt geändert von PeterBluewin; 05.04.2018, 19:54.

          Kommentar

          • jugglerjuggler
            Empty
            • 22.02.2018
            • 9

            #6
            Hallo Peter,

            besten Dank für die ausführlichen Tipps!
            Ich muss gestehen, dass ich zwischenzeitlich nicht mehr viel Zeit in mein kleines Projekt investieren konnte - aber ich bin gedanklich weiterhin dabei.

            zu 1.:
            Das konnte ich selbst mit Constraints lösen, danke!
            zu 2.:
            Das muss ich nochmal durchgucken... Ich glaube, dass diese einfache Lösung eben durch das Parenting irgendwie verhindert wird. Im Detail habe ich das leider gerade nicht mehr präsent.
            zu 3.:
            Um Python Scripts komme ich also anscheinend wohl nicht drumrum. Ein weites neues Lernfeld.
            zu 4.:
            Mein gelandetes Raumschiff hoppelt von selbst immer so ein bisschen durch die Gegend. Ich glaube, das Problem liegt an dem Objekt, auf dem es landet... muss ich noch rausfinden.

            Glückwunsch zu Deinem Planetensystem!

            Zu Deinen weiteren Hinweisen:
            Die Steuerung möchte ich absichtlich so lassen. Der Tastendruck aktiviert ja eine Düse, und die manövriert das Raumschiff dann per Rückstoß in die entgegengesetzte Richtung. Passt schon.
            Richtig, ich sollte etwas sorgsamer Benennungen einsetzen.

            Inzwischen habe ich unsere Kinder ein Raumschiff, Flammen für die Düsen, Planeten, Mond usw. malen lassen und sie einfach als Planes mit Transparenzen auf meine Objekte geklebt und die Objekte selbst unsichtbar gemacht. Die Kinder finden es schon ziemlich cool, ihre eigenen Zeichnungen am Bildschirm durch die Gegend zu steuern.

            Viele Grüße
            jugglerjuggler

            Kommentar

            Lädt...
            X