public void SpawnEnemy()
    {
        var enemy = FPSEnemyController.CreateFPSEnemy();

        enemy.Identifier = Guid.NewGuid().ToString();
        enemy.HealthStateProperty.Where(p => p == FPSPlayerState.Dead)
        .Subscribe(p => EnemyDied(enemy)).DisposeWith(enemy);
        FPSGame.Enemies.Add(enemy);
    }
    // Update is called once per frame
    void Update()
    {
        enemyTimer -= Time.deltaTime * 1;
        GameObject enemyObject = enemyPrefab;

        if (enemyTimer <= 0 && hero != null)
        {
            enemyTimer = enemySpawnInterval;
            Debug.Log("Spawn Enemy");

            float spawnAngle = Random.Range(0, 360);

            //enemyObject.transform.position = new Vector3(3, 1, 0);
            enemyObject.transform.position = new Vector3(
                hero.transform.position.x + Mathf.Cos(spawnAngle) * enemySpawnDistance,
                hero.transform.position.y,
                hero.transform.position.z + Mathf.Sin(spawnAngle) * enemySpawnDistance);
            enemyObject = Instantiate <GameObject>(enemyPrefab);
        }

        if (Input.GetKeyDown("r"))
        {
            Time.timeScale = 1;
            SceneManager.LoadScene(SceneManager.GetActiveScene().name);
        }

        FPSEnemyController enemy = enemyObject.transform.GetComponent <FPSEnemyController>();

        enemy.chaseDirection = (hero.transform.position - enemy.transform.position).normalized;
        enemy.onDestroyed    = () =>
        {
            score        += 100;
            infoText.text = "Score: " + score.ToString();
            Debug.Log("Enemy Destroyed");
        };
        enemy.onHitPlayer = () =>
        {
            Time.timeScale = 0;
            infoText.text  = "\nGame Over! Press R to Restart";
            Debug.Log("Enemy Destroyed");
        };
    }