Jump to content
Unity Insider Forum

Sprung Probleme bei FixedUpdate


Raidenkk

Recommended Posts

EDIT: Ich habe den Post leider zu spät gesehen sorry:

http://forum.unity-c...__fromsearch__1

 

Übrigens sehr gut von Sascha erklärt jetzt hab auch ich es verstanden mit Update und Fixed Update :) grandios!

 

---------------------------------------------------------------------------------------------------------------------------------------------------

 

Guten Abend,

ich habe bemerkt das wenn ich mein Rigidbody in der FixedUpdate eine neue Velocity zuweise das manchmal das Springen nicht funktioniert. Ich habe den Code hier von jemanden aus dem Forum gepostet bekommen und weis jetzt nicht ob es versehentlich ein Fehler von ihn war das man dem Rigidbody die Velocity in der FixedUpdate zuweist. Ich habe es mal in Update ausprobiert und dort scheint es keine Probleme zu geben. Naja wie gesagt ich wollte mich einfach nochmal schlau machen ob ich es so richtig mache oder seine Variante richtiger war. Möchte nichts falsches Lernen und deswegen frag ich einfach mal in den Raum rein :P.

 

// [settings]
public float walkSpeed = 8.5f;
public float jumpPower = 300.0f;
public float punchPower = 750.0f;

// [Variablen]
GroundCheck groundCheck;
Vector3 moveDirection;

// [sTD-Methode]
void Start()
{
 groundCheck = this.transform.FindChild ("GroundCheck").GetComponent<GroundCheck> ();
}

// [sTD-Methode]
void Update()
{
 InputCheck ();
 rigidbody.velocity = moveDirection;
}

// [sTD-Methode]
void FixedUpdate()
{
 //rigidbody.velocity = moveDirection;   <---- Hier war seine Variante 
}

/// <summary>
/// Beschreibung: Ist für die Tastenbefehle zuständig.
/// </summary>
void InputCheck ()
{
 moveDirection = new Vector3(Input.GetAxis("Horizontal") * walkSpeed, rigidbody.velocity.y, 0.0f);
 if(Input.GetButtonDown("Jump") && groundCheck.IsGrounded)
 {
  DoJump();
 }
}

/// <summary>
/// Beschreibung: Lässt den Spieler springen.
/// </summary>
void DoJump()
{
 moveDirection.y += jumpPower;
}

/// <summary>
/// Beschreibung: Stößt den Spieler in die Luft (Z.b bei Lava).
/// </summary>
public void DoPunchUp()
{
 moveDirection.y += punchPower;
}

 

Grüße :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was in meiner Erklärung noch fehlt, ist, dass die Physikengine Bewegung und Kollision nach jedem FixedUpdate berechnet.

Ridigbody-Geschwindigkeiten in Update umzusetzen bringt daher nicht wirklich was. Es können zwei Updates vor einem FixedUpdate kommen, dann berechnest du moveDirection zwei Mal neu und benutzt es nur ein Mal.

Wenn du GetKey bzw. GetButton benutzt, dann kannst du das in FixedUpdate machen, da du immer den Wert aus dem letzten Update hast. Oder anders gesagt: Immer den aktuellsten Wert.

 

Für den Code, den du da haben willst, brauchst du also nicht einmal Update.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...