- игроки перемещаются на свою позицию < /li>
Как только игроки находятся в позиции, один из них снимает начало и передает мяч другому игроку за ними < /li>
Игрок - персонаж 3D с областью 3d вокруг ног. Мяч попадает в область, и идея заключается в том, что он «придерживается» игрока в точной позиции, он входит в область 3d. Перед игроком. Я имел наполовину ожидал, что физика не была полной, поэтому она сдвигалась, но таймер сна сбрасывает эту теорию - я думаю. src = "https://i.sstatic.net/v8w5myao.png"/>
Gif, показывающий мяч "Shift", как только игрок движется. Пожалуйста, просмотрите на Imgur: https://imgur.com/drszstz
Код: Выделить всё
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>
И именно так игрок должен двигаться (целевая позиция жестко кодируется в вектор3 (-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>
Так что я здесь делаю не так? Я просто хочу, чтобы этот мяч оставался в положении, который он входит в игрока, когда этот игрок движется вперед или вращается. Теперь, когда я запускаю игру и пытаюсь продвинуть игрока вперед, игра сбивается с ошибкой переполнения стека: < /p>
Exception of type 'System.StackOverflowException' was thrown.
edit 2
Вторая проблема, с которой я столкнулся, была простая рекурсия, я не ценил, что введенный метод будет вызван неоднократно. Это заставило родителя удалить и добавить в бесконечную петлю, вызывая исключение переполнения стека. Мой игрок теперь счастливо движется вперед с мячом в правильном положении!
Подробнее здесь: https://stackoverflow.com/questions/794 ... -to-parent