c++でアクタークラスの派生クラスを作る。
レベル上に派生クラスのキャラAとキャラBを配置する。
キャラAとキャラBに共通の変数を持たせたい。(キャラAのHPとキャラBのHPが共有されているようなイメージ)
以上のようなことをやりたく、クラスにスタティック変数を作りました。
すると、ビルドは通るのですがエディタが起動しません。
ネットで色々調べたのですが、スタティック変数を使っているサイトは見つかりませんでした。
そこで質問なのですが
もしかしてスタティック変数は使えないのでしょうか?
また、使えないと仮定して代替案を考えてみました。
GameInstanceの派生クラスを作り、そこに変数を持たせキャラAとキャラBがその変数を参照するという方法です。
ただ、この場合ですと関係ないクラスからも変数を参照できてしまうのであまりいい方法ではないと思います。
スタティック変数が使えなかったとして、何かいい方法はないでしょうか?
PierPop
(Pier Pop)
2
仰るとおり、GameInstanceを共有ストレージとして活用するのはあまり効率的ではないと思いますし、多くの参照を取るため設計として良くない方法かと思います。
以下のコードが参考になるかと思います。変数自体はC++と同じようにstaticで定義します。
staticな変数はUPROPERTYで指定できないため、setter/getter関数を介してBlueprintから参照できます。
.h file
UCLASS()
class ANSWERHUB_API AMyActor : public AActor
{
GENERATED_BODY()
protected:
static int32 variable;
UFUNCTION(BlueprintCallable)
void SetVariable(int32 value);
UFUNCTION(BlueprintPure)
int32 GetVariable();
};
.cpp file
int32 AMyActor::variable = 0;
void AMyActor::SetVariable(int32 value)
{
variable = value;
}
int32 AMyActor::GetVariable()
{
return variable;
}
私はこのコードを基底クラスとした2つのActorをレベル上に配置し、以下の構成でBP_Actor1とBP_Actor2から同じ出力が得られることを確認しました。このコードは有効であるかと思います。
ご確認ください。