Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
579 views
in Technique[技术] by (71.8m points)

c# - how to ignore collision on player object in unity multiplayer(2 player) using mirror or unet(depreciated)

I am creating a multiplayer block-breaker game. I have 2 players spawns with each having 1 ball & 1 paddle. I want the ball of player 1 to not hit the paddle of player 2 & vice versa.

I tried the code below, but it only runs the second time; the first time the player 1 ball hits the paddle of player 2, it doesn't ignore it, but on the second time, it resolves.

private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.IsTouching(this.gameObject.GetComponent<CircleCollider2D>()))
        {
            NetworkIdentity networkIdentity = collision.gameObject.GetComponent<NetworkIdentity>();
            if (networkIdentity != null && collision.gameObject.CompareTag("Paddle"))
            {

                NetworkIdentity playerNetworkIdentity = this.gameObject.GetComponent<NetworkIdentity>();
                Debug.Log("netid" + networkIdentity.connectionToClient.connectionId + "PlayerNetId" + playerNetworkIdentity.connectionToClient.connectionId);
                if (networkIdentity.connectionToClient.connectionId != playerNetworkIdentity.connectionToClient.connectionId)
                {
                    Debug.Log("inside network identity checker in collision");
                    //Physics2D.IgnoreCollision(collision.gameObject.GetComponent<Collider2D>(), GetComponent<Collider2D>());
                    Physics2D.IgnoreCollision(collision.gameObject.GetComponent<Collider2D>(), this.GetComponent<Collider2D>(),true);
                }
            }
        }
}

The specific code Physics2D.IgnoreCollision(collision.gameObject.GetComponent<Collider2D>(), this.GetComponent<Collider2D>(),true); usually doesn't stop the ball hitting the paddle of the other player first time, but works the second time.

Additionally, it would be nice to know if there is a better way to check in place of above code. In the best case scanario, I would be able to specify at the start of the game that all player 1 objects can not collide with player 2, but any other collision can happen.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...