Тёмный

Создание скрипта улучшения персонажа 

Яндекс Игры для Разработчиков
Просмотров 10 тыс.
50% 1

Опубликовано:

 

31 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 40   
@sergeyromanov1920
@sergeyromanov1920 Год назад
успешное прохождение,
@t2X2twitchcut
@t2X2twitchcut Год назад
Есть вопрос: у меня еще до создания скрипта Progress при запуске игры появлялся DontDestroyOnLoad. С чем это может быть связанно?
@yagamesdev
@yagamesdev Год назад
Дмитрий, здравствуйте. Объект DontDestroyOnLoad может создаваться заранее, это не повлияет на работу игры. При этом вы можете проверить причину его появления на старте. Для этого нажмите на объект и просмотрите скрипты, которые к нему привязаны.
@Defis_22
@Defis_22 3 месяца назад
30:07 Илья, здравствуйте! Почему при переносе скрипта Shop в эти поля у меня не появляются во вкладке Function какие-либо параметры, ну кроме параметра MonoScript, где можно выбрать только string name? И такое у этих двух кнопок! P.S. Я самостоятельно решил проблему! Нужно было переносить не скрипт Shop, а объект Shop. Может кому пригодится!!!)))
@yagamesdev
@yagamesdev 3 месяца назад
Здравствуйте. Рады, что вам удалось самостоятельно разобраться 🙂 Если у вас появятся дополнительные вопросы - их можно задать нам в личные сообщения t.me/YandexGamesSupport
@niyazkam
@niyazkam 2 года назад
Подскажите, пожалуйста, можем ли мы применить Singleton для GameManager и, например, CoinManager? В каких случаях его не стоит использовать?
@ЕвгенийБабиков-в4я
Хороший вопрос. Если GameManager сделать неуничтожаемым, тогда я думаю, что все его SerializeField будут ссылаться на объекты из прошлой сцены при переходе на новый уровень. Тогда нужно и эти объекты также делать скелетонами или каждый раз искать их в новой сцене. Так гемора чуть больше будет.
@yagamesdev
@yagamesdev Год назад
Здравствуйте. Да, можно применить «Singleton» для «CoinManager» или «GameManager». Отметим, что использование отдельного «Singleton» для каждого объекта может затруднить реализацию их изменения. В этом случае можно создать «GameData» и в нём хранить «CoinManager» и «GameManager».
@artemaveryanov6546
@artemaveryanov6546 Год назад
@@yagamesdev Какая-то беда с сингтоном в видео, при переходе со второго уровня на третий создается еще один, помогло решение вытащить из префабов @yagamesdev
@anton.vechakes
@anton.vechakes 5 месяцев назад
Если у вас тоже есть проблемы с переносом прогресса, то вот что было у меня и как я это исправил. Уточню, что я не создавал методы SetWidth и SetHeight, а использовал уже имеющиеся AddHeight и AddWidth, так как на мой взгляд создание новых методов избыточно. 1. Ворота не изменяли Progress. Чтобы это исправить нужно в скрипте Gate в if и else If, которые на деформацию, добавить Progress.Instance.Width += _value; и Progress.Instance.Height += _value; соответственно. На всякий случай вот код метода: PlayerModifier playerModifier = other.attachedRigidbody.GetComponent(); if (playerModifier != null) { if (_deformationType == DeformationType.Width) { playerModifier.AddWidth(_value); Progress.Instance.Width += _value; } else if (_deformationType == DeformationType.Height) { playerModifier.AddHeight(_value); Progress.Instance.Height += _value; } Destroy(gameObject); } 2. Учет высоты и ширины как таковой внутри PlayerModifier и Progress идут каждый своим ходом. Например в начале уровня закупаешься высотой и шириной по 100 единиц (данные инспектора Progress), а в Player отобразится по 300 или что-то такое. То есть _height и _width не связаны с Progress.Instance. Чтобы исправить нужно в PlayerModifier в Update в самое его !начало! добавить: _height = Progress.Instance.Height; _width = Progress.Instance.Width; Если добавить в конец, будет лагать увеличение роста. 3. Барьеры перед финишем не учитываются в Progress. Исправляется легко. Вот весь метод целиком: public void HitBarrier() { if (Progress.Instance.Height > 50) { AddHeight(-50); Progress.Instance.Height -= 50; } else if (Progress.Instance.Width > 50) { AddWidth(-50); UpdateWidth(); Progress.Instance.Width -= 50; } else { Die(); } }
@evgeniy_a7363
@evgeniy_a7363 10 дней назад
Можно еще проще сделать Добавить в NextLevel эти строки. А _width и _height поставить в public. PlayerModifire playerModifire = FindObjectOfType(); Progress.Instance.Width = playerModifire._width; Progress.Instance.Height = playerModifire._height;
@Lime-vkusnii
@Lime-vkusnii 8 месяцев назад
Почему-то после урока не осуществляется переход на следуюший уровень. Жму на кнопку "NEXT" , а перехода нет. Помогите пожалуйста.
@yagamesdev
@yagamesdev 8 месяцев назад
Здравствуйте. В данном видео не затрагивается предыдущая логика игры. Возможно, вы удалили действие на нажатие кнопки. Проверьте, пожалуйста.
@Lime-vkusnii
@Lime-vkusnii 8 месяцев назад
@@yagamesdev Спасибо за помощь. Но я уже решил проблему. Ошибка была в моей невнимательности)
@ПавелПавленко-б2ю
@ПавелПавленко-б2ю 10 месяцев назад
Подскажите, пожалуйста в чем смысл этой игры? Мы сами управляем персонажем на небольшой скорости, поэтому мы можем спокойно не брать красные ворота и всегда забегать в синие. Очень простая игра получается
@Lime-vkusnii
@Lime-vkusnii 8 месяцев назад
В этом и суть. Игра создаётся для платформы Я.игры. А там как раз казуальные проекты заходят очень сильно.
@giorgitamazashvili9338
@giorgitamazashvili9338 Месяц назад
pochemu netu Playlista video?
@yagamesdev
@yagamesdev Месяц назад
Здравствуйте. Все ролики по созданию игры на Unity, включая этот, уже добавлены в плейлист. Делимся ссылкой: clck.ru/3Da2EL.
@Sweetand_507
@Sweetand_507 2 месяца назад
Один вопрос. Касается CoinManager, пишу в Progress себе 500, и когда нажимаю на увеличение высоты или ширены. У меня пишется просто 20 но в Progress написана не 20 а то число которая должна быть(то есть 480 и т.д) Я не понимаю в чем проблема, 2 раза пересмотрел и не понял в чем разница. Подскажите пожалуйста как решить или где возможна ошибка? Заранее спасибо.
@yagamesdev
@yagamesdev 2 месяца назад
Здравствуйте. Пожалуйста, убедитесь, что при обновлении текста баланса в нём выводится оставшееся количество монет, а не стоимость покупки.
@anton.vechakes
@anton.vechakes 5 месяцев назад
Если поясните зачем создавать SetWidth и SetHeight буду очень признателен. Я сделал без них и все работает нормально. Возможно я чего-то не понимаю.
@yagamesdev
@yagamesdev 5 месяцев назад
Здравствуйте. Создание «SetWidth» и «SetHeight» упрощает чтение кода и его поддержание. Например, когда читаем: SetWidth(10), то сразу понимаем, что меняем ширину. Если же в коде будет 10 строк, изучать придётся дольше.
@apolon17
@apolon17 Год назад
Здравствуйте, делаю игру-тест и появилась проблема, когда вопросы заканчиваются и происходит переход на сцену с результатами, то как будто данные последнего вопроса не сохраняются, на сцене самой игры счетчик правильных ответов отображает все правильно, а вот когда запускается сцена результатов, то там всегда на 1 балл меньше. Как можно решить это?
@ShoreTrooperLive
@ShoreTrooperLive 3 месяца назад
Я немного не понял как сделать чтобы персонаж не пробегал через двое ворот.
@yagamesdev
@yagamesdev 2 месяца назад
Здравствуйте. В ролике рассказывается о том, что можно регулировать размеры коллайдеров самих ворот. Это может помочь в решении вопроса. Также при взаимодействии с воротами можно отключать коллайдер соседних.
@eugenestepanets8069
@eugenestepanets8069 2 года назад
синглтон понятное решение. первый вопрос - если объект DontDestroyOnLoad , он все равно создается при загрузке сцены? второй вопрос - нельзя ли объект Progress вместе со скриптом вставить в какое-нибудь [SerilizedField] управляющего скрипта сцены и таким образом получить доступ к полям?
@Daniel48476
@Daniel48476 2 года назад
1. Создается ещё один экземпляр при загрузке каждой сцены. Но так как поле static уже занято, скрипт сам "уничтожает" лишний gameObject "Progress" на котором висит. А тот, который содержит все данные о монетках и прочем, останется "жив". Почему так произойдёт, потому что проверка на существование находится в методе Awake, то есть она будет произведена один раз. Потому у существующего Progress этот метод не будет вызван повторно. А вот у вновь созданной копии будет. Таков метод Awake, срабатывать один раз при включении/создании объекта. 2. Вы и так через static Instance сможете получить доступ к любому полю Progress напрямую. Static - доступен, можно сказать, отовсюду, главное, чтобы он оставался Public. Потому можно не добавлять, а просто в вашем управляющем скрипте сцены в коде обращаться напрямую. При этом да, можно объект вставить в какое-нибудь поле у некоего управляющего скрипта, чтобы и так, своеобразно, получить доступ к полям Progress, но они также должны быть public, если вы хотите как-то влиять на поля Progress.
@yagamesdev
@yagamesdev 2 года назад
Здравствуйте. Объекты в сцене создаются при её загрузке. DontDestroyOnLoad не удаляется при переходе между сценами. Чтобы в сцене не было 2 экземпляра одного объекта в синглтоне пишем Destroy. Объект в новой сцене создается, затем, если видит, что один экземпляр уже был создан ранее - сразу уничтожается. Добавим, что Progress не стоит вставлять в поля в инспекторе. В это поле будет вставлен тот объект, который присутствует в сцене. Если загрузить вторую сцену после прохождения первой, то этот объект удалится. А в сцене останется только тот экземпляр, который был создан на первом уровне.
@NeoXider
@NeoXider Год назад
@@yagamesdev первый прогресс становится пустым и появляется 2, хотя код одинаковый
@kalipso5785
@kalipso5785 Год назад
Ошибка выходит при Singleton NullReferenceException: Object reference not set to an instance of an object Эта ошибка выходит только когда я нажимаю кнопку чтобы перейти на 3 уровень. На 1 и 2 ошибка не выскакивает.
@kalipso5785
@kalipso5785 Год назад
Ошибка решена🎉
@Meteorite_Games
@Meteorite_Games Год назад
Как решил данный вопрос?
@mdaheh9791
@mdaheh9791 8 месяцев назад
@@Meteorite_Games Отвечу за него, я потыкал всякое, но последнее что я сделал и после чего по идеи всё заработало это я обнаружил что у меня была ошибка в коде где мы удаляем Progress instance, а именно у меня автозаполнялка написала: Destroy(Instance);, а надо было Destroy(gameObject);. Я исправил и всё стало работать как надо. (Да прошло 6 месяцев, но мало ли кому потом поможет :) )
@ТимохаЛукьянченко-н4х
почему нажимаю на кнопку, у меня там где монеты было 500, а потом просто выдает там же 20, код абсолютно как у него. Все работает вроде в меню Progress, но в игре отображается как просто 20, хотя должно число минусовать не пойму. И проблема именно в методе SpendMoney, так как изменяю там число и оно появляется как раз. SpendMoney в CoinManager я пишу правильно как на видео
@ТимохаЛукьянченко-н4х
уже нашел, я тупой извиняюсь
@yagamesdev
@yagamesdev 3 месяца назад
Добрый день. Рады, что вам удалось самостоятельно разобраться 🙂
@NeoXider
@NeoXider Год назад
Синглтон работает только при 1 переходе уровня, при втором он делает себя пустым
@kalipso5785
@kalipso5785 Год назад
Так это уже нужно сохранение сделать, если не хочешь чтобы было всё заново при перезапуске игры
@Artem-ol1rw
@Artem-ol1rw Год назад
Можно же добавить "объект-глобальное состояние" с вызовом DontDestroyOnLoad только в 1й уровень (не вложенным во что либо). Далее он же будет доступен и на всех последующих. И не нужно мудрить с синглтоном (хотя такая реализация это скорее "финт ушами"). И кстати CoinManager и часть PlayerModifier просятся в общее глобальное состояние. Думаю можно сделать проще, по крайней мере мне так видится на данном этапе, возможно дальше будут причины для такой организации. Посмотрим. За бесплатный курс, несмотря ни на что однозначно спасибо.
@goosesuka
@goosesuka Год назад
dedicated server etc
Далее
Dear Game Developers, Stop Messing This Up!
22:19
Просмотров 723 тыс.
An Aseprite Crash Course In 30 Minutes
31:47
Просмотров 1,1 млн
LEVEL UP Your Game Design Toolkit (Godot for Beginners)
23:30
Upgrade System in Unity - Stats Part 2
8:40
Просмотров 11 тыс.