本文主要是介绍04uec++多人游戏【武器弹道开发】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
定义一个函数,实现跟踪准星
UFUNCTION(BlueprintCallable, Category = "Weapon")void Fire();
导入头文件
#include "Engine/World.h"
#include "DrawDebugHelpers.h"
定义方法
void ASWeapen::Fire()
{//创建一个撞击句柄,用来获取弹道相关信息FHitResult Hit;//弹道的起点,我们设置为角色眼睛的位置AActor * MyOwner = GetOwner();if (MyOwner){FVector EyeLocation;FRotator EyeRotator;//得到眼睛的位置和角度MyOwner->GetActorEyesViewPoint(EyeLocation,EyeRotator);//弹道的终点就是起点+方向*10000FVector TraceEnd = EyeLocation + (EyeRotator.Vector() * 1000);//设置碰撞通道为可见性通道FCollisionQueryParams QueryParams;//让射线忽略玩家和枪QueryParams.AddIgnoredActor(MyOwner);QueryParams.AddIgnoredActor(this);//符合追踪设为true,可以让射击更加精准QueryParams.bTraceComplex = true;//在创建一个单轨迹线来计算弹道if (GetWorld()->LineTraceSingleByChannel(Hit, EyeLocation, TraceEnd, ECC_Visibility, QueryParams)){}DrawDebugLine(GetWorld(), EyeLocation, TraceEnd, FColor::Red, false, 1, 0, 1);}}
将自身赋值到owner
将生成的枪actor变成变量
按鼠标左键调用rifle变量的方法
此时效果
现在我们进一步优化,我们希望弹道出发点是从摄像机开始
所以我们要覆写相关函数
眼睛高度的含义就是箭头上方,距离64的位置
我们现在在角色类中覆写GetPawnViewLocation函数
virtual FVector GetPawnViewLocation() const override;
定义一下函数
FVector ASCharacter::GetPawnViewLocation() const
{//如果有相机就得到摄像机的位置if (CameraComp){return CameraComp->GetComponentLocation();}//如果没有相机就用父类的方法return Super::GetPawnViewLocation();
}
效果
这篇关于04uec++多人游戏【武器弹道开发】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!