Jump to content
Unity Insider Forum

Bitte um Unterstützung für konstante Geschwindigkeit


mawue

Recommended Posts

Werte Profis

 

Ich bin Einsteiger in Unity und habe ein wichtige Frage zu meinem ersten nachgebauten Pong Spiel.

a.) Wie kann man eine Geschwindigkeit gleichmäßig verändern, die auch nicht abnehmen soll.

Ich habe so eine Grundgeschwindigkeit hinbekommen, aber die ist viel zu langsam.

 

b.) gibt es irgendeine gute Erklärung zu Vektoren und Geschwindigkeitsregeln, ich kapier das nicht ganz....

 

Vielen Dank Euch allen im Voraus

mawue

 

Hier mein Code:

void Start () {
 // set start direction
 rigidbody.velocity = Vector3.right;
}

// Update is called once per frame
void Update () {
 // keep the speed of 1
 rigidbody.velocity = rigidbody.velocity.normalized;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

a.) Wenn du es zu langsam findest, bau doch eine speed-Variable ein, mir der du das ganze mal nimmst

 

Da du in Update bist, würde ich dir auch empfehlen, das ganze noch mit Time.deltaTime zu multiplizieren, damit es auch wirklich konstant ist.

 

Konstante Beschleunigung könntest du folgendermaßen einbauen:

du erzeugst noch eine float growingspeed und nimmst die mal der Zeit, die seit einem bestimmten Zeitpunkt vergangen ist (am einfachsten seit dem Startup) und das wird auf speed drauf gerechnet

 

b.) https://docs.unity3d...ce/Vector3.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Werte Profis

 

Ich bin Einsteiger in Unity und habe ein wichtige Frage zu meinem ersten nachgebauten Pong Spiel.

a.) Wie kann man eine Geschwindigkeit gleichmäßig verändern, die auch nicht abnehmen soll.

Ich habe so eine Grundgeschwindigkeit hinbekommen, aber die ist viel zu langsam.

 

b.) gibt es irgendeine gute Erklärung zu Vektoren und Geschwindigkeitsregeln, ich kapier das nicht ganz....

 

Vielen Dank Euch allen im Voraus

mawue

 

Hier mein Code:

void Start () {
 // set start direction
 rigidbody.velocity = Vector3.right;
}

// Update is called once per frame
void Update () {
 // keep the speed of 1
 rigidbody.velocity = rigidbody.velocity.normalized;

}

 

 

Danke für die schnelle Antwort.

 

Ich fürchte, das ist mir noch zu hoch. ....

 

b.) hab ich noch nachgelesen, aber bei a.) steige ich aus. Wie macht man sowas????

 

Danke nochmals

mawue

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für die Konstante Geschwindigkeit:

 

//bestimmt die Startgeschwindigkeit
public float speed = 5.0f;

protected void Update()
{
   //Ein leerer Vector3
   Vector3 moveDirection = Vector3.zero;

   //Gibt die Geschwindigkeit nach rechts an
   moveDirection.x = speed * Time.deltaTime;

   rigidbody.velocity = moveDirection;
}

 

Wie kann man eine Geschwindigkeit gleichmäßig verändern, die auch nicht abnehmen soll

Klingt für mich, als wolltest du eine Geschwindigkeit haben, die konstant ansteigt

Ginge so:

 


//bestimmt die Startgeschwindigkeit
public float speed = 5.0f;
//gibt an, wie schnell die Geschwindigkeit steigen/fallen soll
public float growingSpeed = 1.1f;

protected void Update()
{
//Ein leerer Vector3
Vector3 moveDirection = Vector3.zero;

//Gibt die Geschwindigkeit nach rechts an
//Diesmal wird noch ein Wert hinzuaddiert, der mit der Zeit immer größer/kleiner wird wird
moveDirection.x = (speed + Time.realTimeSinceStartup * growningSpeed) * Time.deltaTime;

rigidbody.velocity = moveDirection;
}
[/Code]

 

Ich würde aber eher zu einem CharacterController mit der .Move Methode raten ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für die Konstante Geschwindigkeit:

 

//bestimmt die Startgeschwindigkeit
public float speed = 5.0f;

