Kochbuch: Schwenkschiebetüren

Aus LOTUS Wiki DE
Version vom 23. Oktober 2023, 23:03 Uhr von DrBlackError (Diskussion | Beiträge) (1 Version importiert: Init)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Achtung! Dieser Artikel ist unvollständig oder lückenhaft. Hilf uns die Seite zu vervollständigen!

Schwenkschiebetüren animieren und steuern (alt, Artikel ggf. mit neuer Vorgehensweise neu strukturieren)

Schwenkschiebetüren animieren

Ziel: Schwenkschiebetüren animieren und steuern

Zutaten: Eine Schalter-Variable (boolean), Türflügel als separates Mesh

Werkzeug: Content Tool --> Object & Vehicle Tool + Script Editor

Ergebnis: Die Türen schwenken zuerst nach außen und fahren dann zur jeweiligen Seite auf

Zubereitung:

  1. In der Script-Hauptdatei im Abschnitt PUBLIC_VARS die beiden Variablen deklarieren, die nachher die Animation steuern, Door_1_pos_x: single; und Door_1_pos_y: single;
  2. Im Script die Konstanten, die restlichen Variablen und die gewünschte Prozedur deklarieren. Dies kann entweder in der Hauptdatei selbst geschehen, oder ausgelagert werden.
  3. Innerhalb der Simstep-Prozedur in der Hauptdatei muss die neu angelegte Prozedur aufgerufen, also eingetragen werden.
  4. Die Prozedur implementieren, die die Animation steuert. Sind die Script-Arbeiten erledigt, muss das Script im Object- und Vehicle-Tool importiert werden (siehe ganz oben).
  5. Anlegen des "Schwenkens nach außen"
    1. Im Object- und Vehicle-Tool unter "Animationen" den Wagenkasten auswählen, der die betreffende Tür beherbergt --> "Hinzufügen" klicken
    2. Der Animation einen selbsterklärenden Namen vergeben und Typ "Verschiebung entlang einer Achse" auswählen --> OK drücken
    3. Die neu angelegte Animation auswählen und "Bearbeiten" klicken --> Folgende Parameter ändern:
      1. Y und Z sind 0, X ist für Türen im Wagen rechts 1, für Türen links im Wagen -1
      2. Bei Variable wird nun Door_1_pos_x ausgewählt - ist das nicht möglich, wurde entweder die Variable nicht unter PUBLIC_VARS deklariert oder das Script nicht neu importiert.
      3. Bei Verschiebung bei Var = B (m) wird die Strecke eingetragen, die die Tür nach außen laufen soll. In unserem Beispiel 0,2 m.
      4. Mit OK bestätigen.
  6. Anlegen des "Fahrens zur Seite"
    1. Erster Türflügel (der 1. in Fahrtrichtung)
      1. Unter "Animationen" nun die zuvor angelegte Schwenk-Animation auswählen --> "Hinzufügen" klicken, Namen vergeben und "Verschieben entlang Achse" auswählen --> OK drücken
      2. Die neu angelegte Animation auswählen und "Bearbeiten" klicken --> Folgende Parameter ändern:
        1. X und Z sind 0, Y ist 1, weil dieser Türflügel in Fahrtrichtung laufen wird
        2. Bei Variable wird nun Door_1_pos_y ausgewählt
        3. Bei Verschiebung bei Var = B (m) wird nun die Strecke eingetragen, die dieser Türflügel nach vorn laufen wird. In unserem Beispiel 0,5 m.
        4. Mit OK bestätigen.
      3. Sicherstellen, dass unter "Animationen" immer noch die eben gerade angelegte Animation ("Fahren zur Seite") ausgewählt ist!
      4. Den Button "Mesh hinzufügen/entfernen" betätigen und anschließend alle Meshs auswählen, die zu diesem Türflügel gehören - die Auswahl kann direkt am Vorschaubild des Fahrzeuges erfolgen oder in der Mesh-Liste rechts. Sollte das Tool in einer Meldung nach Mesh-Koordinaten fragen, diese Frage mit "Nein" quittieren.
      5. Sind alle Meshs des Türflügels ausgewählt, den Button "Mesh hinzufügen/entfernen" erneut betätigen und damit den Vorgang beenden.
    2. Den Vorgang für den zweiten Türflügel wiederholen - diesmal den Parameter Y auf -1 setzen, da dieser Türflügel entgegen der Fahrtrichtung laufen wird.
//in der Hauptdatei deklarieren:
    
    {PUBLIC_VARS                
      ...
      Door_1_pos_x: single;
      Door_1_pos_y: single;
      ...
    }
    
    -----------------------------------------
    
    //in der Hauptdatei oder einer separat eingebundenen Script-Datei deklarieren:
    
    const
      DOOR_SPEED_S = 0.5;                                                   // Tür benötigt 2 Sekunden zum Auf-/Zulaufen, hiervon der Kehrwert ist 0,5
      DOOR_LIFT_PART = 0.1;                                                 // 10% des Laufweges wird für das Herausschwenken der Türen benötigt
    
    var
      door_1_target: boolean;                                               //Schalter-Stellung - true = öffnen; false = schließen; 
      door_1_pos: single;                                                   //Hilfsvariable - Position der Tür über den gesamten Vorgang
    
    procedure Door1_SimStep;                                                //diese Prozedur muss im Simstep der Haupt-Datei aufgerufen werden!
    begin
      if door_target then                                               //Tür soll geöffnet werden, denn Schalter ist auf true
      begin
        if door_1_pos < 1 then                                              //falls Tür noch nicht ganz auf
          door_1_pos := door_1_pos + 1/DOOR_SPEED_S * Timegap               //Tür weiter öffnen                      
        else                                                                //sonst
          door_1_pos := 1;                                                  //Vorgang auf "beendet (auf)" setzen
      end
      else                                                              //Tür soll geschlossen werden
      begin
        if door_1_pos > 0 then                                              //falls Tür noch nicht ganz zu
          door_1_pos := door_1_pos - 1/DOOR_SPEED_S * Timegap               //Tür weiter schließen          
        else                                                                //sonst
          door_1_pos := 0;                                                  //Vorgang auf "beendet (zu)" setzen
      end;
      
      if door_1_pos < DOOR_LIFT_PART then                              //Gesamtvorgang ist unter 10%
      begin                                                                 
        Door_1_pos_x := door_1_pos * 1/DOOR_LIFT_PART;                      //Berechnung des "Schwenks nach außen"
        Door_1_pos_y := 0;                                                  //Während des "Schwenks nach außen" findet keine Öffnung der Flügel statt
      end
      else                                                            //sonst
      begin
        Door_1_pos_x := 1;                                                  //Schwenk nach außen findet nicht weiter statt, ist abgeschlossen
        Door_1_pos_y := (door_1_pos - DOOR_LIFT_PART) * 1/(1-DOOR_LIFT_PART) //Berechnung der "Fahrt zur Seite"
      end;
    end;

Bonus: Die Variable door_1_target mit einem Schalter verbinden, um die Tür aus dem Fahrzeug heraus zu steuern und so die Animation zu testen.