Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
|
quickstart:spacer:mover [2026/08/12 07:23] 43.173.181.241 alte Version wiederhergestellt (2026/07/21 12:37) |
quickstart:spacer:mover [2026/08/17 07:20] (aktuell) 216.73.216.71 alte Version wiederhergestellt (2026/08/12 20:12) |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Mover 1 ====== | ||
| + | |||
| + | ===== 1. Beschreibung ===== | ||
| + | |||
| + | * Mover sind [[: | ||
| + | * Ihr könnt einen Aufzug bauen, dass ein Npc von Etage A nach Etage B sich transportieren kann, | ||
| + | * eine Zugbrücke herunterlassen, | ||
| + | * Fallen bauen, dass beim laufen in einem Flur eine Falltür nach unten schnappt, | ||
| + | * Spiesse aus dem Boden rammen lassen.... die Möglichkeiten sind schier unerschöpflich.... alles bleibt eurer Phantasie überlassen.... | ||
| + | | ||
| + | * Für unser Moverbeispiel setzen wir zuerst mal ein Gittertor, das sich bei Betätigung eines Schalters nach oben bewegt und den Eingang freigibt und bei erneuter Betätigung den Eingang wieder verschliesst. | ||
| + | |||
| + | Wer das nachvollziehen will, benötigt Kenntnisse, wie man im Spacer z.B Vobs in die Welt setzt. -> [[spacer: | ||
| + | Wie man diese Objekte im Spacer bewegt zum platzieren kann man hier erlernen -> [[spacer: | ||
| + | | ||
| + | |||
| + | ===== 2. Eigenschaften ===== | ||
| + | |||
| + | ==== 2.1 Kollision Mover ==== | ||
| + | |||
| + | * Ein Gittertor als Mover ergibt natürlich nur Sinn, wenn das Tor/Mover auch Kollision gegenüber PC/Npc hat. Sonst laufen die einfach durch das Gitter durch | ||
| + | * **Kollision: | ||
| + | * Logischerweise ist es so, dass nicht nur der Npc, nicht durch einen Mover mit aktivierter Kollision laufen kann, sondern der Mover kann sich dann auch nicht durch einen Npc bewegen. | ||
| + | * Beispiel: Wenn wir eine Stachelfalle bauen, die auslösen würde, wenn der Player darüber läuft und die Stacheln (das ist in diesem Falle der Mover), hätten eingeschaltete Kollision, dann würden sie einfach den Hero anheben, der dann auf den ausgefahrenen Stacheln stehen würde. | ||
| + | * Ich habe mal das Gitter unseres Mustermovers durch einen Klick auf das Gitter aktiviert. Sofort zeigt sich ein "" | ||
| + | {{: | ||
| + | |||
| + | * Leider ist diese Boundingbox keine feste Grösse, sondern verändert sich noch beträchtlich, | ||
| + | {{: | ||
| + | * Der Mover würde schon jetzt klemmen und sich niemals bewegen, wenn es da nicht eine Besonderheit gäbe.... | ||
| + | |||
| + | ==== 2.2 Kollision Umgebung ==== | ||
| + | |||
| + | * .... alle Wände, Decken, Böden... kurz gesagt, alles was zur Welt gehört, die im 3DS Prog gebaut wurde, hat zwar Kollision gegenüber Npc´s, aber niemals gegenüber einem im Spacer gesetzten Mover der eingeschaltete Kollision hat. Nur aus diesem Grunde ist es uns möglich, später das Gittertor nach oben durch die Decke zu bewegen. | ||
| + | |||
| + | * Aber alles was wir im Spacer gesetzt haben, Vobs, Mobs, etc und den Objekten Kollision eingeschaltet haben, blockiert sofort den Mover an der Stelle, wo sich die Boundingboxen von Mover und SpacerVob/ | ||
| + | |||
| + | * Ich beschreibe das deshalb so präzise, damit ihr später, wenn ihr eure eigenen Mover in die Welt setzt, diese Dinge beachtet und euch nicht wundert, dass euer Mover, einfach keinen " | ||
| + | |||
| + | |||
| + | ===== 3. Mover einsetzen ===== | ||
| + | |||
| + | * 3.1 Der Mover wurde im Objektfenster des Spacers leider ein wenig versteckt. | ||
| + | * Ihr klickt euch durch den Pfad -> zCVob -> zCTriggerBase(abstract) -> zCTrigger -> zCMover | ||
| + | {{: | ||
| + | |||
| + | * 3.2 Jetzt klicken wir mit der __rechten__ Maustaste auf eine freie Stelle im Spacer Hauptfenster. Wenn ihr dabei ein Objekt erwischen/ | ||
| + | * 3.3 Es öffnet sich das kleine Vobfenster mit der Option " | ||
| + | {{: | ||
| + | |||
| + | * 3.4 Wir klicken mit der __linken__ Maustaste auf die Option " | ||
| + | {{: | ||
| + | |||
| + | * und drücken anschliessend auf " | ||
| + | {{: | ||
| + | |||
| + | * 3.5 Wir wenden uns wieder dem Objektfenster zu, da ja unser Mover jetzt ein Visual (*.3DS) benötigt. Das Objektfenster stellt sich folgendermassen dar... | ||
| + | {{: | ||
| + | |||
| + | * 3.6 Als Visual wählen wir " | ||
| + | * Wir tragen das von uns gewählte Mesh (*.3DS) ganz unten im **Filefenster** des Objektfensters ein.... | ||
| + | {{: | ||
| + | |||
| + | * und klicken anschliessend auf den Button " | ||
| + | {{: | ||
| + | |||
| + | __Nicht vergessen ab und an mal eure *.Zen abzuspeichern (strg/s)__ | ||
| + | |||
| + | ===== 4. Mover Positionieren ===== | ||
| + | |||
| + | * 4.1 Wir verschieben das Movergitter in den Durchgang, achten darauf, dass es nicht verkippt ist, am Boden unten abschliesst und mittig eingesetzt ist. | ||
| + | {{: | ||
| + | |||
| + | ===== 5. Mover Keyframes ===== | ||
| + | |||
| + | * 5.1 Ein Keyframe ist die Position die ein Mover einnehmen kann. Für eine Geradeausfahrt benötigt man üblicherweise lediglich 2 Keyframes, es sei denn, dass die Fahrt des Movers auf seiner Wegstrecke vom Start zum Ziel unterbrochen werden soll. Das bedarf aber besonderer Steuerelemente. Da wir unser Gitter nur nach oben fahren aus der Startposition (geschlossen) zur Endposition (geöffnet) benötigen wir ebenfalls nur zwei Keyframes. | ||
| + | * 5.2__ Keyframe 0 Startposition__ | ||
| + | * Wenn wir unseren Mover sauber in den Durchgang eingebaut haben und der Durchgang durch das Gitter geschlossen ist, befindet sich unser Mover bereits in Startposition, | ||
| + | * Wir klicken mit der linken Maustaste auf das Movergitter, | ||
| + | * Dann wenden wir uns dem Objekt**Page**Fenster zu, das folgendermassen aussehen sollte: | ||
| + | {{: | ||
| + | |||
| + | * Angezeigt wird der Keyframe 0, | ||
| + | * Grau unterlegt sagt uns, dass der Keyframe 0 noch nicht programmiert ist, | ||
| + | * Der Punkt ist gesetzt auf " | ||
| + | * Wir klicken zum programmieren des Keyframes 0 auf den Button "new key" | ||
| + | * Die grau unterlegte 0 der Keyframeanzeige färbt sich schwarz | ||
| + | * Damit ist Keyframe 0 programmiert | ||
| + | {{: | ||
| + | |||
| + | *Wir aktivieren den Movemodus indem wir bei aktiviertem Movergitter (BoundingBox ist sichtbar) die Taste " | ||
| + | {{: | ||
| + | |||
| + | * 5.3 **Keyframe 1 (Endposition)** | ||
| + | * Danach bewegen wir das Movergitter mit der Taste " | ||
| + | {{: | ||
| + | |||
| + | * Oben angekommen klicken wir auf den Button "new Key" | ||
| + | * Die schwarze 0 wechselt zu einer schwarzen 1. | ||
| + | {{: | ||
| + | |||
| + | * Damit ist Keyframe 1 programmiert. | ||
| + | |||
| + | * Wir klicken im __Objektfenster__ auf den Button " | ||
| + | {{: | ||
| + | |||
| + | ===== 6. Mover Testfahrt ===== | ||
| + | |||
| + | * 6.1 Was immer wieder Verwirrung schafft, ist, dass wenn wir, wie im Punkt oben beschrieben den Button " | ||
| + | * 6.2 Wir können das ändern, wenn wir auf den linken der beiden Pfeilbuttons klicken - dann zeigt sich sofort die 0 zwischen den beiden Pfeilbuttons, | ||
| + | * 6.3 Der darf sich dabei auch nicht bewegen, da das Gitter ja geschlossen ist und geschlossen ist Keyframe 0 | ||
| + | * 6.4 Wenn ihr zwischen den Pfeiltasten hin <- -> her klickt schnappt das Movergatter auf und zu. | ||
| + | * Pfeiltasten | ||
| + | {{: | ||
| + | |||
| + | * 6.5 __RESET__ | ||
| + | * Wenn ihr genug mit den Pfeiltasten gespielt habt :o) dann bitte die Keyframe-Anzeige im Objekt**Pages**Fenster wieder auf Keyframe 0 stellen und den Butten " | ||
| + | * 6.6 __TESTFAHRT__ | ||
| + | * Wir klicken im Objekt**Pages**Fenster im linken Teilefenster auf den Eintrag " | ||
| + | {{: | ||
| + | |||
| + | * Danach auf den Button " | ||
| + | {{: | ||
| + | |||
| + | * und jetzt sollte unser Gitter sich nach oben bewegen. Was auffällt: So lange der Mover in Bewegung ist, färbt sich seine BoundingBox " | ||
| + | {{: | ||
| + | |||
| + | * Das könnt ihr mehrere Male machen und wenn eure Freude und der Spieltrieb nachgelassen haben, dann bitte den Mover wieder, wie unter 6.5 beschrieben resetten. | ||
| + | |||
| + | ===== 7. Mover Einstellungen ===== | ||
| + | |||
| + | * 7.1 Betrachten wir doch mal wieder unser Objektfenster bei angewählem Movergatter ....erschreckend!!! Es wimmelt nur so von Einträgen und Einstellmöglichkeiten, | ||
| + | | ||
| + | * GRÜN =..Einstellungen die wir schon vorgenommen haben im Verlaufe dieses WIKI, oder aber Standard-Einstellungen die zu unserem Mover passen und nicht verändert werden müssen | ||
| + | |||
| + | * ROT =...Einstellungen die wir noch vornehmen müssen | ||
| + | |||
| + | * BLAU =..Einstellungen, | ||
| + | {{: | ||
| + | |||
| + | * __VobName__: | ||
| + | |||
| + | * __visual__: | ||
| + | |||
| + | * __showVisual__: | ||
| + | |||
| + | * __cdStatic__: | ||
| + | |||
| + | * __cdDyn__: | ||
| + | |||
| + | * __staticVob__: | ||
| + | |||
| + | * __triggerTarget__: | ||
| + | |||
| + | * **MOVER**(Ordner) | ||
| + | * __moverBehavior__: | ||
| + | |||
| + | * **KEYFRAME**(Ordner) | ||
| + | * __moveSpeed__: | ||
| + | * Woher soll die Engine wissen, wie schnell oder langsam wir unser Tor laufen lassen wollen? | ||
| + | * Wert > Mover bewegt sich schneller | ||
| + | * Wert < Mover bewegt sich langsamer | ||
| + | |||
| + | * **Besonderheiten und Macken**: Manchmal (selten) ist der Eintrag einfach nicht da um den Speed einzustellen. Was tun? | ||
| + | * *.Zen abspeichern, | ||
| + | |||
| + | * __posLerpType__: | ||
| + | * mögliche Einstellungen: | ||
| + | * CURVE (vorgegebene Standard-Einstellung) | ||
| + | * LINEAR | ||
| + | * Wenn ihr zum Beispiel 6 Keyframes im Kreis gesetzt hättet, würde der Mover sich mit der Einstellung " | ||
| + | |||
| + | *__speedType__: | ||
| + | |||
| + | * **SOUND**(Ordner) (FAHRGERÄUSCHE) | ||
| + | * __sfxOpenStart__: | ||
| + | * __sfxOpenEnd__: | ||
| + | * __sfxMoving__: | ||
| + | * __sfxCloseStart__: | ||
| + | * __sfxCloseEnd__: | ||
| + | * Wenn ihr ein __**Steintor**__ hättet... Stone_START, | ||
| + | |||
| + | ===== 8. Mover Ansteuern ===== | ||
| + | |||
| + | * 8.1 Jetzt benötigen wir noch ein Steuerelement um unseren Mover anszusteuern, | ||
| + | | ||
| + | * Wer noch nie einen Switch, das ist ein oCMob, genauer gesagt ein oCMobSwitch im Spacer gesetzt hat, der sollte sich jetzt zuerst mal folgendes Wiki durchlesen und dessen Inhalt auch verinnerlichen -> [[quickstart: | ||
| + | |||
| + | * 8.2 Wir platzieren den Switch (LEVER_1_OC.MDS) | ||
| + | {{: | ||
| + | |||
| + | * Jetzt benötigen wir einen Eintrag im Objektfenster unter | ||
| + | * MOB(Ordner) | ||
| + | * __triggerTarget__: | ||
| + | |||
| + | * wir klicken im Objektfenster des Switches oben rechts auf den Button " | ||
| + | * wir klicken einmal in das Spacerhauptfenster | ||
| + | * noch einmal auf unseren Switch | ||
| + | * und __jetzt sollte sich eine "blaue Linie" zeigen, die vom Switch zum Mover führt__ | ||
| + | * das ist unsere Kontrollanzeige, | ||
| + | |||
| + | * nicht vergessen den Switch auf rewind:TRUE zu setzen. Ansonsten habt ihr nach dem Schalten mit dem Switch immer eine Leerfahrt, bis der Mover wieder reagiert | ||
| + | {{: | ||
| + | |||
| + | * wir lassen den Switch angewählt und wenden uns dem Objekt**List**Fenster zu | ||
| + | * Dort ist jetzt nicht mehr der Mover eingetragen, | ||
| + | * ansonsten verfahren wir wie unter 6.6 in diesem Wiki (TESTFAHRT) und der Mover sollte sich nach oben bewegen. | ||
| + | {{: | ||
| + | * Die orangefarbene Boundingbox die den Mover bei Bewegung umgibt, sehen wir jetzt nicht, da ja der Mover nicht angewählt ist, sondern der Switch. | ||
| + | |||
| + | * 8.3 Triggertarget des Movers. Auch ein Mover hat, genau so wie der Switch ein Triggertarget. | ||
| + | * Reihenfolge: | ||
| + | * Wir triggern den Mover auf sich selbst. Damit erreichen wir, dass wenn der Mover seine Endposition erreicht hat, also das Gatter hochgefahren ist, selbiges wieder automatisch nach unten fährt und dann wieder in der geschlossenen Stellung verbleibt. | ||
| + | * Allerdings muss die Movergeschwindigkeit so langsam sein, dass der Hero auch durchlaufen kann, bevor das Gitter wieder nach unten fährt. | ||
| + | * Warum sollten wir so etwas tun? Vielleicht wollen wir, dass der Hero einen Flur entlang geht und eben momentan nicht zurückgehen kann (Gameplaysteuerung)? | ||
| + | * Vielleicht sind Feinde in dem Raum und er soll nicht fliehen können, sondern gezwungen sein den Kampf aufzunehmen? | ||
| + | * Was auch immer, es ist eine zusätzliche Steuermöglichkeit. | ||
| + | |||
| + | * 8.4 Scriptseitige Steuerung: Über den Switch, der ja auch die Optionen: | ||
| + | * ConditionFunc: | ||
| + | * onStatFunc: | ||
| + | * besitzt kann man ebenfalls den Mover aufrufen unter irgend welchen Bedingungen. | ||
| + | |||
| + | * 8.5 TriggerBox: Über einen oCTriggerscript kann man natürlich ebenfalls den Mover aufrufen. | ||
| + | |||
| + | 2016/ | ||
| + | |||
| + | |||
| + | |||
| + | | ||