private void CreatingLevel() { if (!Equals(_knifeController, null)) { _knifeController.Dispose(); } var log = GameObject.Instantiate(_core.Levels[counter].LogPrefab, Vector2.up * 8, Quaternion.identity); _logView = log.GetComponent <LogView>(); var points = _logView.GetComponentsInChildren <KnifePointOnLogMarker>(); if (points.Length == 0) { throw new NullReferenceException("Нет точек на бревне для спавна кинжалов"); } var knifeCount = Random.Range(1, 4); for (int i = 0; i < knifeCount; i++) { if (i > points.Length) { break; } var point = points[i]; var knife = GameObject.Instantiate( _core.Levels[counter].KnifeCreator.KnifePrefab, point.transform.position, Quaternion.identity, _logView.transform ); if (knife.TryGetComponent(out Rigidbody2D rigidbody)) { rigidbody.freezeRotation = true; rigidbody.isKinematic = true; } knife.transform.up = _logView.transform.position - knife.transform.position; } _disposables.Remove(_logController); _logController = new LogController(_logView, _core.Levels[counter].HitCount, _core.Levels[counter].LogSpeed); _logController.Death += NextLevel; _logController.Damage += _scoreCounter.CreamentCount; _disposables.Add(_logController); var chance = Random.Range(0.0f, 1.0f); if (chance <= _core.CoinSpawnChance) { var logTransform = _logView.transform; _coinView = GameObject.Instantiate(_core.CoinPrefab, new Vector2(logTransform.position.x + 3f, logTransform.position.y), Quaternion.identity, logTransform) .GetComponent <CoinView>(); _coinView.Pickup += _coinCounterController.CreamentCount; } _disposables.Remove(_knifeController); _knifeController = new KnifeCreator(_core.Levels[counter].KnifeCreator); _knifeController.EndGame += EndGame; _inputManager.Throw += _knifeController.Throwing; _disposables.Add(_knifeController); }