Diese Stelle sieht verdächtig aus:
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//Knockback
public IEnumerator Knockback(float knockDur, float knockbackPwr, Vector3 knockbackDir)
{
float timer = 0;
while(knockDur > timer)
{
timer += Time.deltaTime;
rb2d.AddForce(new Vector3(knockbackDir.x * -100, knockbackDir.y * knockbackPwr, transform.position.z));
}
yield return 0;
}
|
Die Whileschleife läuft einfach x mal durch (wobei x = knockDur / Time.deltaTime entspricht) und macht jedes mal ein AddForce, die Kräfte werden also einfach x mal drauf gerechnet. Das sorgt für eine hohe Velocity, die im nächsten FixedUpdate deine maxVelocity übersteigt und dann heruntergesetzt wird. Der Spieler bewegt sich also bis zum nächsten FixedUpdate sehr schnell und wird ein Stück "teleportiert", bevor er verlangsamt wird.
Dort sollte vermutlich zumindest ein "yield return null;" in der Schleife stehen. Aber selbst dann werden die Kräfte einfach mehrmals draufgerechnet, nur über mehrere Frames verteilt.