Einfache Animation erstellen

Willkommen in der OMSI-WebDisk!
Als Gast kannst du nur Inhalte in deiner ausgewählten Sprache sehen. Registrierte Nutzer können die Sichtbarkeit anderer Sprachen in ihrem Kontrollzentrum aktivieren, weitere Infos hier.
Alle Themen sind in den Foren mit einer Sprachflagge gekennzeichnet: = Englisch [EN], = Deutsch [DE], = Französisch [FR]. Wenn du die angegebene Sprache nicht beherrschst, schreibe auf Englisch!
  • Moin,

    ich habe in letzter Zeit mal versucht, ein Objekt mit Animation zu erstellen. Jedoch habe ich dabei noch viele offene Fragen, zudem funktioniert die ganzen Animation nicht.


    Nun, ich habe das ganze erst so halb verstanden. Ich weiß schon, wie in etwa der [newanim]-Eintrag aussieht.


    Und nun meine Fragen... ^^


    • Braucht man zu einem [newanim] immer eine [newcurve]?

    • Wie genau ist die [newcurve] bei den [pnt]-Einträgen aufgebaut? Im Wiki habe ich irgendwas davon gelesen, dass der x-Wert eingegeben wird und y ausgegeben wird? Muss man diese Ausgabe dann verarbeiten?


    Es gibt noch ein paar weitere Fragen, die sich vielleicht schon beim Klären der obrigen Fragen erübrigen oder sich sich nach der Klärung der obrigen erst richtig forumieren lassen.


    Ich bedanke mich schonmal für eure Erklärungen. :)


    Gruß

  • Anzeige
  • • Braucht man zu einem [newanim] immer eine [newcurve]?

    Nein, braucht man nicht. Solange eine Animation, rein Manuell bedient wird (Beispielsweise Fahrertür oder Regler) sind Kostanten schonmal nutzlos, da hier das Verhalten vom Spieler direkt beienflusst wird - Mausgesten. Soll eine Animation kontinuierlich ablaufen, brauchst du auch keine Kostanten.

    Die Kostanten brauchst du allein nur dafür, wenn eine Animation nicht kontinuierlich ablaufen soll.

    Beispiel:

    Eine Tür soll erst langsam schließen und kurz vor dem Ende zuknallen. Hierfür sind die Konstanten notwendig. Man kann die Animation zwar auch kontinuierlich ablaufen lassen und dies mit Konstanten eintragen, ist aber absolut sinnlos. Für eine Änderung der Geschwindigkeit während der Animation sind die Kostanten notwendig, damit die Tür unterschiedliche Geschwindigkeiten ausführen kann.



    • Wie genau ist die [newcurve] bei den [pnt]-Einträgen aufgebaut? Im Wiki habe ich irgendwas davon gelesen, dass der x-Wert eingegeben wird und y ausgegeben wird? Muss man diese Ausgabe dann verarbeiten?

    Die Punkte unter der neuen Kurve haben nur zwei Punkte. Zum einen gibt es die genaue Position. Die richtet sich nach der Animation. Im Urzustand hat das Objekt den Zustand 0, also ist die Animation auch 0. Wenn die Animation startet, bewegt sich das Objekt von 0 zur Position 1. Die einzelnen Positionen richten sich also immer zwischen 0 und 1 aus. So kann man ein viertel des Weges abfragen (0.25), die häfte (0.5), dreiviertel (0.75), aber auch alle anderen Punkte zwischen 0 und 1.

    Im zweiten String kommt dann die Zeit oder Geschwindigkeit, die gebraucht wird, wie langsam oder shcnell das Objekt zwischen 2 eingetragenen Punkten brauchen soll.

    Im Übertriebenen Sinne, kann man eine Tür ganz langsam von 0 bis 0.1 laufen lassen, sehr schnell zwischen 0.1 und 0.1876491, dann wieder langsam zwischen 0.1876492 bis 0.25 und so weiter. Bis zu 7 Stellen hinter dem Komma nimmt Omsi an, alles dahinter wird nicht erkannt.

    Omsi nimmt den Mittelwert zwischen zwei Punkten und die Zeit, wie lange die Animation zwischen den Mittelpunkten ablaufen soll.


    Trägt man in der model.cfg unter der Animation den Eintrag Speed ein (nicht zwingend erforderlich) wird dies als Zeit genommen um die Animation von 0 bis 1 auszuführen, wobei die Animation immer kontinuierlich abläuft.

    Beispiel Schalter: Jeder Schalter führt eine Animation aus. Vom Ruhezustand 0 bis zu anderen Endposition 1 oder entgegegen gesetzt zu -1 oder zur Position 2. Im Script schreibt man aber von 0 zu 0.5 zu 1 oder von 0 zu 1 oder -1. Dabei führt jeder Schalter eine Animation aus. Steht Speed nicht da, wird Speed 0 genommen, der Schalter klickt sofort von einer zur anderen Position. trägst du nun Speed ein und einen Wert von 300, bewegt sich der Schalter langsam von einer Position zur anderen. Sinnvoll ist das Beispiel jetzt nicht. Sinnvoll wäre eine langsame Animation, zum Beispiel bei einem manuellen Thermometer. Selbst wenn man in Omsi von Frost auf Hitze umschaltet, dauert es wenige Sekunden, bis die Temperatur im Bus ansteigt. Das manuelle Thermometer läuft aber viel langsamer ab, aber auch kontinuierlich.


    Mit dem Eintrag Speed -1 wird eine Animation ausgesetzt und der wechsel zwischen dem Urzustand und dem Zustand 1 wechselt sofort.

  • Erstmal vielen Dank für deine ausführliche Erklärung. :)


    trägst du nun Speed ein und einen Wert von 300

    Gibt es da irgendeine Maßeinheit, Sekunden oder Millisekunden oder sowas?



    Wie verbindet man dann eigentlich die Animation und die [newcurve]?

  • Gibt es da irgendeine Maßeinheit, Sekunden oder Millisekunden oder sowas?

    Das sollen wohl Millisekunden sein. Ganz sehe ich da nicht durch, da der Wert 300 die Animation in ca 40-45 Sekunden ausführt.


    Wie verbindet man dann eigentlich die Animation und die [newcurve]?

    Im Script. Von der model.cfg steht die Verbindung zum Trigger / Macro mit der Animationsvariable. Im Macro wird die Bewegung ansich gesteuert. Die Abfrage der Konstanten wird im Script durch die Abfrage der Constfile-Variable geregelt.

  • Und wie genau würde dann so eine Abfrage aussehen? Ich hab' das jetzt schon seit 14 Uhr probiert, bekomme es irgendwie aber nicht hin. Durch die Türskripte steige ich auch nicht so wirklich durch. ^^

  • Also eine Animation ist ja wie folgt aufgebaut:


    Code
    [newanim]
    origin_rot_<Achse>
    -90
    anim_<Art>
    <Variable_zum_ansteuern>
    <Wert>

    Achse: x (horizontal); y (vertikal); z (Tiefe)

    Art: trans (transport (bewegen)); rot (rotation (Rotation))

    Wert: selbsterklärend ^^


    Und zwar stehen Variable und Wert parallel zueinander. Ist die Variable komplett WAHR (also 1), dann wird die vollständige Animation/Bewegung/Rotation (der angegebene Wert) ausgeführt. Steht die Variable nur auf der Hälfte (0.5), dann wird auch die Animation nur zur Hälfte ausgeführt.

    Soll sich also z.B. ein Objekt um 5 (Einheiten, Meter, ...?) in die positive Richtung auf der Tiefenachse (vor/zurück) verschieben, dann tut es dies wie folgt:


    VARIABLEWERT
    0.00.0
    0.251.25
    0.52.5
    0.753.75
    1.05.0


    Jetzt kommt es halt drauf an, wie du das Ganze abfragen willst. Du kannst die Animation in einem festen Takt ausführen, zu bestimmten Zeiten oder eben dauerhaft ^^


    Mit diesem [newcurve] wird eine Art Überbrückung erzeugt:




    =================================================

    CONSTFILE:

    =================================================


    [newcurve]

    TEEEST


    [pnt]

    Wert 1

    Wert 2


    =================================================

    SCRIPT:

    =================================================



    (L.L.Variable_A) (F.L.TEEEST) (S.L.Variable_B)




    Jetzt könnte man bspw. mit dem Ergebnis aus Variable_B die Geschwindigkeit für ein Windrad erzeugen:


    (L.L.windrad_pos) (L.S.Timegap) (L.L.Variable_B) * + (S.L.windrad_pos)


    Eigentlich für so ein Objekt eher witzlos, es sei denn, es schleift an einer bestimmten Stelle ^^ Weil normalerweise dreht sich ein Windrad immer gleichmäßig. Aber auch die Position kann man somit auslesen, wie etwa bei einem Tacho, da nicht jede Zahl im (gerade die ersten 10(?)) im gleichen Abstand zu den anderen steht. Und somit wäre eine konstante Bewegung nicht sinnvoll.

  • Ah, vielen Dank. ^^ Vieles (außer das mit der Curve) wusste ich schon, ist aber trotzdem eine sehr schöne Zusammenfassung. :thumbup:

    Ach so, die Einheit scheint wohl Meter zu sein. Ich hatte das bei einem Tor in Blender abgemessen. 3,9 Meter waren das und so sah es dann auch in OMSI aus. ^^


    Mit den Curves teste ich mich dann nochmal (ich dachte vielleicht ein ein ruckartiges, wiederholendes Öffnen des Tores, also nicht-elektisch) und melde mich ggf. :)


    Stehen die Scriptschnipsel dann alle in Frame? Das Tor wird über ein mouseevents angesteuert.

  • Genau. :thumbup: Da muss ja dann dauerhaft ausgeführt werden.