Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.04.2013, 16:18

min / max Velocity

Guten Tag,
ich hoffe ich poste das Hier an der richtigen Stelle.

Ich kämpfe mit einem Problem, von dem ich nicht gedacht hätte, das es mich so aufhält. Ich habe eine Art "Pong" erstellt.
Auf dem Spielfeld gibt es sich sehr schnell bewegende Hindernisse.

Das Problem:
Gelegentlich überlagert sich in einer Frame Ball und Hindernis.

Das führt dazu das der Ball, der sonst eine konstante Geschwindigkeit hat, zum Stehen kommt oder langsamer wird. In seltenen Fällen wird der Ball aber auch extrem beschleunigt.

Ich suche nach einem Weg die Geschwindigkeit für den Ball
im Falle einer Veränderung wieder herzustellen bzw. einen Maximalwert herstellen.

Ich bin des Scripten leider kaum mächtig aber ich dachte an etwas wie:



C#-Quelltext

1
2
3
4
function FixedUpdate () {
            if (Irigidbody.velocity = > Vector3(0,10,0)) {
                    rigidbody.velocity = Vector3(0,15,0);
            }


Nach meinem Verständnis ware es egal ob das Script in Java oder C# geschrieben ist.

Danke im voraus

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

05.04.2013, 16:25

Darf ich fragen, woher die Physik denn stammt? Mag ja sein, dass es erstmal egal ist, welche Sprache, aber wenn die Physik von Dir stammt, ist der Lösungsansatz ein ganz anderer, als wenn er z.B. aus Box2D oder Newton stammt oder ähnliches.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

05.04.2013, 19:01

Ich vermute mal stark hier geht es um Unity. Dein Ansatz geht in die richtige Richtung. Deine beiden Vektoren geben aber schon eine Richtung mit an. Du möchtest ja die Geschwindigkeit in jede Richtung festlegen. Die Geschwindigkeit steckt in der Länge des Vektors. Willst du also nur die Geschwindigkeit und nicht die Richtung betrachten, so musst du die Länge des Vektors manipulieren. Dafür prüfst du zuerst, ob die Länge des Vektors größer deiner maximalen Geschwindigkeit ist. Ist das nämlich nicht der Fall, musst du nichts tun. Ist der velocity Vektor länger als deine maximale Geschwindigkeit, brauchst du nur folgende Schritte:
velocity-Vektor auf die Länge 1 bringen. (den Vektor normalisieren)
Jetzt kannst du den Vektor ganz einfach auf Länge m bringen, indem du den Vektor mit m Multiplizierst. (m wäre hier deine maximale Geschwindigkeit)

Im Prinzip machst du also folgendes:

C#-Quelltext

1
2
3
4
5
if(velocity.Length() > maxLength)
{
    velocity.Normalize();
    velocity *= maxLength;
}


Den Code kannst du nicht einfach nehmen und kopieren. Ein wenig anpassen musst du ihn noch. Solltest du verstanden haben was zu tun ist, sollte das kein Problem sein. Diese Seite bzw diese sind vielleicht interessant für dich. Viel umschreiben musst du aber nicht mehr;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

4

06.04.2013, 13:56

Vielen Dank für die schnelle Hilfe!

Ich habe mich ein wenig belesen und denke das ich das Prinzip verstanden habe. Ich bin aber leider aufgrund mangelnder Scriptingkenntnisse nicht in der Lage deine Lösung umzusetzen.
Nach meinem Verständnis benötige ich den Wert der Länge und der Beschleunigung ... existieren diese Werte bereits oder lege ich diese fest?

Ich habe das Script jetzt mehrmals ergebnislos auf den Kopf gestellt ... mit meinen Kenntnissen ist es noch nicht weit her.

Werbeanzeige