Моя проблема в следующем.
Я нахожусь в сцене главного меню, и там 2 кнопки: одна playerVSplayer и другая VScpu.
Теперь я хочу включить/отключить какой-то компонент в сцене, который будет загружаться при нажатии одной из кнопок.
Как я могу решить эту проблему?
public void PlayerVsPlayer()
{
GameObject[] objs = SceneManager.GetSceneByName("First Level").GetRootGameObjects();
foreach(GameObject o in objs)
{
if (o.gameObject.tag == "--Gameplay")
{
o.gameObject.GetComponentInChildren<StaticPlayerCtr_p2>().enabled = true;
o.gameObject.GetComponentInChildren<AI>().enabled = false;
o.gameObject.GetComponentInChildren<UnityEngine.AI.NavMeshAgent>().enabled = false;
}
}
SceneManager.LoadScene("First Level");
}
public void VsCPU()
{
GameObject[] objs = SceneManager.GetSceneByName("First Level").GetRootGameObjects();
foreach (GameObject o in objs)
{
if (o.gameObject.tag == "--Gameplay")
{
o.gameObject.GetComponentInChildren<StaticPlayerCtr_p2>().enabled = false;
o.gameObject.GetComponentInChildren<AI>().enabled = true;
o.gameObject.GetComponentInChildren<UnityEngine.AI.NavMeshAgent>().enabled = true;
}
}
SceneManager.LoadScene("First Level");
}
public void QuitGame()
{
Application.Quit();
}
Это ошибка:
ArgumentException: The scene is invalid.
Две вещи в качестве предложения. 1. Держите геймплей PvP и PvC в разных сценах. 2. Создайте одноэлементный или статический класс для хранения имен сцен, чтобы избежать опечаток и обеспечить безопасность типов.
Возможный дубликат Unity не может установить ActiveScene
Сначала вы должны загрузить сцену.
Насколько я знаю, вы не можете получить доступ к сценам GameObjects из других сцен.
Если вы хотите иметь две разные сцены в зависимости от опции (здесь это будет PvP и PvCpu), вы должны создать две разные сцены. Затем в зависимости от того, какой вариант выбран, скажем, PvP и PvCpu - это кнопки, затем в зависимости от того, какая кнопка нажата, вы загружаете нужную сцену.
Я надеюсь, что помог вам. Удачи вам в игре!
Я предполагаю, что вы не добавили «Первый уровень» в указатель сборки или написали его с ошибкой.