Kochbuch: Schwenkschiebetüren

Aus LOTUS Wiki DE
Version vom 21. Januar 2025, 22:55 Uhr von DrBlackError (Diskussion | Beiträge) (Updated from LOTUS Lexicon on 2025-01-21)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Vorlage:ArticleMetadata

Schwenkschiebetüren animieren und steuern

(alt, Artikel ggf. mit neuer Vorgehensweise neu strukturieren)

1 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 [[1]] 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 [[2]] 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.

Script

Code

 1. [[3]]//in der Hauptdatei deklarieren:
 2. [[4]]
 3. [[5]] {PUBLIC_VARS 
 4. [[6]] ...
 5. [[7]] Door_1_pos_x: single;
 6. [[8]] Door_1_pos_y: single;
 7. [[9]] ...
 8. [[10]] }
 9. [[11]]
 10. [[12]] \-----------------------------------------
 11. [[13]]
 12. [[14]] //in der Hauptdatei oder einer separat eingebundenen Script-Datei deklarieren:
 13. [[15]]
 14. [[16]] const
 15. [[17]] DOOR_SPEED_S = 0.5; // Tür benötigt 2 Sekunden zum Auf-/Zulaufen, hiervon der Kehrwert ist 0,5
 16. [[18]] DOOR_LIFT_PART = 0.1; // 10% des Laufweges wird für das Herausschwenken der Türen benötigt
 17. [[19]]
 18. [[20]] var
 19. [[21]] door_1_target: boolean; //Schalter-Stellung - true = öffnen; false = schließen; 
 20. [[22]] door_1_pos: single; //Hilfsvariable - Position der Tür über den gesamten Vorgang
 21. [[23]]
 22. [[24]] procedure Door1_SimStep; //diese Prozedur muss im Simstep der Haupt-Datei aufgerufen werden!
 23. [[25]] begin
 24. [[26]] if door_target then //Tür soll geöffnet werden, denn Schalter ist auf true
 25. [[27]] begin
 26. [[28]] if door_1_pos < 1 then //falls Tür noch nicht ganz auf
 27. [[29]] door_1_pos := door_1_pos + 1/DOOR_SPEED_S * Timegap //Tür weiter öffnen 
 28. [[30]] else //sonst
 29. [[31]] door_1_pos := 1; //Vorgang auf "beendet (auf)" setzen
 30. [[32]] end
 31. [[33]] else //Tür soll geschlossen werden
 32. [[34]] begin
 33. [[35]] if door_1_pos > 0 then //falls Tür noch nicht ganz zu
 34. [[36]] door_1_pos := door_1_pos - 1/DOOR_SPEED_S * Timegap //Tür weiter schließen 
 35. [[37]] else //sonst
 36. [[38]] door_1_pos := 0; //Vorgang auf "beendet (zu)" setzen
 37. [[39]] end;
 38. [[40]]
 39. [[41]] if door_1_pos < DOOR_LIFT_PART then //Gesamtvorgang ist unter 10%
 40. [[42]] begin 
 41. [[43]] Door_1_pos_x := door_1_pos * 1/DOOR_LIFT_PART; //Berechnung des "Schwenks nach außen"
 42. [[44]] Door_1_pos_y := 0; //Während des "Schwenks nach außen" findet keine Öffnung der Flügel statt
 43. [[45]] end
 44. [[46]] else //sonst
 45. [[47]] begin
 46. [[48]] Door_1_pos_x := 1; //Schwenk nach außen findet nicht weiter statt, ist abgeschlossen
 47. [[49]] Door_1_pos_y := (door_1_pos - DOOR_LIFT_PART) * 1/(1-DOOR_LIFT_PART) //Berechnung der "Fahrt zur Seite"
 48. [[50]] end;
 49. [[51]] end;

Alles anzeigen

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.