UE5でFPSゲーム制作 Part17-ADS
ADSとはAim DOwn Sightの略で、銃をのぞき込んで撃つことです。
ADS
PlayerCharacter.h
ADSに関する関数を作成していきます。bIsAiming、IsAiming、SetAiming、FOV、GetFOVを作成します。
PlayerCharacter.cpp
入力アクションから新しくIA_RightActionをDigitalで作成しIMC_FPSに登録します。TriggersはPressedとReleasedに設定します。
新しくGameplayEffectを作成し、GE_MaxSpeedAdsと名付けます。
GE_MaxSpeedAds
ADS中は移動速度を下げたいのでMaxSpeedを200に設定します。
次に新しいGameplay Abilityを作成しGA_Adsと名付けます。
GA_Ads
Gameplay Abilityがアクティベートされたら、GameEffectとPlayerCharacterのSet Aiming関数を呼びます。Ability.Action.Ads.Cancelタグが呼ばれるとEnd Abilityが呼ばれます。
ADS中はダッシュができないようにしたいので、Cancel Abilities with TagとBlock Abilities with TagにAbility.Action.Dashを設定しておきます。
WeaponBaseクラスにADS時のズーム倍率を変数として作成します。
WeaponBase.h
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
float ZoomScale;
UFUNCTION(BlueprintPure, Category = "Weapon")
float GetZoomScale();
WeaponBase.cpp
ZoomScale = 0.95f;
float AWeaponBase::GetZoomScale()
{
return ZoomScale;
}
BP_PlayerCharacter
GA_AdsをBP_PlayerCharacterに登録したら、IA_RightActionからアビリティを呼びます。アビリティが成功ならSet Aiming関数が呼ばれるはずです。
新しくタイムラインノードを作成しT_Adsと名付けます。キー補間はお好みで設定します。値は0.0~1.0に設定します。
Set Field Of View関数は視野角を変更する変数になります。この視野角をタイムラインノードを通して小さくすることでズームを表現することになります。例えば2倍のズームならCurrent WeaponのZoom Scaleは0.5fになります。
腰だめの時は弾が拡散し、ADS時は正面に飛ぶように変更したいと思います。
BP_WeaponBase
FireAction関数のLineTraceByChannel以降を関数に折りたたみます。Line Trace by Enemyと名前とつけます。
AsPlayerCharacterがIsAiming状態であるかどうかを判断し、IsAimingがFalseなら拡散するようにします。
Random Unit Vector in Cone in Degreesは比率に応じてランダムに拡散させることができます。BP_Weaponに作成したFire Spread変数で拡散率を変更できます。
これでADSが完成しました。
ここまででプレイヤーに必要なアクションはだいたい完成したと思います。ゲームによってはグレネードと回復アイテム、弾薬パックなどが必要になってくるでしょうか。
次はUIを作成していきたいと思います。