Childobjekt im Szenario ein- bzw. ausblenden


Abonniere unseren Kanal auf WhatsApp (klicke hier zum abonnieren).
  • Grüße miteinander,


    ich habe mir in einen Nightjetwagen von 3DZug einen Rangierbegleiter als Childobjekt hineingebastelt.

    Ich habe nun vor, diesen durch ein "Ereignis auslösen" im Szenario-Editor erscheinen- bzw. wieder verschwinden zu lassen - je nach dem, ob gerade rückwärts rangiert wird oder nicht.


    in einem Foreneintrag von 2019 schrieb der Nutzer "Scarlet" mal:

    "Childobjekte lassen sich szenariogesteuert durchaus ausblenden oder einblenden. Das geht sowohl bei Streckenassets als auch bei Wagenmaterial oder Loks. Beweis der Machbarkeit am Beispiel von Streckenassets (am Beispiel z.B. der Baustelle am Kaiser-Wilhelm-Tunnel) hier, für Fahrzeuge funktioniert es prinzipiell genau gleich. Der relevante Scriptbefehl lautet "<NodeName>:ActivateNode. (...)"



    Kann mir bitte jemand einen Beispiel-Script mit diesem Syntax (ActivateNode) schreiben, damit ich eine Orientierung bekomme, wie man aus dem Szenario heraus den Rangierbegleiter "ansteuern" kann?

    Irgendwie muss ich im .lua-Script des Szenarios ja das spezielle Childobjekt definieren, welches ich überhaupt beeinflussen möchte. Ich denke, da liegt meine größte Unkenntnis, wie ich das machen muss.



    Ich habe in meiner Naivität folgendes probiert...


    "if (event == "wegmitdir") then

    Call( "Rangierbegleiter:ActivateNode", 0 )

    end"


    …was offensichtlich nicht funktioniert hat :)


    Ich bedanke mich fürs lesen und nette Antworten,

    alle Gute

    ~David :)


    P.S.: Das ist das Objekt der Begierde, um das es bei mir geht:

  • Hallo TruckerDave18,


    ich würde vermuten, dass Du auf einem guten Weg bist, Dir fehlt aber noch etwas an Information, um das Child-Objekt zu deaktivieren.


    Ich muss zugeben, dass ich bislang nicht versucht habe, ein Child-Objekt aus einem Scenario zu deaktivieren, aber der gezielte Aufruf zum aktivieren/deaktivieren sollte so aussehen:


    aktivieren: Call( "Rangierbegleiter:ActivateNode","XXX",1);

    deaktivieren: Call( "Rangierbegleiter:ActivateNode","XXX",0);


    "Rangierbegleiter" ist der Name des Child-Objekts in der BIN-Datei (XML-Datei), den hast Du ja gefunden bzw. selbst hinzugefügt.

    Den richtigen Wert für "XXX" findest Du ohne die Quelldatei zu haben, in der entsprechenden GeoPcDx-Datei.

    Die einfach mal mit TS-Tools öffnen und im XML Viewer gucken, welche Namen "e" im Knoten "TransformName" deklariert sind.

    Wenn die GeoPcDx-Datei nur das eine Objekt enthält, gibt es nur einen Eintrag "e", den kopieren und mit XXX austauschen.

    Gibt es mehrere Objekte in der GeoPcDx-Datei, kannst du versuchen die Einträge "e" zu lesen (und zu verstehen, keine Ahnung ob die Namen sinnvoll menschlich lesbar vergeben worden sind),

    oder über "Trial & Error" das Richtige herausfinden.


    Einen schönen Sonntag


    Grüße

    SeKu

  • Servus SeKu,


    ich bedanke mich für den Denkanstoß und den richtigen Code für das Script.

    Ich wusste, dass mir was fehlt, aber auf die GeoPcDx-Dateien wäre ich in diesem Zusammenhang niemals gekommen, auch wenn ich zugegeben noch unwissend darüber bin, welche Funktion "XXX" (bzw. dann der Ersatz durch den Namen aus der "GeoPcDx-Datei") in dem Script übernimmt. Ist das dann quasi die Anweisung für das Script, das Child in diesem einen speziellen Wagen zu suchen?


    Die GeoPcDx habe ich gerade mal versuchsweise geöffnet, um die betreffenden Einträge für "TransformName" zu finden. Die Begrifflichkeiten dafür sind sogar sehr verständlich gewählt, nur weiß ich trotzdem nicht, welche der 27 Einträge für "e" derjenige ist, welcher im Zusammenhang mit meinem Rangierbegleiter steht.

    Bspw. steht da:

    <e d:type="cDeltaString">schatten</e>

    oder

    <e d:type="cDeltaString">doors1L</e>

    Trial and Error wird wohl der Weg sein, den ich gehen werde... So wie eigentlich immer :)


    Ich werde mich nächstes Wochenende mal daran versuchen, und im Falle eines Erfolges/Misserfolges meinen Lösungsweg/nicht-Lösungsweg vielleicht hier präsentieren.


    Danke Dir für die Antwort und einen erfolgreichen Start in die Woche

    ~David

  • Hallo TruckerDave18,


    nur eine Überlegung, aber die Namen lassen darauf schließen, dass Du Dir die "falsche" GeoPcDx-Datei herausgesucht hast. Ich würde vermuten das ist die GeoPcDx-Datei, die zum Waggon gehört?


    Du brauchst aber die Informationen aus der GeoPcDx-Datei, die von "Rangierbegleiter" referenziert wird.

    Lt. deinem Screenshot müsste sich die BIN-Datei oder XML-Datei hier befinden:

    "\Assets\3DZUG\3dz_nightjet\RailVehicles\passenger\Male_Standing_09.xml"

    Darin kannst Du im Knoten "GeometryID" den dazugehörigen Namen der GeoPcDx-Datei finden.

    Sehr wahrscheinlich lautet dieser "Male_Standing_09.GeoPcDx", dass muss aber nicht so sein. Hängt vom Ersteller ab.


    Um noch Deine Frage zur Funktion Call( "<Name in BIN>:ActivateNode",<Name in GeoPcDx-Datei>,<1/0>), bzw. zum Funktionsaufruf zu beantworten:


    Die Bezeichnung ist wichtig, damit der TS dein Objekt auch findet: <Name in BIN> stellt eine erste Referenz bzw. einen Zeiger zu der GeoPcDx-Datei dar.

    Da aber nicht klar ist, ob sich in der damit referenzierten GeoPcDx-Datei nur ein einzelnes 3d-Objekt befindet, oder gleich mehrere,

    ist ein qualifizierter Aufruf der Funktion Call mit <Name in GeoPcDx-Datei> notwendig.



    Grüße

    SeKu

  • Du brauchst aber die Informationen aus der GeoPcDx-Datei, die von "Rangierbegleiter" referenziert wird.

    Hallo SeKu


    Meine Güte, das ist schlau! Ich hatte natürlich die vom Wagen geöffnet und nicht die vom eigentlichen Child, welches ich ansteuern möchte. Danke für den Hinweis - Das ergibt Sinn👍


    Dein letzter Absatz zu der Beschreibung der Funktion ist auch sehr hilfreich und hat mich zum Verständnis gebracht, weswegen die GeoPcDx vom Wagen selbst auch falsch ist. Ich orientiere mich meistens an der Developer Documentation von DTG und dort wird ja oftmals schon erklärt, wie was funktioniert, aber ebenso oft muss man sich seinen Teil auch selbst überlegen. Aber das ist ja auch irgendwo der Reiz.


    Danke also nochmal für den Nachtrag und beste Grüße

    ~David