ferpa
1
I have an GameObject with Box Collider, and I want know if this box has a collision on top
How can I detect which collision side came from ?
I’m trying this.
private void OnCollisionEnter2D(Collision2D coll){
if(coll.gameObject.name.Equals("PlayerObject")){
if(coll.contacts[0].point.y > 0){
Debug.Log("collision at top");
}else{
Debug.Log("collision at side x");
}
}
}
Just checking the ‘y’ won’t work. Try this.
using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour{
private float topAngle;
private float sideAngle;
void Start() {
Vector2 size = GetComponent<BoxCollider2D>().size;
size = Vector2.Scale (size, (Vector2)transform.localScale);
topAngle = Mathf.Atan (size.x / size.y) * Mathf.Rad2Deg;
sideAngle = 90.0f - topAngle;
Debug.Log (topAngle + ", " + sideAngle);
}
void OnCollisionEnter2D(Collision2D coll) {
Vector3 v = (Vector3)coll.contacts[0].point - transform.position;
if (Vector3.Angle(v, transform.up) <= topAngle) {
Debug.Log("Collision on top");
}
else if (Vector3.Angle(v, transform.right) <= sideAngle) {
Debug.Log("Collision on right");
}
else if (Vector3.Angle(v, -transform.right) <= sideAngle) {
Debug.Log ("Collision on Left");
}
else {
Debug.Log("Collision on Bottom");
}
}
}