public static Collision2DSideType Opposite(this Collision2DSideType sideType) { Collision2DSideType opposite; if (sideType == Collision2DSideType.Left) { opposite = Collision2DSideType.Right; } else if (sideType == Collision2DSideType.Right) { opposite = Collision2DSideType.Left; } else if (sideType == Collision2DSideType.Top) { opposite = Collision2DSideType.Bottom; } else if (sideType == Collision2DSideType.Bottom) { opposite = Collision2DSideType.Top; } else { opposite = Collision2DSideType.None; } return(opposite); }
private static Collision2DSideType Opposite(Collision2DSideType sideType) { return(sideType switch { Collision2DSideType.Left => Collision2DSideType.Right, Collision2DSideType.Right => Collision2DSideType.Left, Collision2DSideType.Top => Collision2DSideType.Bottom, Collision2DSideType.Bottom => Collision2DSideType.Top, _ => Collision2DSideType.None });
void OnCollisionEnter2D(Collision2D col) { if (col.gameObject.name == "Player") { Collision2DSideType collisionSide = col.GetContactSide(); if (collisionSide == Collision2DSideType.Right) { Destroy(skeletonSpriteRenderer.gameObject.GetComponent <BoxCollider2D>()); skeletonSpriteRenderer.gameObject.GetComponent <SpriteRenderer>().sortingOrder = -1; isMoving = false; Vector3 pos = skeletonSpriteRenderer.transform.position; pos.x -= 0.35f; skeletonSpriteRenderer.transform.position = pos; } } }
public static Collision2DSideType GetContactSide(Vector2 max, Vector2 center, Vector2 contact) { Collision2DSideType side = Collision2DSideType.None; float diagonalAngle = Mathf.Atan2(max.y - center.y, max.x - center.x) * 180 / Mathf.PI; float contactAngle = Mathf.Atan2(contact.y - center.y, contact.x - center.x) * 180 / Mathf.PI; if (contactAngle < 0) { contactAngle = 360 + contactAngle; } if (diagonalAngle < 0) { diagonalAngle = 360 + diagonalAngle; } if ( ((contactAngle >= 360 - diagonalAngle) && (contactAngle <= 360)) || ((contactAngle <= diagonalAngle) && (contactAngle >= 0)) ) { side = Collision2DSideType.Right; } else if ( ((contactAngle >= 180 - diagonalAngle) && (contactAngle <= 180)) || ((contactAngle >= 180) && (contactAngle <= 180 + diagonalAngle)) ) { side = Collision2DSideType.Left; } else if ( ((contactAngle >= diagonalAngle) && (contactAngle <= 90)) || ((contactAngle >= 90) && (contactAngle <= 180 - diagonalAngle)) ) { side = Collision2DSideType.Top; } else if ( ((contactAngle >= 180 + diagonalAngle) && (contactAngle <= 270)) || ((contactAngle >= 270) && (contactAngle <= 360 - diagonalAngle)) ) { side = Collision2DSideType.Bottom; } return(side.Opposite()); }
void OnCollisionEnter2D(Collision2D col) { if (col.gameObject.name == "Player") { Collision2DSideType collisionSide = col.GetContactSide(); if (collisionSide == Collision2DSideType.Top) { Destroy(skeletonSpriteRenderer.gameObject.GetComponent <BoxCollider2D>()); skeletonSpriteRenderer.gameObject.GetComponent <SpriteRenderer>().sortingOrder = -1; isMoving = false; skeletonSpriteRenderer.flipY = true; Vector3 pos = skeletonSpriteRenderer.transform.position; pos.y -= 0.35f; skeletonSpriteRenderer.transform.position = pos; skeletonSpriteRenderer.transform.rotation = Quaternion.Euler(skeletonSpriteRenderer.transform.rotation.eulerAngles.x, skeletonSpriteRenderer.transform.rotation.eulerAngles.y, skeletonSpriteRenderer.transform.rotation.z + 9f); } } }
void OnCollisionEnter2D(Collision2D col) { if (col.gameObject.layer == 8) { setJumpFalse(); } if (col.gameObject.layer == 9) { life = 0; playerDead(); } if (col.gameObject.layer == 10) { life = 0; playerDead(); } if (col.gameObject.layer == 11) { life = 0; playerDead(); } if (col.gameObject.name == "Skeleton") { Collision2DSideType collisionSide = col.GetContactSide(); if (collisionSide == Collision2DSideType.Right || collisionSide == Collision2DSideType.Left) { life = 0; playerDead(); } else { setJumpFalse(); this.countSkeleton += 1; } } if (col.gameObject.name == "SkeletonVertical") { Collision2DSideType collisionSide = col.GetContactSide(); if (collisionSide == Collision2DSideType.Bottom) { life = 0; playerDead(); } } if (!SceneManager.GetActiveScene().name.Equals("Fase001_01") && monster != null && monster.gameObject != null) { if (!isInitScene) { if (countSkeleton < totalSkeleton) { monster.gameObject.SetActive(false); } else { monster.gameObject.SetActive(true); } } else { monster.gameObject.SetActive(true); } } }