public void StartFalling() { crushedChips = GetChipsForChipMeta(crushChipsMeta.crushedChips); fallingChips = GetChipsForChipMeta(crushChipsMeta.fallingChips); faller.transform.parent = transform; faller.transform.localPosition = Vector3.zero; foreach (Chip chip in fallingChips) { float toReplace = crushedChips [0].transform.localPosition.y; int indexOffset = chip.chipMeta.stackPos - crushedChips [0].chipMeta.stackPos; float relativeY = indexOffset * chip.chipMeta.Height; float newY = relativeY + toReplace; faller.CreateMoverFor(faller.transform, chip.transform, chip.transform.localPosition, new Vector3(chip.transform.localPosition.x, newY, chip.transform.localPosition.z)); } while (crushedChips.Count > 0) { Chip chipToCrush = crushedChips [0]; chipToCrush.transform.parent = null; //Create and start a particle system crushedChips.RemoveAt(0); Vector3 chipLocation = chipToCrush.transform.position; MJParticleExplosion explosion = GetParticleExplosion(); Color chipColor = chipToCrush.GetMainColor(); explosion.Explode(chipLocation, chipColor, chipColor); chipToCrush.gameObject.SetActive(false); Destroy(chipToCrush.gameObject); } crushChipsMeta = new CrushChipsMeta(); crushedChips.Clear(); fallingChips.Clear(); faller.StartFalling(); }