如何移动角色物理当地亚马逊木材厂

问题描述 投票:1回答:1

我在局部空间移动角色物理胶囊时遇到了一些问题。无论我给它什么轮换,它仍然相对于世界空间而言。我附加了一个网格组件,一个角色物理组件,一个带有输入的输入组件,以及一个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

我想知道在当地空间移动它的最佳方法是什么。

lua game-engine
1个回答
1
投票

如果您想在本地空间中移动角色,则需要根据角色的方向计算角色。在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);
© www.soinside.com 2019 - 2024. All rights reserved.