我看了一堆类似的问题,我似乎找不到一个特别回答我的问题的问题。我正在编写一个简单的 3d 游戏,我试图让玩家在我的地图上拾取和移动实体。我本质上想要获得一个速度矢量,它将“推动”物理对象远离玩家的眼睛,无论他们在哪里看。这是在另一个游戏中执行此操作的示例(玩家在他的眼前拿着一个椅子实体)。
为此,我找出玩家的眼睛角度,然后从角度获取前向矢量,然后计算对象的速度。这是我的工作代码:
void Player::PickupOtherEntity( Entity& HoldingEntity )
{
QAngle eyeAngles = this->GetPlayerEyeAngles();
Vector3 vecPos = this->GetEyePosition();
Vector3 vecDir = eyeAngles.Forward();
Vector3 holdingEntPos = HoldingEntity.GetLocation();
// update object by holding it a distance away
vecPos.x += vecDir.x * DISTANCE_TO_HOLD;
vecPos.y += vecDir.y * DISTANCE_TO_HOLD;
vecPos.z += vecDir.z * DISTANCE_TO_HOLD;
Vector3 vecVel = vecPos - holdingEntPos;
vecVel = vecVel.Scale(OBJECT_SPEED_TO_MOVE);
// set the entity's velocity as to "push" it to be in front of the player's eyes
// at a distance of DISTANCE_TO_HOLD away
HoldingEntity.SetVelocity(vecVel);
}
这一切都很棒,但我想转换我的数学,以便我可以施加冲动。我不想为对象设置一个全新的速度,而是想在其现有速度上“添加”一些速度。所以假设我有它当前的速度,我需要什么样的数学来“添加”速度?这本质上是一个游戏物理问题。谢谢!