发射射线检测前方所见物体
//开火
void ASweapon::Fire()
{
//获取该Actor所有者
AActor* MyOwner = GetOwner();
if(MyOwner)
{
FHitResult OutHit;
//射线发射的起始位置
FVector StartLinePos;
//眼睛的旋转体
FRotator EyeRotate;
//获得玩家眼睛的位置 把值传给 StartLinePos 和 EyeRotate
MyOwner->GetActorEyesViewPoint(StartLinePos,EyeRotate);
//射线的结束位置 EyeRotate.Vector()眼睛旋转的方向
FVector EndLinePos = StartLinePos + EyeRotate.Vector() * 10000;
//添加射线忽略的游戏物体
FCollisionQueryParams Params;
//忽略拥有者(角色自身)
Params.AddIgnoredActor(MyOwner);
//忽略枪体自身
Params.AddIgnoredActor(this);
//开启射线检测精细度
Params.bTraceComplex = true;
//发射射线检测前方物体 ECC_Visibility检测所见的所有物体
bool IsLineTrace = GetWorld()->LineTraceSingleByChannel(OutHit,StartLinePos,EndLinePos,ECC_Visibility,Params);
if(IsLineTrace)
{
//如果射线射中物体 执行此处
}
//Debug 绘制测试射线 bPersistentLines是否一直显示射线
DrawDebugLine(GetWorld(),StartLinePos,EndLinePos,FColor::Blue,false,1,0,1);
}