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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…