UE5 Animation BPでThread Safeのエラーについて

Lyra Starter Gameを参考にして「GetMainAnimBPThreadSafe」を作ってみましたがエラーが出ます。

エラー内容
Get Main Anim BPThread Safe Accessing an object reference is not thread-safe

原因がわかる方はいますでしょうか?

実行環境:

  • Mac 12 Monterey

作業環境:

  • Unreal Engine 5.0


Uploading: スクリーンショット 2022-04-21 21.28.16.png…

1 Like

Pureノード(関数)はThreadSafeではないからです

Lyraの実装をよく見てもらえればわかりますが、 GetMainAnimBPThreadSafePropertyAccess ノードを通して使用しています

AnimBPのAnimGraphの実行はマルチスレッドで行われるため、関数やプロパティへのアクセスはThreadSafeである必要があります
PropertyAccess ノードはその参照先を解決し、ThreadSafeであることを確認し保証する機能を持つようです

ご連絡ありがとうございます!
ただThreadSafeにしようとしてもエラーが出てしまいます。
やり方が違うのでしょうか?もしくはC++が必要なのでしょうか?

どうも使い方が違うように見えますね
Pureノードは元の形でよく、それを使って値(もとの画像で言うWorldVelocity2D)を PropertyAccess で取得するのが良いのでは?と思います

調べてみましたが、ThreadSafe扱いにしたければ、関数側を明示的にThreadSafeとして宣言する必要があるようです
このオプションでThreadSafe宣言はできますが、実際にThreadSafeであるかどうかは自身で保証する必要があります

お返事ありがとうございます!
ThreadSafeのチェックは入れているのですが、できないですね。Cast以外は問題なくできるのですが、CastのThreadSafeがどうも無理なんですね。でもLyraではそれが可能なんですね。不思議ですが…。やはりC++の設定が必要な気もします…

もしかしてCastに使う GetOwningComponent.GetAnimInstance をThreadSafeにしたいということです?
それはできないです
ThreadSafeで取れるのは値型の変数か、ThreadSafeなPure関数の戻り値、あるいはそこから取る値型の変数です
Lyraでも GetMainAnimBPThreadSafe の中で GetOwningComponent.GetAnimInstance を取得しているところはAuto(表示はPre-Event Graph)になっていますよね

もしその部分をThreadSafeとして扱いたいとなるとエンジン側に手をいれることになります
おすすめはしません

1 Like

すいません、横から失礼します、
BlueprintThreadSafe関数にて、いくつかの関数は使用できないになってます、
例えばカーブから値を取得の
GetVectorValue
GetFloatValue
関数
それと、SceneComponentからの
GetSocketTransform
とか

これらの関数をBlueprintThreadSafeにて使用したい場合はどうすればいいですか?