Blissm Posted March 17 Report Share Posted March 17 Hi, ich versuche einen Script zu schreiben bei dem sich die Spielfigur in der Y-Achse nach unten bewegt wenn sie von einer Platform springt. Klingt erstmal nicht so kompliziert, allerdings handelt es sich um ein 2D Spiel in Vogelperspektive. Um das hinzubekommen weise ich Charakteren sowie Umgebungen einen int für die Höhe zu. Der Charakter besitzt ein Groundcheck, mithilfe dessen geprüft wird ob der Untergrund auch den selben Höhenwert hat wie der Spieler. Ist dem so bleibt der Charakter stehen. Andernfalls fällt er weiter, bis er die entsprechende Höhe des Untergrunds erreicht hat. Soweit so gut. Nun zu meinem Problem: Damit der Spieler nicht ins Unendliche fällt muss der Höhenwert 'height' mit dem Fall immer weiter sinken. Mit einem Timer erscheint es mir zu ungenau, daher dachte ich es macht Sinn nach der zurückgelegten Distanz zu gehen. Also dass, immer wenn der Y-Wert im Transform um eine ganze Zahl gesunken ist, 1 von der Höhe des Spielers abgezogen wird. Nun fällt mir aber keine gute Möglichkeit ein, wie ich das so genau abpassen soll. Im Internet wurde ich bislang auch nicht fündig nach einer vergleichbaren Situation. Irgendjemand eine Idee..? Edit: Ach ja, ich hatte auch mal was zu einem anderen Ansatz gesehen, bei dem die Z-Achse so modifiziert wurde dass sie wie die Y-Achse eines 3D-Spiels funktioniert. Allerdings fand ich da nur was für GameMaker, und nichts für Unity. Quote Link to comment Share on other sites More sharing options...
Sascha Posted March 17 Report Share Posted March 17 Moin! Ein bisschen mehr Info wäre noch gut. Hast du da normale Collider2D, durch die sich dein Character mit einem Rigidbody2D bewegt? Oder wie funktioniert das bei dir? Ansonsten ist das mit der Distanz schon schlau. Entweder, du bewegst an irgendeiner Stelle deines Codes dein Objekt, oder du setzt die Geschwindigkeit und es bewegt sich selbst. Deshalb auch die Nachfrage danach, wie du das implementiert hast. Bei ersterem Fall kannst du deinen Bewegungsvektor genau dafür benutzen. Beim anderen Fall, z.B. bei einem Rigidbody, musst du dir immer die letzte Position speichern und dann nach der Bewegung von der neuen Position abziehen, um den Bewegungsvektor zu erhalten. Quote Link to comment Share on other sites More sharing options...
Blissm Posted March 17 Author Report Share Posted March 17 Ja, aktuell bewegt sich der Charakter durch einen Rigidbody2D. Benutze auch noch den GravityScale davon, war aber auch schon am überlegen eine andere Bewegungsart auszuprobieren. Bin mir noch unschlüssig was ich besser finde. 😅 Mit dem Speichern der letzten Position weiß ich nicht wie ich das während des Falls regelmäßig anpassen soll. Also dass es nach dem erreichen einer ganzen Zahl auch reagiert, und nicht erst nach dem Landen, was ja nicht passiert... 🤔 Irgendwie verzwirbelt sich mir bloß mein Hirn... 😵 Und wie mache ich das genau mit den Vektoren? Hab ich bislang noch nicht wirklich genutzt. 🙈 Bewege ich das Objekt dann jedesmal um -1 auf der Y-Achse und checke dabei ob es weiter fallen soll..? Bleibt es dann auch nicht stehen? Fühle mich gerade irgendwie blöd das alles zu fragen, aber ich komm hier irgendwie einfach nicht mehr klar... 😬 Quote Link to comment Share on other sites More sharing options...
Sascha Posted March 17 Report Share Posted March 17 Also erst mal sei gesagt, dass dein Problem kein triviales ist. Stell dir vor, da ist ein Collider auf der Linie zwischen 1 und 2. Einfach weil da eine kleine Wand auf dem Boden steht. Wie willst du der Katze sagen, dass sie das Ding ignorieren soll? Ich würde an deiner Stelle dazu tendieren, die Physik und die normale Bewegung für die Dauer eines Sprungs komplett abzuschalten. Du definierst ja sowieso per Hand (und anders geht es auch kaum) die jeweiligen Höhen der Bodenflächen in deiner Welt. Du hast also auch bereits überhaupt erst mal ein System, mit dem du diese Flächen definieren kannst. Ich denke, es wäre einfacher, von hier noch einen Schritt weiter zu gehen und an Stellen, an denen ein Sprung erlaubt ist, eine prozedurale Animation (in diesem Fall mit errechnetem Start- und Zielpunkt und einer Parabel dazwischen) abzuspielen. Während diese läuft, wird der Rigidbody deaktiviert und erst dann wieder aktiviert, wenn die Katze am Ziel des Sprungs angekommen ist. Wenn das etwas kompliziert klingt: Ist es leider auch. Machbar, aber wirklich kein Anfängerkram mehr. Dennoch halte ich das aktuell für überschaubarer als einen Rigidbody zu zähmen. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.