0

基本的なブレイクアウト ゲームを作成し、次のコードを使用して、カプセル コライダー 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と表示

そして、ゲームを再起動するまで、セッションの残りの衝突もこのように間違っています。

ここで何がうまくいかないのかわかりません。

また、衝突側を検出するより良い方法があれば教えてください。

4

1 に答える 1