Укажите RigidBody, чтобы смотреть в направлении (LookAt) - PullRequest
1 голос
/ 26 мая 2019

В Godot у меня есть RigidBody, который я хотел бы повернуть в трехмерном пространстве, чтобы оно указывало на определенное направление.В значительной степени LookAt.Я нашел этот урок , и я написал ниже на его основе.

Что-то меня немного смущает, так как я не уверен, почему меня беспокоит только ось х вrotationAngle - должен ли я каким-то образом реализовывать и другие?

public override void _IntegrateForces(PhysicsDirectBodyState state)
{
    // Push RigidBody in direction that it's facing
    Vector3 forwardForce = GetForwardForce();
    this.ApplyCentralImpulse(forwardForce);

    // Turn RigidBody to point in direction of world origin
    var targetPosition = Vector3.Zero;
    var currentDirection = -this.Transform.basis.z;
    var currentDistanceFromTarget = this.Translation.DistanceSquaredTo(targetPosition);

    GD.Print(currentDistanceFromTarget + " " + currentDirection);

    if(currentDistanceFromTarget > 50)
    {
        var targetDir = (targetPosition - this.Transform.origin).Normalized();

        var rotationAngle = Mathf.Acos(currentDirection.x) - Mathf.Acos(targetDir.x); // Why only x?

        var angularVelocity = Vector3.Up * (rotationAngle / state.GetStep());

        state.SetAngularVelocity(angularVelocity);
    }
}

Это будет работать до определенного момента - если новый currentDirection соответствует положительной оси Z, то он просто продолжается втаким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...