/// <summary> /// Attachs child colliders to a parent transform. Searches all children for "childCollider" component /// and then sets (passed) delegate funcitons. Returns count of child colliders set. /// Unity 4.0 has problems with namespaces + optional parameters so all parameters are necessary. /// </summary> private static int AttachChildColliders(Transform parent, OnTriggerEnterDelegate triggerEnterDelegate, OnTriggerStayDelegate triggerStayDelegate, OnCollisionEnterDelegate collisionEnterDelegate, OnCollisionStayDelegate collisionStayDelegate) { int childCount = 0; if(parent == null) Debug.LogError("Parent transform missing in AttachChildColliders"); // look gof all children with colliders... Collider[] colliders = parent.gameObject.GetComponentsInChildren<Collider>(); foreach(Collider collider in colliders) { // don't add to parent. if(collider != parent.GetComponent<Collider>()) { GameObject go = collider.gameObject; // add a child collider component to them if they don't have one already ChildCollider childCollider = go.GetComponent<ChildCollider>() as ChildCollider; if(childCollider == null) { childCollider = go.AddComponent(typeof(ChildCollider)) as ChildCollider; //Debug.Assert(childCollider != null,"Failed to add child collider to " + go.name); } // setup lists. childCollider.Init(); // attach delegate to child collider... // To Do: Figure out a way to move this repeat code into subroutine... //Debug.Assert(childCollider.m_triggerEnterDelegates != null); if(triggerEnterDelegate != null) childCollider.m_triggerEnterDelegates.Add(triggerEnterDelegate); //Debug.Assert(childCollider.m_triggerStayDelegates != null); if(triggerStayDelegate != null) childCollider.m_triggerStayDelegates.Add(triggerStayDelegate); //Debug.Assert(childCollider.m_collisionEnterDelegates != null); if(collisionEnterDelegate != null) childCollider.m_collisionEnterDelegates.Add(collisionEnterDelegate); //Debug.Assert(childCollider.m_collisionStayDelegates != null); if(collisionStayDelegate != null) childCollider.m_collisionStayDelegates.Add(collisionStayDelegate); childCount += 1; } } return childCount; }
// Helper functions... public static int AttachChildEnterDelegate(Transform parent, OnTriggerEnterDelegate triggerEnterDelegate) { return AttachChildColliders(parent, triggerEnterDelegate, null, null, null); }
public void RemoveFunctionFromTriggerEnterDelegate(OnTriggerEnterDelegate func) { onTriggerEnterDelegate -= func; }
public void ClearTriggerEnterDelegate() { onTriggerEnterDelegate = null; }
// ********************** // Delegate functions // ********************** //onTriggerEnterDelegate functions public void AssignFunctionToTriggerEnterDelegate(OnTriggerEnterDelegate func) { onTriggerEnterDelegate += func; }