public void Evaluate(IBlackBox box) { int xPos, zPos; lock (this) { xPos = _xCounter * _xFactor + _xOffset; if (xPos < _xLimit) { _xCounter++; } else { _xCounter = 0; _zCounter++; } zPos = _zCounter * _zFactor; _counter++; if (_counter == experiment.DefaultPopulationSize) { ResetCounters(); } } GameObject obj = Instantiate(Unit, new Vector3(xPos, 0, zPos), Unit.transform.rotation) as GameObject; UnitController controller = obj.GetComponent <UnitController>(); controller.MouseDownEvent += (sender, args) => { var shapeController = sender as ShapeController; if (SelectedController != null) { SelectedController.DeSelect(); } if (shapeController != null) { SelectedController = shapeController; } }; ControllerMap.Add(box, controller); controller.Activate(box); }