void SelectPoint(Vector2 screenPosition, float maxScreenDistance) { if (pcListener == null) { return; } UnityEngine.Debug.Log("Finding selected point."); MeshFilter[] mf = GetComponentsInChildren<MeshFilter>(); float maxDist = 10000000.0f; Vector3 closestHit = Vector3.negativeInfinity; Color colorClosestHit = Color.black; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); for (int i = 0; i < transform.childCount; i++) { GameObject child = transform.GetChild(i).gameObject; PCNode node = child.GetComponent<PCNode>(); if (node != null) { UnityEngine.Debug.Log("Finding selected point on node."); node.GetClosestPointOnRay(ray, screenPosition, ref maxDist, ref closestHit, ref colorClosestHit, maxScreenDistance * maxScreenDistance); } } if (!closestHit.Equals(Vector3.negativeInfinity)) { float classCode = GetClassCodeForColor(colorClosestHit); pcListener.onPointSelected(closestHit, classCode); } }