pafuhana1213 / KawaiiPhysics

KawaiiPhysics : Simple fake Physics for UnrealEngine4 & 5
MIT License
1.92k stars 287 forks source link

データアセット由来のLimitがあるときに選択してDeleteキーを押すとクラッシュの可能性があります。 #72

Closed monguri closed 1 year ago

monguri commented 1 year ago

FKawaiiPhysicsEditMode::InputKey()の実装ですが、

        else if (InKey == EKeys::Delete && IsValidSelectCollision())
        {
            switch (SelectCollisionType)
            {
            case ECollisionLimitType::Spherical:
                RuntimeNode->SphericalLimits.RemoveAt(SelectCollisionIndex);
                GraphNode->Node.SphericalLimits.RemoveAt(SelectCollisionIndex);
                break;
            case ECollisionLimitType::Capsule:
                RuntimeNode->CapsuleLimits.RemoveAt(SelectCollisionIndex);
                GraphNode->Node.CapsuleLimits.RemoveAt(SelectCollisionIndex);
                break;
            case ECollisionLimitType::Planar:
                RuntimeNode->PlanarLimits.RemoveAt(SelectCollisionIndex);
                GraphNode->Node.PlanarLimits.RemoveAt(SelectCollisionIndex);
                break;
            case ECollisionLimitType::None: break;
            default: ;
            }
        }

となっていますが、SelectCollisionIsFromDataAsset による分岐をしていないため、 SphericalLimitsDataの方にLimitがあって、そちらを選択してるときにDeleteボタンを押すと 空のSphericalLimitsに対してRemoveAt()が走り、クラッシュする、ということが起きそうです。 こちらでもSelectCollisionIsFromDataAssetによる分岐をすれば解決すると思います。

pafuhana1213 commented 1 year ago

反応が遅くなって申し訳ありません… ご指摘の通りでしたので、SelectCollisionIsFromDataAssetを使った分岐を入れることでクラッシュをしないようにしました! https://github.com/pafuhana1213/KawaiiPhysics/commit/09febed1feca4ff48882cfaa6212fd76c3106a1c

ご報告だけでなく解決の糸口までご共有いただき、本当にありがとうございました!