【UnrealEngine】C++でキャラに体力を設定しよう!
C++でプレイヤーキャラクターにHPを持たせてみようと思います。
キャラクターのC++を開き、まずは使用する変数と関数を記述していきましょう。
◆変数の定義
Health:現在のHP
MaxHealth:最大HP
◆関数の定義
TakeDamageValue:ダメージ値
Heal:回復値

//体力関係
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Status")
float Health = 100.f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Status")
float MaxHealth = 100.f;
UFUNCTION(BlueprintCallable)
void TakeDamageValue(float Damage);
UFUNCTION(BlueprintCallable)
void Heal(float Value);
ひとまず初期値と関数が作れたらソースファイルに移動してダメージ処理から記述していきましょう。
Clampを使っているので最大値、もしくは最小値(0.f)の中に体力値は留まります。
UE_LOG・・・
こちらのコード部分については省略しても大丈夫です。あとで別のデバッグコードを書くので。

ダメージ処理が記述できたら、回復処理を書いていきましょう。
これでそれぞれの関数を呼び出すことでキャラクターのHPを上下させることができるようになります。

void AStudyProjectCharacter::TakeDamageValue(float Damage)
{
Health -= Damage;
Health = FMath::Clamp(
Health,
0.f,
MaxHealth
);
UE_LOG(LogTemp, Warning, TEXT("Health : %f"), Health);
}
void AStudyProjectCharacter::Heal(float Value)
{
Health += Value;
Health = FMath::Clamp(
Health,
0.f,
MaxHealth
);
UE_LOG(LogTemp, Warning, TEXT("Heal : %f"), Health);
}
関数を呼び出していきたいのですが、別のアクターを作成するのではなく、今回は、マウスの右クリックと左クリックで上下させてみようと思います。
ヘッダーファイルの少し上のあたりに、インプットアクションを定義しているコードの集まりがあるので、そのprotectedの1番下から書いていきましょう。

UPROPERTY(EditAnywhere, Category="input")
UInputAction* LeftClick;
UPROPERTY(EditAnyWhere, Category="input")
UInputAction* RightClick;
次は関数名だけひとまず作ります
◆コード
void LeftClickAction();
void RightClickAction();

さきほど作成した関数の中に処理を記述していきます。
コードの内容としては、回復とダメージの関数を呼び出して指定したfloat値を流し処理を実行させます。そうすることでHPの値を上下させることができます。

ここでコードの記述は最後です。
画像を参考にコードを追加してください。

EnhancedInputComponent->BindAction(LeftClick, ETriggerEvent::Started, this, &AStudyProjectCharacter::LeftClickAction);
EnhancedInputComponent->BindAction(RightClick, ETriggerEvent::Started, this, &AStudyProjectCharacter::RightClickAction);
ここまでできたら、UnrealEngineに戻ってひとまずコンパイルしましょう。
そしたら右クリックと左クリック用のインプットアクションをそれぞれ作成してプレイヤーキャラクターに設定します。インプットマッピングコンテキストにもですね。



ゲームをプレイして確認してみましょう。
右クリックをすることにより体力が減りますが0以下にはなりませんね。

左クリックをすると先ほどとは逆に30ずつ増加し100を超えることはありません。

といことで今回もお疲れさまでした。これにはC++でのHP設定は以上になりますね。
またどこかでお会いしましょう!
YouTubeチャンネルもやってます
