Переход на другую сцену в Unity C#
Здравствуйте , такая идея — хочу сделать так чтобы , когда игрок нажимал на пробел допустим , начиналась игра ( вызывалась другая сцена ). Но по нажатию ничего не происходит .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class prodol : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } public void loadscene (){ if (Input.GetKey (KeyCode.Space)) { SceneManager.LoadScene ("game"); } } }
Путь до сцены — assets/scenes . game — название сцены . Изначально включена сцена main . P.s — новичок в Unity.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Переход в другую сцену в Unity
Здравствуйте! я столкнулся с одной проблемой, при создании игры в Unity переход из главной сцены.
Переход на другую сцену
Вся моя проблема, что поиском пользоваться не умею. Наверняка ответ где-то ранее уже был по данному.
Переход на другую сцену
При переходе со сцены на вторую сцену использую обычный скрипт: public GameObject Personage;.
Генерация и переход на случайную сцену при нажатии на объект в Unity 3D на C#
Генерация и переход на случайную сцену при нажатии на объект в Unity 3D на C# Всем привет. У.
456 / 400 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
Сообщение было отмечено angrydev как решение
Решение
Вы метод loadscene нигде не вызываете. Сделайте вызов его в update.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Unity, осуществление перехода на другую сцену с применением клавиатурной кнопки
Помогите, как сделать переход на следующую сцену нажав на определённую кнопку на клавиатуре?
Переход на другую сцену при достижении цели
Не могу найти найти скрипт который при достижении цели(например собрать 3 алмаза), дверь.
Переход в другую сцену
Как создать и перейти кнопкой в другую сцену?
Создание персонажа и переход на другую сцену
У меня возникла такая ситуация: есть сцены Главное меню и сама игра. Игра сама ММО а значит когда.
Переход из мувика в мувике по нажатии кнопки в другую сцену
Здравствуйте! Помогите пожалуйста, у меня есть главная сцена на ней мувик в этом мувике еще мувик.
Переход между сценами
Приветствую! В данной статье мы разберём несколько способов перехода между сценами, а именно:
- Смена сцен по названию.
- Смена сцен по индексам.
- Смена сцен, используя параметры.
Смена сцен по названию
Данный способ самый простой, и встречается он очень часто. Он используется тогда, когда нам необходимо перейти точно на определённую сцену. Для этого создадим C# скрипт, с названием, например, Scenes. И пропишем в нём следующий код:
using UnityEngine; using UnityEngine.SceneManagement; public class Scenes : MonoBehaviour < public void OpenMenu() < SceneManager.LoadScene("Menu"); >public void OpenGame() < SceneManager.LoadScene("Game"); >>
Разбор кода
Обратите внимание, что при работе со сценами, нам необходимо обязательно подключить библиотеку:
using UnityEngine.SceneManagement;
Дальше мы создаём функцию OpenMenu(), которая будет загружать сцену с названием Menu. Вторая функция с названием OpenGame() загружаем сцену с названием Game. Убедитесь, что сцены с такими названиями существуют в Вашем проекте.
Как видите, всё очень просто. Условия, при которых Вы будете запускать данные функции, могут быть совсем разные. Например: клик на клавишу «Esc», здоровье персонажа меньше нуля, и тд. Пример:
if(HealthUser
Смена сцен по индексам
Данный способ аналогичен предыдущему, за исключением того, что мы вместо названий сцен, используем их индексы. Данный способ полезен в тех случаях, когда нам необходимо перейти на следующую или предыдущую сцену. Создадим C# скрипт, с названием, например, Scenes. И пропишем в нём следующий код:
using UnityEngine; using UnityEngine.SceneManagement; public class Scenes : MonoBehaviour < public void OpenMenu() < SceneManager.LoadScene(0); >public void OpenGame() < SceneManager.LoadScene(1); >>
Как видите, код аналогичен предыдущему, поэтому разбирать мы его не будем. Единственное что хотелось бы отметить, что благодаря функциям, у нас открываются чуть больше возможностей перехода на сцены. Например, мы можем перейти на следующую или предыдущую функцию:
using UnityEngine; using UnityEngine.SceneManagement; public class Scenes : MonoBehaviour < public void NextLevel() < var index = SceneManager.GetActiveScene().buildIndex; SceneManager.LoadScene(index + 1); >public void PreviousLevel() < var index = SceneManager.GetActiveScene().buildIndex; SceneManager.LoadScene(index - 1); >>
Разбор кода
Строчки в функции NextLevel():
var index = SceneManager.GetActiveScene().buildIndex; SceneManager.LoadScene(index + 1);
В первой строчке мы в переменную index мы заносим тот индекс сцены, в котором мы находимся в данный момент. А уже во второй строчке, мы увеличиваем индекс нашей сцены на единицу, и запускаем таким образом следующую сцену.
В функции PreviousLevel() всё аналогично, только индекс мы не увеличиваем на единицу, а уменьшаем. Тем самым запускаем предыдущую сцену.
Обратите внимание! Перед тем как работать со сценами по их индексам, нам необходимо добавить все сцены в Build Settings. Для этого жмём на вкладку File — Build Settings. Далее перетаскиваем все свои сцены в область Scenes in Build, и расставляем их по порядку. После чего просто закрываем данное окно. Теперь можно спокойно работать с индексами.
Смена сцен, используя параметры
Данный способ аналогичен предыдущему, только здесь мы переходим на определённую сцену исходя из переданного аргумента в нашу функцию.
using UnityEngine; using UnityEngine.SceneManagement; public class Scenes : MonoBehaviour < public void GoToLevel(int number) < SceneManager.LoadScene(number); >>
Разбор кода
Функция GoToLevel() принимает в качестве аргумента номер индекса, который нам необходимо открыть, и заносит его в переменную number. Этот метод защитит нас от дублирования однотипных функций, которые по идее выполняют одно и тоже.
Давайте теперь попробуем выполнить функцию GoToLevel(), передав ей аргумент «1» следующим образом:
GoToLevel(1)
Конечно же, в качестве аргумента мы можем передать не только индекс, но и название. Поэтому используя открытие сцены через аргумент функции, Вы можете работать как с индексами, так и с названиями сцен.
Если Вам понравилась сцена, буду рад Вашим лайкам.
Как реализовать переход на другую сцену?
Я делаю кликер. Мне нужно сделать переход на другую сцену когда игрок сделает 1000 кликов. Не знаю как реализовать.
- Вопрос задан более двух лет назад
- 730 просмотров
Комментировать
Решения вопроса 1
Unity3D Developer
подключаешь библиотеку using
using UnityEngine.SceneManagement; //в метод Update или CliksCar добавляешь if(clik >= 1000) < SceneManager.LoadScene("sceneName"); //собсна в скобках имя сцены >
Ответ написан более двух лет назад
Как правильно переносить данные из одной сцены Unity в другую?
Для лиги лени сразу ответ: Никак. Это не нужно. Нужно менять свой подход в работе с сценами в Unity.
Для всех остальных: Продолжаем.
Суть такова, что 95% обучающей информации по Unity на эту тему уже давно морально устарело. А оставшиеся 5 написаны на любом языке кроме русского и находятся в дебрях форумов и различных чатов, и найти её специально практически нереально, только если наткнуться случайно.
Собственно как и любую другую информацию по Unity уровня выше среднего.
И когда у меня сегодня спросили в очередной раз, как сделать вещь из названия поста, у меня чутка бомбануло, что и послужило причиной написания этой статьи.
Так что пройдем по основным решения этого вопроса, и рассмотрим некоторые плюсы и минусы этих самых решений.
У вас есть 2 сцены. У вас есть персонаж. У него есть здоровье. Необходим перенос параметра.
Что советуют сделать в большинстве гайдов и интернетах?
У нас есть 2 стула. Мы пишем какой-либо менеджер/систему/хелпер, (тут стоит сделать сноску, что называть вы их можете как угодно, и ни на что это влияет, название для классов/методов/переменных важно, но не настолько чтобы сидеть и думать над ними по полчаса. Тем более нужно «гоните его, насмехайтесь над ним» над всякими чудилами, которые говорят что «у вас не должно быть менеджеров в проекте, называйте как ходите, но только не так») и:
1. Делаем из него менеджер на основе Singlton`a.
Выглядеть это будет примерно как-то так. Мы пишем Generic класс Singleton`a, и реализуем на его основе простой Singleton менеджер ради одного единственного значения.
2. Делаем из него менеджер на основе MonoBehaviour. Прикрепляем его к какому либо объекту на сцене и используем стандартную функцию DontDestroyOnLoad., чтобы этот объект у нас не уничтожался при переходе меж сценами. Этакий синглон от мира Unity.
Теперь мы можем занести в менеджер что либо, и достать. Чтобы мы и делаем далее. Одна сцена сменяется другой, значение перенесено, проблема решена? Да, но нет.
И если вы делаете клон FlappyBerd`a, то это даже может прокатить. И переусложнять систему совершенно не нужно. Но если у вас что-то чуть более серьезное, то вы обязательно столкнетесь с некоторыми проблемами. И больше всего нас на данный момент интересует проблема инициализации систем.
— Синглтон в моем примере имеет ленивую реализации, и создастся сам в момент когда вы решите его первый раз потрогать. Что не является лучшим решением, и в идеале, в момент того как вы решите потрогать сингтон, он уже должен быть готов на все 100%.
— С менеджерами на основе MonoBehaviour, все еще интереснее. Так как объект должен постоянно присутствовать на сцене, вам нужно каждую сцену тащить какой-либо префаб с данным скриптом. Делать постоянные проверки на его наличие или отсутствие. Инстанциировать его. Так как его инициалиция завязана на методе Awake, работать с ним только в методе Start. Или делать проверки на готовность системы. Или форсировать инициализацию до загрузки сцены через спец атрибуты типа RuntimeInitializeOnLoadMethodAttribute. Короче проблемы. Не стоит делать какие-либо менеджеры на основе MonoBehaviour. Хапнете горя.
Что мы должны сделать для решения этого вопроса?
Отказаться от DontDestroyOnLoad навсегда, вообще. Отказаться он синглтонов в решении этой задачи. Синглтон вообще не самый плохой шаблон проектирования, но пользоваться им нужно с умом. Чисто технически можно написать всю игру не используя вообще ни одного. Так что это не та самая золотая пуля, которую так все ищут.
Чем заменить DontDestroyOnLoad? Для начала нужно поменять свое видение работы со сценами Unity. В Unity еще несколько лет назад появилась возможность работы с несколькими сценами одновременно. Вы можете как работать с ними в редакторе, так и загружать множество сцен прям во время игры. При этом вы можете как угодно разделить ваши ваши объекты по всем сценам, и работать с ними (за мелкими исключениями) как с одной сценой.
Вам больше не нужно тянуть «код» на каждую сцену, так же как и UI. Так же как много чего другого.
Сцены это не комнаты, между которыми вы переходите, это слои, которые вы мажете друг на друга.
Если же вас все же не отпускает использование DontDestroyOnLoad, «юнитеки же зачем то это придумали, значит это нужно использовать», то они сами уже не рекомендуют этого не делать.
Более подробно с этой концепцией можно ознакомиться на сайте самой Unity вот тут.
И структура сцены вида: