// Update is called once per frame void Update() { // check what needs to be destroyd List <GameObject> destroyList = new List <GameObject>(); foreach (var current in LifeTimePerImage) { if (Time.time > current.Value) { destroyList.Add(current.Key); } } // destroy stuff foreach (var obj in destroyList) { LifeTimePerImage.Remove(obj); Bricks.Remove(obj); Destroy(obj); } // update positions for (int idx = 0; idx < Bricks.Count; idx++) { if (null == Bricks[idx]) { continue; } Bricks[idx].GetComponent <RectTransform>().position = CalculatePosition(idx); } // trigger destroy of the for bottom cubes for (int idx = 0; idx < Bricks.Count && idx < 4; idx++) { if (!LifeTimePerImage.ContainsKey(Bricks[idx])) { LifeTimePerImage.Add(Bricks[idx], Time.realtimeSinceStartup + BrickLiveTimeInSecs); } } // get active indexes IList <int> actives = new List <int>(); for (int idx = 0; idx < Bricks.Count && idx < 4; idx++) { if (IndexPerBrick.ContainsKey(Bricks[idx])) { actives.Add(IndexPerBrick[Bricks[idx]]); } } // update audio // deal with audo sources if (AudioGeneratorObject != null) { AudioManager ag = AudioGeneratorObject.GetComponent <AudioManager>(); if (ag != null) { // end all loops ag.Loops(false); foreach (int index in actives) { ag.ActivateAudio(index, true); } ag.DesacActivateAllBut(actives); } } // update effects if (AudioGeneratorObject_version2) { AudioManager_version2 ag = AudioGeneratorObject_version2.GetComponent <AudioManager_version2>(); if (ag != null) { ag.ActivateEffects(actives); } } }