SPARK-inc / SPCRJointDynamicsUE4

布風骨物理エンジン
MIT License
365 stars 73 forks source link

DebugDrawのクラッシュの修正方法 #15

Open monguri opened 1 year ago

monguri commented 1 year ago

SurfaceCollisionレベルで再現させやすいのですが、DebugDraw系の関数でクラッシュします。 これは、DrawDebugHelpers.cpp/hのDebugDraw系の関数がスレッドセーフに作られてないためです。

    FFunctionGraphTask::CreateAndDispatchWhenReady(
        [=]() {
            ::DrawDebugPoint(World, PositionWS, Size, Color, false, 0.0f, ESceneDepthPriorityGroup::SDPG_Foreground);
        },
        TStatId(), nullptr, ENamedThreads::GameThread

のようにしてゲームスレッドで実行するようにすればクラッシュしなくなります。

あるいは、AnimationBlueprintEditorのビューポートでのみデバッグ表示できればいいのなら、 AnimDynamicsノードなどのUEのノードでよくやられているように FAnimInstanceProxyのAnimDrawDebugXxx()関数を使うことができます。