pafuhana1213/KawaiiPhysics

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

monguri opened this issue · 1 comments

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による分岐をすれば解決すると思います。

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

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