Согласен с
freeExec. Создай на сцене пустышку и повешай туда скрипт. И если тебе надо сохранить расположение врагов при переходе на другой уровень(сцену), лучше используй MoveGameObjectToScene().
Этот скрипт на пустышку.
[SerializeField] private int m_maxEnemies;
[SerializeField] private GameObject m_Enemy;
private void Start()
{
SpawnEnemies(m_maxEnemies);
}
private void SpawnEnemies(int max)
{
for (int enemy = 0; enemy < max; enemy++)
{
float x = Random.Range(-8, 8);
float y = Random.Range(-5, 5);
float z = 1f;
GameObject childObject = Instantiate(m_Enemy, new Vector3(x,y,z),Quaternion.identity);
childObject.transform.SetParent(gameObject.transform);
}
}
Этот можешь на камеру закинуть. И метод SwapScenes() вызывать по какому-либо триггеру/событию.
[SerializeField] private GameObject m_Spawner;
[SerializeField] private string m_sceneName;
public void SwapScenes()
{
StartCoroutine(LoadYourAsyncScene());
}
IEnumerator LoadYourAsyncScene()
{
Scene currentScene = SceneManager.GetActiveScene();
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(m_sceneName, LoadSceneMode.Additive);
while (!asyncLoad.isDone)
{
yield return null;
}
SceneManager.MoveGameObjectToScene(m_Spawner, SceneManager.GetSceneByName(m_sceneName));
SceneManager.UnloadSceneAsync(currentScene);
}
P.S. Лучше имя сцены прописать в скрипте, чтобы в инспекторе не допустить ошибки.