C# Unity - BouncyBox

Captium

Cadet 4th Year
Registriert
Apr. 2017
Beiträge
81
Hi Leute,

es geht um Unity 2D. Man kann ja auf den Collider eines Objekts eine BouncyBox einfügen, wo man dann die Bounciness und die Friction bestimmes kann. Ich nenne mal das Projekt auf dem die BouncyBox ist "Jumppad".
Wenn man die Bounciness auf einen Wert unter 1 macht und sich dann auf das Jumppad begibt, springt der Spieler(wenn man nichts drück, nur auf dem Jumppad bleiben) mit jedem Sprung etwas weniger, bis er gar nicht mehr spring. Wenn man jedoch den Wert von Bounciness auf 1 oder höher macht springt der Spieler, wenn man sich auf das Jumppad begibt(wieder nur drauf begeben keine Leertaste oder irgendwas drücken) immer und immer höher.
Zur Frage: Wie bekommt man es hin, dass der Spieler immer gleich hoch springt, wenn man auf dem jumppad ist?

Vielen Dank schonmal!

Viele Grüße
 
Vergiss friction, bounciness was auch immer.

Jumppads kann man viel einfacher implementieren.

- Du erkennt ob dein Player in dein Jumppad reinläuft, CollisionEnter/BeginCollision oder so ähnlich, das Event müsste im Collider oder im RigidBody sein

- In diesem Event machst du nichts weiter als einen fixen Impuls in die Richtung zu feuern die du möchstest -> Der Impulse setzt sich zusammen aus Richtung und Stärke, die Stärke muss entsprechend stark gewählt werden, damit die Schwerkraft überwunden wird

In der RigidBodyComponent müsste ne Funktion stecken in form von "ApplyImpulse" oder "AddImpulse".
Du wirst vermutlich auch in der Methode einen Impuls-Punkt angegeben müssen -> Hier einfach die World Position aus dem Transform des Players nehmen.

- Done

Wichtig beim Impuls das dieser eine sofortige Änderung der Velocity auslöst, einfach die Doku dazu lesen!
 
Zuletzt bearbeitet:
Danke erstmal!

Mit so einem Impuls hatte ich noch nie was zutuhen. Wie mach ich das genau?
Ich habe es so verstanden, dass nach der Collision von dem "Jumopad" und z. B einem Ball, der Ball um x hoch katapultiert werden soll. Richtig?


Also so in der art, aber wie die Methode genau Funken soll?:
Code:
void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Ball")
        {
            // Wie soll das dann aussehen?
        }
    }
}

Sorry, setze mich erst seit kurzem mit der Engine auseinander.
 
Captium schrieb:
Danke erstmal!

Mit so einem Impuls hatte ich noch nie was zutuhen. Wie mach ich das genau?
Ich habe es so verstanden, dass nach der Collision von dem "Jumopad" und z. B einem Ball, der Ball um x hoch katapultiert werden soll. Richtig?


Also so in der art, aber wie die Methode genau Funken soll?:
Code:
void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Ball")
        {
            // Wie soll das dann aussehen?
        }
    }
}

Sorry, setze mich erst seit kurzem mit der Engine auseinander.

Kein Problem, jeder fängt mal klein an. Aber da wäre es tatsächlich hilfreich zumindest mal ein paar Tutorials durchgearbeitet zu haben.
Und vor allem ein wenig Vector-Mathematik sich erarbeiten, Einheitskreis, Einheitsvektor, Skalar-Produkt, Transformationen, Rotation usw.

Aber um deine Frage zu beantworten:

Berechne den Impulse oder macht nen Parameter dafür im Skript den du vom Editor aus steuerst.
Ein Impulse gegen die Schwerkraft nach oben wäre z.b. Vector3(0, 0, 100) -> Schwerkraft in einem typischen kartesischen Koordinatensystem ist Vector3(0, 0, -9.81).

Die Funktion um ein Impuls zu wirken - inkl. Beispiel:
https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html
Wichtig: Parameter ForceMode sollte VelocityChange sein (Masse wird hier ignoriert)
 
Zuletzt bearbeitet:
Zurück
Oben