protected void Update()
{
//Ein leerer Vector3
Vector3 moveDirection = Vector3.zero;

//Gibt die Geschwindigkeit nach rechts an
moveDirection.x = speed * Time.deltaTime;

rigidbody.velocity = moveDirection;
}

 

 

Klingt für mich, als wolltest du eine Geschwindigkeit haben, die konstant ansteigt

Ginge so:

 


//bestimmt die Startgeschwindigkeit
public float speed = 5.0f;
//gibt an, wie schnell die Geschwindigkeit steigen/fallen soll
public float growingSpeed = 1.1f;

protected void Update()
{
//Ein leerer Vector3
Vector3 moveDirection = Vector3.zero;

//Gibt die Geschwindigkeit nach rechts an
//Diesmal wird noch ein Wert hinzuaddiert, der mit der Zeit immer größer/kleiner wird wird
moveDirection.x = (speed + Time.realTimeSinceStartup * growningSpeed) * Time.deltaTime;

rigidbody.velocity = moveDirection;
}
[/Code]

 

Ich würde aber eher zu einem CharacterController mit der .Move Methode raten ;)

 

Vielen Dank für die schnelle und ausführliche Antwort

 

Ich habe beide Varianten versucht, aber die Kugel kriecht immer noch langsam dahin. Kann es etwas mit der Platzierung der Kugel zu tun haben, ich habe sie direkt auf die Arbeitsfläche ohne Untergrund gesetzt.

 

 

mawue

post-4213-0-26659700-1392580144_thumb.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das * deltaTime ist eine wirklich ungute Idee beim Setzen der Geschwindigkeit.

Ansonsten ist die Lösung gut, man muss nur im Inspektor am Speed-Wert rumschrauben.

 

Danke, das war es tatsächlich. Jetzt funktionieren auch beide angegebenen Methodenvon Silveryard!!!.

 

Jetzt muss ich noch eine Dummy Frage stellen: ich habe an den Seitenrändern die Abprallfunktion Bouncy eingestellt, das funktioniert jetzt aber nicht mehr. Die Kugel weigert sich abzuprallen und will immer weiter in die gleiche Richtung. Wie muss ich jetzt darauf reagieren??

 

Sorry und danke vorab

mawue

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie wäre es damit:

public float speed = 1;

void Update ()
{
 rigidbody.velocity = rigidbody.velocity.normalized * speed;
}

Ich weiß nicht genau was das mit .x da oben soll...

 

Das geht bei mir nicht richtig, er kriecht da immer mit der gleichen Geschwindigkeit dahin....egal, wie hoch die Speedvariable ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mir fällt auch gerade auf, dass da FixedUpdate stehen sollte - daran sollte es allerdings auch nicht liegen.

Was hast du denn noch für andere Scripts, die mit dem betroffenen Rigidbody arbeiten?

 

Hurra das wars tatsächlich:

 

Der Code funkt jetzt mit:

 

public float speed = 5.0f;
void Start () {

 rigidbody.velocity = Vector3.right;
}
void FixedUpdate () {

 rigidbody.velocity = rigidbody.velocity.normalized*speed;
}

 

Das letzte Problem das ich noch habe (ich hoff ich bin nicht unverschämt): Die Pong-Kugel prallt jetzt einfach nur hin und her. Wie kann ich jetzt einbauen, dass sie mit jeder Berührung den Rückprallwinkel ändert?

 

Danke ein letzesmal

Mawue

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aaah, sorry, hab dich falsch verstanden (dabei hast du dich eigentlich klar ausgedrückt :) )

Bouncyness macht dein Objekt flummiartig, und da gilt ja immer Einfallwinkel = Ausfallwinkel.

Wenn du nicht deinen Pongschläger irgendwie konvex machen willst, müssen wir scripten :)

 

Wie genau möchtest du es haben?

  1. Zufälliges Abprallen (vermutlich nicht)
  2. Abprallwinkel in Abhängigkeit dazu, an welcher Stelle des Schlägers der Ball getroffen hat (ich glaube, das wäre Pong-Standard)
  3. Abrprallwinkel als Mischung aus "Einfallwinkel = Ausfallwinkel" und "wo der Schläger getroffen wurde"

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...