LoginSignup
4
3

More than 1 year has passed since last update.

[UE4](C++)BlueprintSetterとLevelSequenceと

Posted at

検証UE4: 4.27.1

変数の UPROPERTY の BlueprintSetter での関数指定、UFUNCTION での BlueprintSetter 設定の話になります。
それを LevelSequence(シーケンサー) から使用したときの挙動の注意点です。
まちがってたらごめんなさい。

・BlueprintSetterの参考
[UE4] UE4.17リリースノートピックアップ - 花繁吹き
http://unwitherer.blogspot.com/2017/08/ue4-ue417.html

まとめ

  • LevelSequence で変数UPROPERTYの BlueprintSetter は動作しない
  • LevelSequence からは関数名を「Set+<変数名>」にする事でフックできる
  • BPから、LevelSequenceから、両方取りたい場合はBlueprintSetter指定して、関数名を「Set+<変数名>」と合わせることで出来る
処理方法 BPから値設定 LevelSequenceから値設定
BlueprintSetter使用 ×
関数名「Set+<変数名>」 ×
BlueprintSetter使用+関数名「Set+<変数名>」

ちなみに、
どれも関数はC++のアクセス権を private にしてても呼ばれます。
「Set+<変数名>」にする際、bool型の prefix の "b" は無くて大丈夫です。(変数bool bValue -> 関数SetValue)

BPからのBlueprintSetter

標準的な BlueprintSetter の設定の下記コード

C++.h
    UFUNCTION(BlueprintSetter)
    void SetBPSetterHogeHogeF(float Val);

    UPROPERTY(interp, VisibleAnywhere, BlueprintSetter=SetBPSetterHogeHogeF)
    float BPSetterValF = 0.0f;
C++.cpp
void ASetterTestActor::SetBPSetterHogeHogeF(float Val)
{
    UE_LOG(LogTemp, Log, TEXT("%u %s: SetBPSetterHogeHogeF"), GFrameNumber, *GetName());
}

BPから変数へ設定すると
image.png
問題なく呼ばれています。
image.png

LevelSequenceからのBlueprintSetter

上記を LevelSequence から値を設定するようにしてみます。
image.png
しかし、ログには何も出てきません。
image.png

LevelSequence でのトラックからは BlueprintSetter が動作してくれません。

LevelSequenceからの値設定をフックする方法

フックする方法はあります。
UFUNCTIONでかつ、関数名を Set+<変数名> で用意します。

下記のように記述します。UPROPERTY、UFUNCTIONに BlueprintSetter指定は必要ありません
変数 FuncNameValF に対して、PrefixにSetを付けた SetFuncNameValF 関数

C++.h
    UFUNCTION()
    void SetFuncNameValF(float Val);

    UPROPERTY(interp, VisibleAnywhere)
    float FuncNameValF = 0.0f;
C++.cpp
void ASetterTestActor::SetFuncNameValF(float Val)
{
    UE_LOG(LogTemp, Log, TEXT("%u %s: SetFuncNameValF"), GFrameNumber, *GetName());
}

上記を LevelSequence から値を設定するようにしてみます。
image.png
無事ログが出力されました。
image.png

この場合、Blueprintから設定しても
image.png
呼び出されません。
image.png

BPからLevelSequenceから両方から呼ばれるようにする

どちらの場合でも処理を挟みたい場合は、BlueprintSetterを使用しつつ、関数名をSet+<変数名>で用意します

C++.h
    UFUNCTION(BlueprintSetter)
    void SetAllOKValF(float Val);


    UPROPERTY(interp, VisibleAnywhere, BlueprintSetter=SetAllOKValF)
    float AllOKValF = 0.0f;
C++.cpp
void ASetterTestActor::SetAllOKValF(float Val)
{
    UE_LOG(LogTemp, Log, TEXT("%u %s: SetAllOKValF"), GFrameNumber, *GetName());
}

BPから設定して
image.png
無事ログが出ます。
image.png

LevelSequenceから設定して
image.png
無事ログが出ます。
image.png

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3