RegisterCollisionTriggerCallbacksOnChildren <TChildColliderSensor, TCollider, TCollision>( Component caller, Transform parent, ChildColliderSensor <TCollider, TCollision> .OnChildCollisionEnterDelegate on_collision_enter_child = null, ChildColliderSensor <TCollider, TCollision> .OnChildTriggerEnterDelegate on_trigger_enter_child = null, ChildColliderSensor <TCollider, TCollision> .OnChildCollisionExitDelegate on_collision_exit_child = null, ChildColliderSensor <TCollider, TCollision> .OnChildTriggerExitDelegate on_trigger_exit_child = null, ChildColliderSensor <TCollider, TCollision> .OnChildCollisionStayDelegate on_collision_stay_child = null, ChildColliderSensor <TCollider, TCollision> .OnChildTriggerStayDelegate on_trigger_stay_child = null, bool debug = false) where TChildColliderSensor : ChildColliderSensor <TCollider, TCollision> where TCollider : Component { var children_with_colliders = parent.GetComponentsInChildren <TCollider>(); //TODO add check and warning for not all callbacks = null foreach (var child in children_with_colliders) { var child_sensors = child.GetComponents <TChildColliderSensor>(); ChildColliderSensor <TCollider, TCollision> collider_sensor = null; foreach (var child_sensor in child_sensors) { if (child_sensor.Caller != null && child_sensor.Caller == caller) { collider_sensor = child_sensor; break; } if (child_sensor.Caller == null) { child_sensor.Caller = caller; collider_sensor = child_sensor; break; } } if (collider_sensor == null) { collider_sensor = child.gameObject.AddComponent <TChildColliderSensor>(); collider_sensor.Caller = caller; } if (on_collision_enter_child != null) { collider_sensor.OnCollisionEnterDelegate = on_collision_enter_child; } if (on_trigger_enter_child != null) { collider_sensor.OnTriggerEnterDelegate = on_trigger_enter_child; } if (on_collision_exit_child != null) { collider_sensor.OnCollisionExitDelegate = on_collision_exit_child; } if (on_trigger_exit_child != null) { collider_sensor.OnTriggerExitDelegate = on_trigger_exit_child; } if (on_trigger_stay_child != null) { collider_sensor.OnTriggerStayDelegate = on_trigger_stay_child; } if (on_collision_stay_child != null) { collider_sensor.OnCollisionStayDelegate = on_collision_stay_child; } #if NEODROID_DEBUG if (debug) { Debug.Log($"{caller.name} has created {collider_sensor.name} on {child.name} under parent {parent.name}"); } #endif } }
public static void RegisterCollisionTriggerCallbacksOnChildren( Component caller, Transform parent, ChildColliderSensor.OnChildCollisionEnterDelegate on_collision_enter_child, ChildColliderSensor.OnChildTriggerEnterDelegate on_trigger_enter_child = null, ChildColliderSensor.OnChildCollisionExitDelegate on_collision_exit_child = null, ChildColliderSensor.OnChildTriggerExitDelegate on_trigger_exit_child = null, ChildColliderSensor.OnChildCollisionStayDelegate on_collision_stay_child = null, ChildColliderSensor.OnChildTriggerStayDelegate on_trigger_stay_child = null, bool debug = false) { var children_with_colliders = parent.GetComponentsInChildren <Collider>(); foreach (var child in children_with_colliders) { var child_sensors = child.GetComponents <ChildColliderSensor>(); ChildColliderSensor collider_sensor = null; foreach (var child_sensor in child_sensors) { if (child_sensor.Caller != null && child_sensor.Caller == caller) { collider_sensor = child_sensor; break; } if (child_sensor.Caller == null) { child_sensor.Caller = caller; collider_sensor = child_sensor; break; } } if (collider_sensor == null) { collider_sensor = child.gameObject.AddComponent <ChildColliderSensor>(); collider_sensor.Caller = caller; } if (on_collision_enter_child != null) { collider_sensor.OnCollisionEnterDelegate = on_collision_enter_child; } if (on_trigger_enter_child != null) { collider_sensor.OnTriggerEnterDelegate = on_trigger_enter_child; } if (on_collision_exit_child != null) { collider_sensor.OnCollisionExitDelegate = on_collision_exit_child; } if (on_trigger_exit_child != null) { collider_sensor.OnTriggerExitDelegate = on_trigger_exit_child; } if (on_trigger_stay_child != null) { collider_sensor.OnTriggerStayDelegate = on_trigger_stay_child; } if (on_collision_stay_child != null) { collider_sensor.OnCollisionStayDelegate = on_collision_stay_child; } if (debug) { Debug.Log( caller.name + " has created " + collider_sensor.name + " on " + child.name + " under parent " + parent.name); } } }