Сохранение открытых уровней в Unity
Вставка
- Опубліковано 23 лип 2019
- В этом уроке я покажу, как достаточно просто можно сохранять прогресс открытия уровней в Unity. Использовать будем метод PlayerPrefs для сохранения данных на жесткий диск в реестры.
• PlayerPrefs в Unity - ... - что такое PlayerPrefs
/ graphicaldesignua - мой патреон для поддержки)
unity.com/ru - ссылка на Unity
Огромное спасибо, все работает. Достаточно давно смотрю тебя и все время ты меня выручаешь. Спасибо тебе большое за все!)
Уже не первый раз твои видео помогают решить мои задачи. Причем это простые решения, доступные начинающим программистам. Спасибо.
Спасибо тебе большое за этот ролик! Как раз то, что нужно! :)🙂👍
Всё ясно и понятно объяснил, бро)
Спасибо большое, очень помог.
Большое спасибо за урок!
Огромная благодарность автору!
Неее :)) ну это уже гайд не о том как сделать сохранение чего либо, а о том, как сделать игру. :) В этом обучающем видео ты сделал мини-игру, которую нужно чуть-чуть допилить и сделать уровни с препятствиями, и игра готова!
Гайд отличный, спасибо большое!
Спасибо за урок, даже на сегодняшний день актуально)
Спасибо огромное, моей игре именно этого и не хватало!!
Стёпа Мопа моей тоже кста)
ОЧЕНЬ ПОЛЕЗНЫЕ ВИДЕО!!!)
Видео прям в мою днюху выложил, как раз нужно)
Просто лучший, спасибо огрмное,все просто обьясняяеться а главное все работает. Определенно лайк!!!
Спасибо огромное, у меня игра кликер конечно с разными уровнями, но очень помог
Я просто вместо приватного класса сделал его публичным и добавил на кнопку, чтобы он на нажатие сохранял и всё работает отлично
Спасибо огромное
а как вы сделали чтобы по нажатию сохранялось и переходило на новый уровень?я тоже вместо private сдулал public только не onTrigerEnter2D а Button
всё работает крут вчера наверно чтот не так сделал спасибо огромно
Через четыре дня отчаяние...Оно живое!!!
Жаль что стрельба по направлению мыши не так и не получилась, но да ладно!)))
Вопрос: а хранение большого количества уровней таким способом целесообразно? Если например уровней будет несколько сотен, или даже тысяч, как в игре Fishdom, тогда как?
Супер!
огромное спасибо за это видио.оно сильно улучшило мой проект!
Cпасибо огромное!
1 минус( с 1 уровень перескакивает на 2 сразу без нажатия клавиш)в чём причина????
Что делать если при проверке скрипта юнити пишет что ты не написал использование библиотек для int и interactable, хотя ты написал использование. Можно ли как-то исправить скрипт или загрузить библиотеки в юнити? Или может есть другой скрипт без int
Спасибо большое
Подскажи, как сохранить на сцене обьект, который я загрузил из asset bundle. он появляется с пометкой clone и потом исчезает после перезагрузки приложения
Фух, 4 часа продуктивной работы.
Правда на моменте instate я убил почти час, из-за того что просто не посмотрел видео на секунд 20 дольше 😖. Правда у меня почему-то не сохраняется прогресс🤔, но пожалуй пересмотрю для проверки первую половину в другой день
Привет, вопрос такой, при переходе на второй уровень и выходе из него, открываются и остальные уровни, в чем может быть проблема?
Подскажите почему уменя такие большие кнопки делал все не получается менял размер, т тоже не получается, что делать?
Здравствуйте, подскажите а как можно сделать разблокировку следующего уровня, не по тригеру а по нажатию на кнопку?
Всё сделал как на видео, но у меня после прохождения следующие уровни не становятся доступными
огонь!
Проектирование далеко не самое лучшее, чесно говоря. В данном случае - вопросов нет: когда у тебя 3 уровня, такая архитектура имеет место быть. Но когда их 100, стоит задуматся. И прикрываться, что это урок для чайников - тоже дело смутное. Учите с самого начала, как делать правильно и качественно.
А как правильно? Где посмотреть? Ютуб полон таких вот поделок дилетантов, а хороших решений не найти.
@@aleksey2793 Это проблема любой темы. Как правило спасает англоязычные ресурсы. Там всегда больше информации и уровнем она повыше.
Супер, помогают видосы, подписка и лайк
Привет, а как сделать так чтобы уже пройденые уровеи можно было перепройти, там когда уровень заново проходишь не загружается следующей
Ей парень спасибо за видос как и всегда спас мою проблемную жопу,лайкос)
Не понимаю,как заменить Триггер, на простой клик по объекту, чтобы переключаться на следующий уровень. Помогите, пожалуйста.
Подскажи как сделать, чтобы открытие уровней происходило по нажатию кнопки. Нажал на кнопку Вышла сценами с уровнями и новый уровень стал активным
Спасибо
спасибо
А если у меня не 3 уровня ,а 100 или более? Мне каждый раз писать новый case и добавлять в него один уровень?
Спасибо, просто лучший(Никогда коменты не пишу)
Error CS0117: `LevelController' does not contain for `instance'
Как исправить?
Добавь в классе MainMenu свойство public static MainMenu instance = null; а в функцию старт добавь условие
if (instance == null) { instance = this;}
наверно лучший аккаунт для начинающих разработчиков
привет ещё раз, скажи пожалуйста я прописал
if (instance == null)
{
instance = this;
}
но так же меня не переносит на следующий уровень почему?
Сцену с первым уровнем в билд сетингс перенеси на цыфру 1
Спасибо, очень полезньій урок!
Спасибо за урок!!! 🦊
Как называется музыка фоновая?
Работает! спасибо огромное,помогли😀
Странно! Вроде все зделал как на видео но все равно не работает😭. Ошибки не выдаёт
Можно скрипт? у меня не кнопки у меня картинки с box collider и скрипт тип если нажал переносит на такую сцену
Можно сделать по другому: делаем лист кнопок с уровнем; в переменную типа int из PlayerPrefs берем количество открытых уровней; в методе старт мы делаем цикл от нуля до количества открытых уровней и внутри цикла делаем interactable = true
слушай, я так и сделал только у меня все уровни разблокироваются, а если вместо interactable = true, написать interactable = false, то все уровни кроме первого лочатся, что я делаю не так, можешь помочь?
Здравствуйте, у меня лвл сделан так что у меня самолёт летит вверх и убивает противников лазером, как сделать финишную прямую после всех противников?
сделай спрайт финишной прямой (в видео это солнышко) и когда твой самолётик зацепит триггер то что бы кидало на второй лвл
Добрый день, у меня есть проблема, 1 уровень ничинает 2 через 3 секунды
А как сделать кнопку сброса прогреса?
Спасибо большое автору !!!
Топ
Помогите с таким вопросом.
Вот у меня выбор уровней начинается со 2 сцены.
И тоже 3 уровня.
И вот если делать по этому примеру, работает всё кроме сохранения уровней.
Что мне нужно изменить чтоб уровни сохранялись?
Должно работать. Значит что-то делаешь не так.
@@graphicaldesign2776 спасибо за ответ.
Ну я решил проблему.
Сделав уровни не во 2 сцене, а в 1.
Тока теперь при нажатие старт меняется картина на уровни, а не на сцену с уровнями😅
Спасибо большое, а если например пройти 2 уровня, и выйти, а потом обратно в игру зайти то прогресс сохраниться?
Так
Все работает но почему то пройденные уровни не сохраняются что делать ?
у меня возникла проблема когда в SceneIndex == 3 я пишу == 4 меня не переносит по уровням при этом сцена 4 активна
што делать если после уровня захожу в меню а оно не работает
!ПОМОГИТЕ!
Пишет:
NullReferenceException: Object reference not set to an instance of an object
NextLevel.OnTriggerEnter (UnityEngine.Collider collider) (at Assets/Scripts/ChooseLV/NextLevel.cs:9)
Что делать?
Вы чего то не вставили в публичную переменную
Оу еее, юнити энджАЙн
При создании метода LoadTo вылазит ошибка что его нельзя сделать public
Благодарю за урок! :)
А как называется саундтрек который используется вначале и конце видео?
Привет, можешь сделать видео по стрельбе, со слежением(поворотом) оружия за курсором мыши?
окей
@@graphicaldesign2776 не, ну это лайк, подписка, колокольчик с ещё одного аккаунта)
код по архитектуре не корректен, как ты будешь контролировать если будет 1000 уровней или 5000, ты будешь каждый уровень писать в if и проверять ?? Понятно что твой контент для новичков , но код надо изначально правильно организовывать, а то так и будут недоучки и понимать не будут где косяк . если рассматривать как Unity уроки для детей то вопросов нет
А как это лучше сделать
@@user-tu4vm7br2x через цикл for проверять.
Логично
@World War Memes на самом деле там не такая сложная задача как тебе кажется, просто в цикле for есть переменная i по умолчанию и ты можешь с помощью неё проверять каждый уровень. К примеру переменная i номер уровня в цикле и если она будет меньше открытых уровней то уровень будет разблокироваться.
@@unitycraftzone5888 А можно об этом поподробнее если не сложно? Как именно прописывать код что бы уровни разблокировались постепенно?
почему OnTriggerEnter2D не работает?
А можно как нибудь сделать так, чтобы в при переходе, допустим, на новую главу менялся фон?
@@DL_Tech Если честно я уже сам не очень помню по поводу чего был задан мной данный вопрос)
Добрый день. Если я прошёл 2 уровня и допустим хочу не проходить 3 ,а пройти 2 опять как так сделать?
Поставить перезагрузку текущего уровня
@@graphicaldesign2776 Чет оно не работает,если не сложно напиши по подробнее.
Спасибо, Бро! Шикарный урок! Не забудь доделать видео про ИНВЕНТАРЬ(подбор/сброс предметов Персонажем)!!!!! ^_^
Что ты тут делаешь? Вот тебя я точно не ожидал здесь увидеть!
@@Semga Мне интересно, как люди делают игры. Я смотрю такие видео. Может, когда-нибудь, сделаю свою игру...но не факт :)
@@YOURREST я вот уже вроде второй месяц этому учусь)
Привет, слушай, у меня такая проблема, все сдела как на видео, но когда переходит на следующий уровень, а потом ты переходишь в меню, то уровни не сохраняются, можешь ответить?
Изменено: Все работает, я заного сделал кейсы
А как ты решил эту проблему?
+
@@user-zq5jg1ex7y если у вас есть дополнительные сцены, то поменяйте кейсы на сцены, в которых сцены которые вы хотите, т.е цифры.
Если у вас сцена например "2" с самой игрой, то указываете в первом кейсе 2
@@user-zq5jg1ex7y возможно у вас как у меня, в скрипте левел контроллер могут быть слова с маленькой, а не с большой буквы
Если сделать как надо большой, то всё сохраниься
@@RivaKing я уже решил проблему, но вы правы у меня тоже с маленькой буквы было написано.
Полный ужас, всё сделал и уровни рестарт сами делают, кучу времени пытался решить эту проблему, ни чего не помогало. Но вдруг заметил что в скрипте МайнМеню LevelComplete с маленькой буквы,. С*ка. Капец, просто нет слов,. Урок отличный, спасибо.
Спасибо я без тебя бы долго мучился
Где именно?
Graphical Design можно вопрос.А можно ли зделать колайдер и поставить галочку на Trigger и тем самым зделать невидимый колайдер для перехода на следущей уровень?И как это сделать?Прошу помогите!!!!!!!
Перенеси по слоям, он будет работать, но его не будет видно, можешь использовать Sorting слои
@@cuver5595 спасибо я уже давно все сделал но спасибо что ответил
Вопрос я понимаю что ты скорее всего не ответишь, но я постараюсь достучаться "Что делать если после прохождения 3 lvl автоматом Reset нажимается хоть и я этого не хочу?" я код раза 4 пересмотрел.
что-то сделал не так
Привет, ты решение нашел? А то у меня чёт тоже такая фигня.
Ошибка CS0120 Для нестатического поля, метода или свойства "LevelController.instance" требуется ссылка на объект.
что делать с такой ошибкой
ошибка тут
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NextLevel : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
LevelController.instance.isEndGame();
}
}
У меня также, решил проблему?
@@no_more_dusty_trip мог бы ещё годик подождать и написать
@@kelni Блин просто очень нужно
Ура я первый и опять новый видос
А как сделать на 30 сцен
Привет, мне нравится, только вот... При прохождении уровня кидает в меню, а также при прохождении уровня не открывается след. уровень. В билде сцены добавлены.
Так, при прохождении уровня кидает на след лвл, но в меню они заблокированы всё равно, что делать?
не сохраняет результат. как быть? что делать?? подскажите пожалуйста, в чем может быть проблема. все кроме первого уровня не доступны. Мне кажется проблемы с switch. Проверьте пожалуйста.
levelComplete = PlayerPrefs.GetInt("LevelComplete");
ButtonLevel2.interactable = false;
ButtonLevel3.interactable = false;
ButtonLevel4.interactable = false;
ButtonLevel5.interactable = false;
switch (levelComplete)
{
case 1:
ButtonLevel2.interactable = true;
break;
case 2:
ButtonLevel2.interactable = true;
ButtonLevel3.interactable = true;
break;
case 3:
ButtonLevel2.interactable = true;
ButtonLevel3.interactable = true;
ButtonLevel4.interactable = true;
break;
case 4:
ButtonLevel2.interactable = true;
ButtonLevel3.interactable = true;
ButtonLevel4.interactable = true;
ButtonLevel5.interactable = true;
break;
}
}
public void LoadTo(int level)
{
SceneManager.LoadScene(level);
слишком много кейсов, либо удаляешь НАФИГ проект, либо убераешь кейсы
Проект не удаляй проблема в скриптах
Ты добавил лишнее действие
levelComplete = PlayerPrefs.GetInt("LevelComplete");
ButtonLevel2.interactable = false;
ButtonLevel3.interactable = false;
ButtonLevel4.interactable = false;
ButtonLevel5.interactable = false;
switch (levelComplete)
{
case 1:
ButtonLevel2.interactable = true;
break;
case 2:
ButtonLevel2.interactable = true;
ButtonLevel3.interactable = true;
break;
case 3:
ButtonLevel3.interactable = true;
ButtonLevel4.interactable = true;
break;
case 4:
ButtonLevel4.interactable = true;
ButtonLevel5.interactable = true;
break;
}
}
public void LoadTo(int level)
{
SceneManager.LoadScene(level);
PS: пхпхх конечно прошло 3 года уже, но вдруг помог)
Топ видосы, изучаю Unity и огромное тебе спасибо за твои видео. Не мог бы ты записать видео о выпадении лута?
Я подумаю как это оформить)
Вы мне очень помогли в создании инвентаря.
Могли бы вы сделать серию или хотя бы одно видео по сохранению предметов в инвентаре?
отметил в планах)
сделал всё также, ошибка Trying to Invoke method: LevelController.LoadMainMenu couldn't be called. Подскажи пожалуйста, что делать
Проверить еще раз скрипт, пишет, что нет доступа к вызова именно загрузки меню
@@graphicaldesign2776 я нашёл ошибку, я написал OnMainMenu, вместо LoadMainMenu
Отлично)
@@graphicaldesign2776 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class LevelController : MonoBehaviour
{
public static LevelController inctance = null;
int sceneIndex;
int levelComplete;
// Start is called before the first frame update
void Start()
{
if (inctance == null)
{
inctance = this;
}
sceneIndex = SceneManager.GetActiveScene().buildIndex;
levelComplete = PlayerPrefs.GetInt("LevelComplete");
}
public void isEndGame()
{
if (sceneIndex == 5)
{
Invoke("LoadMainMenu", 1f);
}
else
{
if (levelComplete < sceneIndex)
PlayerPrefs.SetInt("LevelComplete", sceneIndex);
Invoke("NextLevel", 1f);
}
}
void NextLevel()
{
SceneManager.LoadScene(sceneIndex + 1);
}
void LoadMainMenu()
{
SceneManager.LoadScene("MainMenu");
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public Button level2;
public Button level3;
public Button level4;
public Button level5;
int levelComplete;
void Start()
{
levelComplete = PlayerPrefs.GetInt("LevelComplete");
level2.interactable = false;
level3.interactable = false;
level4.interactable = false;
level5.interactable = false;
switch (levelComplete)
{
case 1:
level2.interactable = true;
break;
case 2:
level2.interactable = true;
level3.interactable = true;
break;
case 3:
level2.interactable = true;
level3.interactable = true;
level4.interactable = true;
break;
case 4:
level2.interactable = true;
level3.interactable = true;
level4.interactable = true;
level5.interactable = true;
break;
}
}
public void LoadTo(int level)
{
SceneManager.LoadScene(level);
}
когда уровень прошёл, новый не открывается((
А если в игре не три уровня а 30, получается надо создавать кучу case и объектов кнопки по номеру. И отдельно запускать каждый элемент, это костыль.
Массив в помощь
Как можно сделать так чтоб он сначала ишол в меню и только после начал новый уровень.Хотелось бы увидеть видео про чекпоинты в уровне))
Создать просто разные сцены.
Сильно все усложненно...можно сделать всё намного проще...если у меня сто уровней например...я с ума сойду пока все сделаю по вашему методу
Ты дурак?просто скопируй case 1 и цыфры меняй на case два и цыфры кнопок уровней.И все.
Нет ты дурак!Скрипт для того что бы все выполнять автоматом а не каждый раз это делать ручками.
@@FreeCoinsChannel Да,с тобой тоже все понятно.
@@kitkyte7126 в очередной раз убеждаюсь что в интернете очень много неадекватов
@@FreeCoinsChannel ну да таких как ты.
А если 100 уровней?)
В этом методе есть огромная ошибка.
У меня всего 5 уровней.
Если все 5 уровней открыты и я в сцене уровней выбираю 2-ой, прохожу его и возвращаюсь на сцену с уровнями, то 4 и 5 вновь будут заблокированы.
Ребят, подскажите что делать, такая проблема: Прохожу последний уровень, перекидывает в меню, но открыта только кнопка первого уровня. Почему?
Баги
Вверху есть уже ответ в комментариях
Здравствуйте! А можно сделать видео, где подробно рассказать про Save?
demonstalker show что значит «подробно»?
@@graphicaldesign2776 Я имел ввиду, как полностью сохранять весь процесс игры, включая характеристики игрока, деньги и т.д. И как потом это загружать!
@@demonstalker_game_developer Создаешь отдельные скрипты для каждого характеристики и сохраняешь.Купи курсы по этому делу и всё выучи, а то так ты будешь долго мучаться
@@demonstalker_game_developer на канале есть видео посмотри (у Автора а не у меня)
как с вами можно связаться?
Комменты открыты)
А можно сделать код без английского языка? Просто я не знаю английский язык. Можно или нет?
нельзя хахаха, сорян но насколько я знаю то ВСЕ языки программирования на английском языке и C# не исключение.
Уровни не сохраняются,если перезапустить игру на телефоне,как решить проблему?
Такая же проблема
@@hakerrulit5824 @@hakerrulit5824 помогу,Создаёшь Void OnApplicationQuit() { и сюда пишешь PlayerPrefs.SetInt("LevelComplete", sceneindex);
}
@@tomizz4406 Спасибо, надеюсь поможет
@@tomizz4406 всё равно не сохраняет(
Assets\script
extLevel.cs(9,34): error CS0122: 'LevelController.isEndGame()' is inaccessible due to its protection level мод кажи що робити
С чем?
Воно каже що нема isEndGame в nextLevel
А если в игре 999 уровней?
Твой канал - кладезь знаний. Спасибо большое!
(жалко что вк не отвечаешь)
В моей стране сложно с ВК)
А ты пользуешься телеграмм?
@@nepochat Кстати, пользуюсь.
Скидывай аккаунт, добавлюсь
@@graphicaldesign2776 @iampanda7
Согласен.
у меня возникли проблемы, если я прохожу первый уровень ивыхожу в меню, то казалось бы всё норм, но если опять зайти в первый уровень, то он не перенесёт тебя на второй после прохождения
а я понял свою ошибку, я Invoke на 15:43 ничайно в функцию if записал
@@sashikshik Я целый час не вдуплял, почему после первого раза оно не работает. Листал комменты в надежде на спасение, оказалось то же самое. Спасибо!
@@Minusgolovushka ахаха круто! Не думал, что найдётся ещё один человек с такой же проблемой)
@@sashikshik моя невнимательность меня в гроб сведёт)))
Привет, помоги пожалуйста, Как сделать чтобы если человек нажимал на закрытый уровень высвечивалась надпись (сначало пройди преведущий уровень) Как так сделать ведь если делать как ты, то кнопка не активна??
Привет. Смотри, кнопку надо сделать кликабельной, но она должны выполнять запуск текста, а не переход на следующий уровень, пока мы этот уровень не откроем.
@@graphicaldesign2776 Спасибо, но что нужно поменять в скрипте или нужно его кардинально менять или делать свой
@@graphicaldesign2776 просто на ютубе я такого не нашёл, даже на англоязычных каналах лазил, может я плохо искал?
@@graphicaldesign2776 будем благодарны если сделаете видео
@@graphicaldesign2776 я тоже с ними согласен, запили ролик на эту тему и ещё про оптимизацию игры на андроид
Все работает но! У меня не открывается 1-й уровень
Изменение:
Все работает!! Спасибо!!! Просто первый уровень нужно в build setting поставить под цифру 1
Хух спс за решение было тоже самое
Логично, логично, логично, логично...
Все работает, но когда прохожу последний у меня открыт только 1 уровень
открывай уровни после прохождения и загружай открытые уровни в старте
@@omoloni всмысле? Не очень понял
Разобрался? У меня такая же проблема
@@user-kx1jp2nx7r нет, не разобрался.
@@user-kx1jp2nx7r когда проходишь уровень, то сразу открывай следующий и сохраняй в плеер префс, а в меню каждый раз загружай из плеер префс
У меня первый и третий уровень работают нормально, а второй уровень сам переключается на третий, кто сталкивался?
Разобрался. Именно на втором уровне, объект который загружает следующую сцену с чем-то соприкасался и срабатывал сразу при старте -_- В скрипте прописал на соприкосновение именно с игроком, теперь работает отлично.