private Unit CreateUnit(UnitConfig unitConfig, Vector3 position, UnitsManager unitsManager, ProjectilesManager projectilesManager) { Rigidbody instance; if (unitConfig.OnlyOne) { instance = Instantiate(unitConfig.Prefab, _unitsRoot); } else { if (!_unitPools.TryGetValue(unitConfig, out var pool)) { pool = new GameObjectPool <Rigidbody>(_unitsRoot, unitConfig.Prefab, 5); _unitPools.Add(unitConfig, pool); } instance = pool.GetObject(); } instance.transform.position = position; instance.gameObject.SetActive(true); var unit = unitConfig.CreateUnit(instance, unitsManager, projectilesManager); unit.Config = unitConfig; return(unit); }