Warum hält mein Godot rigidbody3 nicht seine gefrorene Position im Verhältnis zu Eltern?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Warum hält mein Godot rigidbody3 nicht seine gefrorene Position im Verhältnis zu Eltern?

Post by Anonymous »

Ich stelle einen Fußball-/Fußball -Match -Engine in Godot 4.3 als Lernübung zusammen und bin auf ein Problem gestoßen, um einen Ball zu frieren/den Ball an einen der Spieler zu befestigen. Hier ist, was passiert: < /p>
  • Die Spieler bewegen sich zu ihrer Position < /li>
    Sobald die Spieler in Position sind, nimmt der Eins von ihnen den Start ab und gibt den Ball an einen anderen Spieler hinter sich. Der Ball tritt in die Gegend ein und die Idee ist, dass er in der genauen Position "an den Spieler steckt", in die er in den Bereich 3D eindringt. Vor dem Spieler. Ich hatte die Hälfte erwartet, dass die Physik nicht vollständig war, also verschoben sie, aber die Schlaftimer -Rabatte, die diese Theorie - ich glaube. src = "https://i.static.net/v8w5myao.png"/>

    GIF zeigt den Ball "Verschiebung", sobald sich der Spieler bewegt. Bitte sehen Sie sich bei IMGUR an: https://imgur.com/drszstz
Die auf Körper eingegebene Methode sieht so aus:

Code: Select all

public void OnFeetEntered(Node3D body)
{
if(CurrentState == PlayerState.KickingOff || CurrentState == PlayerState.MovingToPosition)
{
return;
}

if (body is Ball ball)
{
HasBall = true;
CurrentState = PlayerState.JustTakenBall;

ball.LinearVelocity = Vector3.Zero;
ball.AngularVelocity = Vector3.Zero;
ball.FreezeMode = RigidBody3D.FreezeModeEnum.Kinematic;
ball.Freeze = true;

ball.GlobalPosition = ball.GlobalPosition;
var localPosition = ToLocal(ball.GlobalPosition);

AddChild(ball);

ball.Position = localPosition;
}
}
< /code>
Und so wird der Spieler angewiesen, sich für Testzwecke zu Vektor3 (-10,0f, 0,252f, -8,0f) zu verschieben (-10,0f, 0,252f, -8,0f): < /p>
private void MoveToTarget(Vector3 targetPosition)
{
Vector3 direction = GlobalPosition.DirectionTo(targetPosition);

float distance = GlobalPosition.DistanceTo(targetPosition);

if (distance > stopThreshold)
{
Velocity = direction * Speed;

MoveAndSlide();
}
else
{
Velocity = Vector3.Zero; // Stop movement

CurrentState = PlayerState.Idle;

Look();
}
}
< /code>
Was mache ich hier falsch? [url=viewtopic.php?t=14917]Ich möchte[/url] nur, dass dieser Ball an der Position bleibt. Er tritt in den Spieler ein, wenn dieser Spieler vorwärts geht oder dreht. Wenn ich nun das Spiel leite und versuche, den Spieler voranzutreiben, stürzt das Spiel mit einem Stack -Überlauffehler ab: < /p>
Exception of type 'System.StackOverflowException' was thrown.
Es gibt keine weiteren Informationen, keine innere Ausnahme oder irgendetwas sehr hilfreich. Ich bin ein bisschen von einem Verlust! Dies führte dazu, dass der Elternteil entfernt und in einer unendlichen Schleife hinzugefügt wurde, wodurch die Ausnahme des Stapelüberlaufs verursacht wurde. Mein Spieler bewegt sich jetzt glücklich mit dem Ball in der richtigen Position!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post