【UE4】【C++】增加一个反向力防止物体侧滑

13 篇文章 1 订阅

侧滑:即物体沿着红线移动 而不是头朝着红线移动  

而我们要做到的便是将红线方向的力分解成垂直和水平方向的力,通过添加水平方向反向力(绿色)来让物件朝着垂直方向移动

而要求出反向力(绿色)的大小,需要用到点积(DotProduct)(即给出一个方向向量,便可以求出待分解力在此方向上的力)

eg:

void UTankTrack::ApplySideForce() {
	auto RootComponent = Cast<UPrimitiveComponent>(GetOwner()->GetRootComponent());    //找到组件
	//找到坦克现在的移动方向和速度
	auto TankVelocity = RootComponent->GetComponentVelocity();
	auto RightVector = RootComponent->GetRightVector();
	//找到坦克侧滑的速度
	auto SideSpeed = FVector::DotProduct(RightVector, TankVelocity);	//向量点乘,返回float值
	//找到坦克侧滑对应的加速度
	float DeltaTime = GetWorld()->GetDeltaSeconds();
	auto SideSpeedAcceleration = SideSpeed / DeltaTime * GetRightVector()*-1;    //通过RihgtVector的-1值来加向左的力
	//F=ma
	auto CorrectForce = (RootComponent->GetMass()*SideSpeedAcceleration)/2;	//一个履带一个CorrectForce(有Left和Right在Tank上)
	RootComponent->AddForce(CorrectForce);
}

PS:如果红线是左边,SideSpeed返回的就是负值,在SideSpeedAcceleration中还是会算出向右的反向力


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值