基本的なブレイクアウト ゲームを作成し、次のコードを使用して、カプセル コライダー 2d とサークル コライダー 2d の間の衝突が上部で発生したかどうかを検出します。
bool FindIfTopCol(Collision2D other)
{
print("collider.y " + collidersize.y / 2);
ContactPoint2D[] contacts = other.contacts;
if (contacts[0].point.y - transform.position.y > collidersize.y / 2)
{
print("top " + (contacts[0].point.y - transform.position.y));
return true;
}
else
{
print("not top " + (contacts[0].point.y - transform.position.y));
return false;
}
}
ほとんどの場合、検出は正常に機能していましたが、ゲームをしばらく実行した後、特にサークル コライダーが非トップ コリジョンになった後、メソッドはすべてのコリジョンを非トップ コリジョンとして返すようです。
問題を把握するために、印刷ステートメントを配置しました。これが結果です。
衝突 0.2610874 トップ 0.2885695
衝突 0.2610874 頂点ではない 0.2552783最初の実際の非頂点衝突
collidery 0.2610874 not top 0.2542975上の衝突ですが、not top と表示されます
collidery 0.2610874 not top 0.2558844トップコリジョンだが、not topと表示
そして、ゲームを再起動するまで、セッションの残りの衝突もこのように間違っています。
ここで何がうまくいかないのかわかりません。
また、衝突側を検出するより良い方法があれば教えてください。