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を作成していきたいと思います。