- Home /
OnCollisionEnter2D and OnCollisionExit2D issue
Trying to have two colliders ignore each other if they are of similar color. If I have no oncollisionexit2d method the ignore collision effect is permanent, which I do not want. If i do have an oncollisionexit2d method, both the enter and exit methods are called before the collider is able to pass through, essentially "pushing" the moving collider out and not allowing it to pass through. Using boxcollider2d for door and circlecollider2d for player.
private void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.tag == "Door") { print("Player entered door."); objSpriteRenderer = other.gameObject.GetComponent(); objCollider = other.gameObject.GetComponent(); objColor = objSpriteRenderer.color; if (Mathf.Abs(objColor.b - color.b) <= 0.05F) { Physics2D.IgnoreCollision(objCollider, playerCollider); OnCollisionEnterTriggered = true; } } } private void OnCollisionExit2D(Collision2D other) { if (other.gameObject.tag == "Door") { if (!OnCollisionEnterTriggered) { print("Player exited door."); Physics2D.IgnoreCollision(objCollider, playerCollider, false); } } }
Answer by WbrJr · Feb 23, 2018 at 02:16 PM
For everyone how wants to help....
Trying to have two colliders ignore each other if they are of similar color. If I have no oncollisionexit2d method the ignore collision effect is permanent, which I do not want. If i do have an oncollisionexit2d method, both the enter and exit methods are called before the collider is able to pass through, essentially "pushing" the moving collider out and not allowing it to pass through. Using boxcollider2d for door and circlecollider2d for player.
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "Door")
{
print("Player entered door.");
objSpriteRenderer = other.gameObject.GetComponent();
objCollider = other.gameObject.GetComponent();
objColor = objSpriteRenderer.color;
if (Mathf.Abs(objColor.b - color.b) <= 0.05F)
{
Physics2D.IgnoreCollision(objCollider, playerCollider);
OnCollisionEnterTriggered = true;
}
}
}
private void OnCollisionExit2D(Collision2D other)
{
if (other.gameObject.tag == "Door")
{
if (!OnCollisionEnterTriggered)
{
print("Player exited door.");
Physics2D.IgnoreCollision(objCollider, playerCollider, false);
}
}
}
I think something like this should work:
private void OnCollisionEnter2D(Collision2D other)
{
if((other.gameObject.tag== "Door") && (gameObject.GetComponent<SpriteRenderer>().color == other.gameObject.GetComponent<SpriteRenderer>().color))
{
print("Wow");
Physics2D.IgnoreCollision(other.gameObject.GetComponent<Collider2D>(), gameObject.GetComponent<Collider2D>());
}
}
I hope I did not miss anything, and hope I could help out..
Have a nice day Greetings,
WbrJr
Thank you for fixing the formatting. However, they ignore collision works fine. The problem is that I want to set ignore collision back to false one the player passes through the door. If I add an oncollisionexit method the player cannot pass through the door. I am trying to figure out why oncollisionexit is being called when the player is still in the door. $$anonymous$$y understanding is that oncollisionexit should be called when the two colliders are no longer touching, but that does not seem to be the way it is working.
As far as i understand:
the OnCollisionExid does not work, because the collision is ignored :D
so you could make a timer which activates the door after a few secounds...
or check the distance to the player and if it is bigger than 0.5 or so the collider gets activated again.
I hope i gave you an working idea :D
have a nice day
Your answer
Follow this Question
Related Questions
OnCollisonEnter2D not working 0 Answers
Track all colliding Collider2D. 1 Answer
OnCollisionStay2D not working in the way I would like. 1 Answer