・前回は、電池を拾った時に、UpdatePower関数を使ってキャラクターのパワーを上昇させました。
・今回は、GameModeからUpdatePower関数を呼び出して、キャラクターのパワーを時間経過と共に減少させていきます。
〇ゲームモードで、減衰率を設定する
BatteryCollectorGameMode.h
protected:
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Power", meta = (BlueprintProctected = "ture"))
float DecayRate; //減衰率(キャラクターがパワーを失う速度)
※完成形
・DecayRate:キャラクターのパワーが時間と共に弱くなっていく時の速度。
・protected:このGameModeクラスまたは、その派生クラスにしか変更できないようにする。
・CharacterクラスなどではなくGameModeでパワーを減衰される理由は、GameModeが(概念的に)ゲームのルールを定めるものであるため。
・ルールの1つとしてキャラクターがパワーを失う速度があるが、例えば、このレベルにイージー/ハードモードがあるとする。その場合、GameModeでDecayRate値の高低を調整するようにする。(ゲームのルールで処理させるようにする)
・EditDefaultsOnly:BPのクラスエディタで表示と編集ができる。このクラスのインスタンスでプロパティを変更することは出来ない。
・BlueprintReadWrite:ブループリントでこのDecayRate値を変更できるようにする。
〇コンストラクタで初期値設定
BatteryCollectorGameMode.cpp
DecayRate = 0.01f; //この値は、BPのクラスエディタで調整可
※完成形
〇キャラクターのパワーを減らす(毎フレーム)
BatteryCollectorGameMode.h
virtual void Tick(float DeltaTime) override;
※完成形
・Tick()をオーバーライドする。(関数をオーバーライドする場合は、シグネチャを一致させること。)
・Tick関数のデルタタイム(前回Tickからの経過秒数)で、電池の減衰がフレームレートに依存しないようにする。(Tick()はあらゆるActorに含まれている)
〇Tickの定義
BatteryCollectorGameMode.cpp
・コンストラクタ
PrimaryActorTick.bCanEverTick = true;
・Tick関数
Super::Tick(DeltaTime);
※完成形
・Superで親のTickを呼び出す。
〇GetPlayerPawn()を使って、Characterにアクセスする
BatteryCollectorGameMode.cpp
#include "Kismet/GameplayStatics.h" //追加:GetPlayerPawn()用
ABatteryCollectorCharacter* MyCharacter =
Cast<ABatteryCollectorCharacter>(UGameplayStatics::GetPlayerPawn(this, 0));
※完成形
・Characterにアクセスする。
・Castを使っているのは、DefaultPawnなどを使っている場合があり、Character型なのか確かめなければならないため。それによって、パワー関数にアクセスできるようになる。
・GetPlayerPawnの第2引数は、PlayerIndexで、プレイヤーが1人の時、インデックスはゼロ。
〇Castに成功したら、DelataTimeを考慮に入れて、パワーを減らす
BatteryCollectorGameMode.cpp
if (MyCharacter)
{
if (MyCharacter->GetCurrentPower() > 0)
{
//パワーを減らす
MyCharacter->UpdatePower(
-DeltaTime * DecayRate * (MyCharacter->GetInitialPower()));
}
}
※完成形
・UpdatePower関数は、キャラクターのパワーの変化量を引数に取り、InitialPower変数の値を毎秒何%か減らす。
・パワーを減らすのは、キャラクターのパワーがプラスの時だけ。(GetCurrentPower関数を使う)
〇ビルド
・エラーがなければ「UEエディタ」でテストプレイ。
〇CharacterPower値の確認
・ワールドアウトライナーで、「BP_ThirdPersonCharacter」を選択。
・CharacterPowerが減り続けていればOK。
・電池を拾うと、パワーが増える(実装済み)ことも確認しておく。
・今回は、「パワーアップさせる力」と、「パワーダウンさせる力」の2つが実装出来ました。
・次回は、パワー値によってキャラクターの色を変えることで、詳細タブを見なくても、パワーの増減が確認出来るようにします。
以上、お疲れ様でした。