If you try to access a collider from your child gameobject and use isTrigger property Unity crash on playmode (infinite loading scene).
Collider[] collidersObj = gameObject.GetComponentsInChildren<Collider>();
if (collidersObj == null || collidersObj.Length == 0) { return gameObjectcollider; }
for (int index = 0; index < collidersObj.Length; index++)
{
Collider returnCollider = collidersObj[index];
if (returnCollider != null && !returnCollider.isTrigger)
{
// If some child have a colliders not on trigger mode
return returnCollider;
}
}
I think the problem is on “gameObject.GetComponentsInChildren();” use because it can return a characterController and it misses the property “isTrigger”, making unity crash.
Collider[] collidersObj = gameObject.GetComponentsInChildren<Collider>();
if (collidersObj == null || collidersObj.Length == 0) { return gameObjectcollider; }
for (int index = 0; index < collidersObj.Length; index++)
{
Collider returnCollider = collidersObj[index];
if (returnCollider != null && !ColliderHelper.isTrigger(returnCollider))
{
// If some child have a colliders not on trigger mode
return returnCollider;
}
}
public class ColliderHelper
{
public static bool isTrigger(Collider colliderObject)
{
if (colliderObject == null)
{
throw new ArgumentException("colliderObject is null");
}
if (colliderObject.GetType() == typeof(SphereCollider))
{
return ((SphereCollider)colliderObject).isTrigger;
}
else if (colliderObject.GetType() == typeof(BoxCollider))
{
return ((BoxCollider)colliderObject).isTrigger;
}
else if (colliderObject.GetType() == typeof(CapsuleCollider))
{
return ((CapsuleCollider)colliderObject).isTrigger;
}
else if (colliderObject.GetType() == typeof(CharacterController))
{
return false;
}
throw new ArgumentException("collider type is does not exist, name:"+ colliderObject.name);
}
}