private void HandleColliders()
{
// adjust rigidbody
rigidbody = GetComponent<Rigidbody2D>();
rigidbody.isKinematic = !isMovable;
rigidbody.gravityScale = 0;
gameObject.layer = LayerMask.NameToLayer(isMovable?"Default":"Static Gear");
rigidbody.constraints = (isMovable?RigidbodyConstraints2D.FreezeRotation:RigidbodyConstraints2D.FreezeAll);
// find coolider, set radius/area/momentOfInertiaMult
Transform t = transform;
collRadius = area = 0;
momentOfInertiaMult = 0.01f;
CircleCollider2D[] colls = GetComponents<CircleCollider2D>();
for (int i=0; i<colls.Length; ++i) {
// find constants
float radius = colls[i].radius*Mathf.Sqrt(
t.TransformVector(t.InverseTransformVector(Vector3.up).normalized).magnitude
*t.TransformVector(t.InverseTransformVector(Vector3.right).normalized).magnitude);
momentOfInertiaMult = 0.5f;
// store results as trigger OR collider
if (colls[i].isTrigger) {
this.trig = colls[i];
this.trigRadius = radius;
} else {
this.coll = colls[i];
this.collRadius = radius;
area = Mathf.PI*collRadius*collRadius;
}
}
}