UEC++ 虚幻5第三人称射击游戏(二)
派生榴弹类武器
- 新建一个继承自
Weapon
的子类作为派生榴弹类武器
- 将
Weapon
类中的Fire
函数添加virtual
关键字变为虚函数让榴弹类继承重写
- 在
ProjectileWeapon
中重写Fire
函数,新建生成投射物的模版变量
Fire
函数重写逻辑
- 代码
//生成的投射物 UPROPERTY(EditAnywhere,BlueprintReadOnly,Category = "ProjectileWeapon") TSubclassOf ProjectileClass; //-------------------------------------------------------------------------------------------------- void AProjectileWeapon::Fire() { AActor* MyOwner = GetOwner(); if (MyOwner) { FVector EyeLocation; FRotator EyeRotation; MyOwner->GetActorEyesViewPoint(EyeLocation, EyeRotation); FActorSpawnParameters SpawnParams; //设置投射物生成参数:即使生成位置有碰撞,也要强行生成投射物,不进行碰撞检测处理 SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; //获取枪口位置 FVector MuzzleLocation = SkeletalComponent->GetSocketLocation(MuzzleSocketName); //生成并发射投射物 GetWorld()->SpawnActor(ProjectileClass, MuzzleLocation, EyeRotation, SpawnParams); } }
派生类榴弹武器
- 将派生的榴弹类创建蓝图,网格模型添加上去
- 将网格模型里面的插槽名字改为我们
C++
中定义的名字
- 创建一个
Actor
蓝图作为子弹,添加一个发射器与一个球体网格,发射器初始速度与最大速度设置为2000,开启抛物体反弹效果。球体网格开启物理模拟。
- 将榴弹武器蓝图生成发射物暴露在蓝图中的生成物子弹加入在其中
- 在角色蓝图中将实例的武器类型换为榴弹炮武器,然后把实例的对象换为父类武器,这样就方便我们测试调用函数时的问题
- 在子弹蓝图里面添加一个爆炸事件,然后抒写逻辑
- 在
BeginPlay
处调用该逻辑事件
- 运行结果
阻击的变焦推进效果
- 在角色类中新建四个变量,一个用来是否开启变焦推进,一个用来表示变焦的视野范围,一个用来获取默认的视野范围,一个表示进行线性插值到新视角的速率
- 新建一个右击的操作输入
- 新建右击操作的处理函数
- 给移动的新视角和移动插值的速率赋值
- 在
BeginPlay
中获取默认视角范围
- 右击绑定函数逻辑与设置新视角线性插值范围逻辑
- 绑定输入操作
- 引擎中新建一个操作输入,然后添加到映射中
- 绑定操作到角色蓝图上
- 运行结果
创建控制台变量
- 在武器类中新建一个静态变量作为控制控制台的变量,控制是否射击画线,新建自动管理控制台变量类
- FAutoConsoleVariableRef :用于自动管理控制台变量的一个类
FAutoConsoleVariableRef ACVRDebugWeaponDrawLine(TEXT("COOP.DebugWeapons"), DebugWeaponDrawLine,TEXT