private void GetLinkedBalls(BallView ballView, ref List <BallView> linkedBalls) { var allNearbyBalls = ballView.GetCollideWith(); var matchBalls = allNearbyBalls.FindAll(n => n.ballConfig.id == ballView.ballConfig.id); if (matchBalls.Count > 0) { //Remove already listed balls for (int i = 0; i < linkedBalls.Count; i++) { if (matchBalls.Contains(linkedBalls[i])) { matchBalls.Remove(linkedBalls[i]); } } //Add new matched balls linkedBalls.AddRange(matchBalls); //Run recursive search of others balls for (int i = 0; i < matchBalls.Count; i++) { GetLinkedBalls(matchBalls[i], ref linkedBalls); } } }