・前回までで、ピックアップ物(電池)を回収出来るようになりました。
・今回は、電池を回収することで、Characterのパワーが上がるような処理を追加していきます。
※電池のパワー値を、キャラクターのパワー値に加算するだけの単純な処理。
〇電池のパワー変数(BatteryPower)
BatteryPickup.h
protected:
//電池がキャラクターに与えるパワー量をセットする
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Power", meta = (BlueprintProtected = "true"))
float BatteryPower;
※完成形
・この変数(BatteryPower)はprotected指定なので、他のC++クラスからは変更できず、BatteryPickupクラスを継承している場合は変更が出来る。
一方、この変数を変更できるブループリントがBatteryPickupを継承するブループリントだけであるようにするためには、この変数をprotectするためのフラグがブループリントでは必要となるので、次のように指定する。meta = (BlueprintProtected = "true"
〇電池のパワー変数のアクセサ関数
BatteryPickup.h
//電池のパワーレベルにアクセスするpublicな関数
float GetPower();
※完成形
・Characterなど他のクラスからBatteryPowerの値が分かるようにするためにアクセサ関数を作る。
・BPからGetPower関数を呼び出すことが出来るようにUFUNCTIONマクロで指定することもできるが、今回はコードでアクセスすることにしたので、UFUNCTIONは使わない。
〇電池パワーの設定と、アクセサ関数の定義
BatteryPickup.cpp
BatteryPower = 150.0f; //バッテリーパワー値
※完成形
・コンストラクタで、BatteryPowerの初期値設定。
・アクセサ関数GetPowerの定義
〇ビルド
・エラーがなければ「UEエディタ」へ移動
・Battery_BPを開いて、先程追加した「新規変数:BatteryPower」を確認する。
・マイブループリントにある「ButteryPower」変数を選択して、「詳細」>「デフォルト値」に「150.0」が設定されていればOK。編集も可(EditAnywhere)。
※フルブループリントエディタで、「クラスのデフォルト」から「ButteryPower」変数を確認することも出来る。
〇キャラクターパワーの初期値と、現在のパワーレベル変数
BatteryCollectorCharacter.h
protected:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Power",meta = (BlueprintProtected = "ture"))
float InitialPower; //キャラクターパワーの初期値
private:
//キャラクターの現在のパワー
UPROPERTY(VisibleAnywhere, Category = "Power")
float CharacterPower;
※完成形
・InitialPowerをprotected指定にし、派生クラスまたは派生BPクラスで使用出来るようにする。
・CharacterPower・・・現在のパワーレベルは、このクラスでしか変更させない。
〇開始時のパワー値設定(コンストラクタの一番下で)
BatteryCollectorCharacter.cpp
//キャラクターのためのベースとなるパワーレベルの値をセットする
InitialPower = 2000.0f;
CharacterPower = InitialPower;
※完成形
・電池のパワーは150~200くらいなので、電池は沢山集める必要がある。
・パワーは徐々に漏れるので、10個拾ってもパワーは倍にはならない。
・キャラクターが生成された時点でのCharacterPowerのレベルをInitialPowerのレベルにする。
〇アクセサ(ゲッター)関数とパワー更新関数の宣言
BatteryCollectorCharacter.h
UFUNCTION(BlueprintPure, Category = "Power")
float GetInitialPower();
UFUNCTION(BlueprintPure, Category = "Power")
float GetCurrentPower();
UFUNCTION(BlueprintCallable, Category = "Power")
void UpdatePower(float PowerChange);
※完成形
・BlueprintPure:ノードに実行ピンは付かない。値を返すだけ。
・UpdatePower:キャラクターのパワーを更新する関数
・UpdatePower関数の引数「PowerChange」は正の数、負の数どちらにもなる。
・BlueprintCallable:この関数をBPから呼び出す
〇アクセサ関数とパワー更新関数の定義
BatteryCollectorCharacter.cpp
〇ビルド
・エラーがなければ「UEエディタ」へ移動
〇キャラクターのInitialPowerと、CharacterPowerを確認する
・ThirdPersonCharacterを開く。
※マウスオーバーで、親クラスが「BatteryCollectorCharacter」であることが確認できる。
・「クラスのデフォルト」をクリック>項目が多いので、「power」で絞り込む。
・InitialPowerとCharacterPowerが確認出来ればOK。
※InitialPowerは、UPROPERTY(EditAnywhere)指定をしたので変更できる。
CharacterPowerは、UPROPERTY(VisibleAnywhere)指定をしたので変更できない。(見るだけ)
・今回は電池を回収することでCharacterのパワーが上がるような処理(UpdatePower関数)を追加しました。
・次回は、UpdatePower関数を使って、キャラクターからパワーをドレイン(漏れ)させたり、パワーアップをさせていきます。
以上、お疲れ様でした。