как перемещать физику персонажей локально амазонка - PullRequest
0 голосов
/ 20 февраля 2019

У меня возникли проблемы с перемещением капсулы физики персонажей в локальном пространстве.Независимо от того, какое вращение я даю, оно все равно движется относительно мирового пространства.Я прикрепил к нему компонент сетки, компонент физики персонажей, компонент ввода со своим вводом и скрипт lua.Вот код движения в моем сценарии lua:

function PlayerController:HandleInput(floatValue)
    local currentBusId = InputEventNotificationBus.GetCurrentBusId()

    local forwardSpeed = 0.0
    local sideSpeed = 0.0
    local rotate = 0.0

    local fixedSpeed = self.Properties.Speed * 0.01
    local fixedStrafeSpeed = self.Properties.StrafeSpeed * 0.01

    if(currentBusId == self.forwardBusId) then
        forwardSpeed = floatValue
    end
    if(currentBusId == self.leftBusId) then
        sideSpeed = -floatValue
    end
    if(currentBusId == self.rotateBusId) then
        rotate = floatValue
    end

    PhysicsComponentRequestBus.Event.AddImpulse(self.entityId, Vector3(fixedStrafeSpeed * sideSpeed, fixedSpeed * forwardSpeed, 0.0))
end

Мне было интересно, каким будет лучший способ его перемещения в локальном пространстве.

1 Ответ

0 голосов
/ 27 апреля 2019

Если вы хотите переместить персонажа в локальное пространство, вам нужно будет вычислить его исходя из ориентации вашего персонажа.В C ++ это будет выглядеть так:

AZ::Transform myLocation;
TransformBus::EventResult(myLocation, GetEntityId(), &TransformBus::Events::GetWorldTM);

const auto q = Quaternion::CreateFromTransform(myLocation);
const Vector3 disp = q * AZ::Vector3::CreateAxisY( 1.f );
myLocation.SetTranslation(myLocation.GetTranslation() + disp);
...