[UNITY3D] Scriptable Objects на примере игры

Поділитися
Вставка
  • Опубліковано 13 вер 2024
  • Всем привет, сегодня мы познакомимся с такой невероятной штукой, как ScriptableObject и рассмотрим один из главных способов ее использования на примере небольшой игры, которую мы напишем. ScriptableObject имеет настолько много способов использования, что если попытаться рассказать все, то можно увидеть, как на ютубе перестанут быть популярными уроки по созданию игр за 10 минут.
    На самом деле не бесполезный канал ExtremeCode: goo.gl/aSZQTQ
    Коля, Артем, не кидайте страйк, пожалуйста =)
    (AH better EC)
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    Покупайте наши проекты: android-helper.ru
    Поддержка канала денежкой: www.donationale...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    Группа ВК: youtube...
    Telegram Чат: t.me/ahgamedev...
    Twitch: / androidhelperlive
    #Unity3D

КОМЕНТАРІ • 112

  • @user-cq5to1ew5g
    @user-cq5to1ew5g 6 років тому +19

    Друзья, при монтаже, случайно был отрезан маленький, но очень важный код. В конце Start() EnemySpawner, сразу после подписки на OnEnemyOverFly необходимо запустить корутину Spawn строчкой:
    StartCoroutine(Spawn());

    • @Александр-щ7в4й
      @Александр-щ7в4й 5 років тому

      Объясни, я слишком глупый

    • @Александр-щ7в4й
      @Александр-щ7в4й 5 років тому

      выводит ошибку cs1503 при вводе StartCoroutine(Spawn()); в конец Start()

    • @uso2484
      @uso2484 3 роки тому +1

      @@Александр-щ7в4й кнш прошел год но надо просто StartCoroutine(Spawn);

    • @fomgleb
      @fomgleb 3 роки тому

      @@uso2484 Надо StartCoroutine(Spawn());

    • @serdjuk2827
      @serdjuk2827 11 місяців тому

      А кому это интересно если видео про Scriptable Objects ? Думаю за 13 минут можно было описать все варианты использования Scriptable Objects, но нет, я покажу вам чо я умею...

  • @redmanone6963
    @redmanone6963 3 роки тому +12

    Сначала обьяснил как детсадовцам, на примере тортика, а с 6ой минуты ограничился банальным названием используемых функций. Браво, господа

  • @ExtremeCode
    @ExtremeCode 6 років тому +33

    ExtremeCode > Женя AndroidHelper

    • @ExtremeCode
      @ExtremeCode 6 років тому +16

      Блять, опять перелогинится забыл

    • @user-cq5to1ew5g
      @user-cq5to1ew5g 6 років тому +5

      False

    • @adengard3473
      @adengard3473 6 років тому +3

      Надо чекнуть, что у вас нового давно не заходил ). Со времен основ с# ))) Хотя лысый из itvdn больше разжевывает )))

    • @amurlamur3125
      @amurlamur3125 5 років тому

      0:27 Уворачиваться от бесполезных вещей

  • @oscar343
    @oscar343 6 років тому +19

    Автор канала великий человек: он смог соединить программирование с юмором. Мой низкий поклон в виде лайка)

    • @amurlamur3125
      @amurlamur3125 5 років тому

      C# для маленьких и тупых в помощь

  • @winterflamestudio
    @winterflamestudio 3 роки тому +8

    так и не понял как его использовать ,все быстро пробежал сам себе код написал и норм (нет)

  • @doven_2750
    @doven_2750 6 років тому +4

    Прежний темп вернулся:)

  • @evgeniyrakov4598
    @evgeniyrakov4598 6 років тому

    Ахаах!!! За пару недель до выхода этого видео расчехлил эту тему ибо нужно было. Искал здесь на этом канале именно эту информацию))) Походу, автор услышал мои мысленные позывы!))) Короче, все равно большой лайкище тебе!

  • @teoraxulen1417
    @teoraxulen1417 4 роки тому +6

    Смысл ролика: Создаем шаблон для ScriptableObject - EnemyData.cs. Далее с помощью него создаем ScriptableObject-ы и подключаем созданные ScriptableObject-ы в публичный массив EnemySpawner.cs. Таким образом получаем доступ к созданным ScriptableObject. Остальная часть ролика петросяния и архитектура приложения.

  • @AlexPlayer1000
    @AlexPlayer1000 5 років тому

    Класс. Отличный урок. Давай Еще

  • @elvinbayramov7389
    @elvinbayramov7389 2 роки тому

    2:24 я орнул xD

  • @user-rh8qq1pm8s
    @user-rh8qq1pm8s 6 років тому

    Отличный видосик, быстро много полезной инфы.)

  • @vladisslavss
    @vladisslavss 2 роки тому

    Жалко что вы больше не работаете. Вы крутые!

  • @atmgaming096
    @atmgaming096 2 роки тому

    Это было достойное видео, жаль новых на канале нет

  • @walson4708
    @walson4708 6 років тому +1

    Спасибо за урок пойду делать симулятор кейсов Clash Royale , но уже по канонам SO

  • @ВладиславАфанасьев-й7г

    3:58 - про Беларусь правда

  • @digitalstorm8484
    @digitalstorm8484 5 років тому

    Видео огонь! Спасибо :)

  • @NittorKingcTV
    @NittorKingcTV 6 років тому +1

    Жирный лайкосик!

  • @monolit-8346
    @monolit-8346 6 років тому

    Вау, контент улучшился.

  • @FurKot74
    @FurKot74 5 років тому

    интересно-интерееесно... я так понимаю HearthStone именно на таком скриптовом объекте писали. теперь бы еще сложный ai взаимодействия динамических параметров таких объектов между собой придумать...

  • @DARWINSubscribeplz
    @DARWINSubscribeplz 6 років тому

    Привет, такой вопрос не по теме, как сделать вызов приложения через некоторое время ? К примеру в приложении есть кнопка при нажатии на которую ты запускаешь кусочек кода через некоторое время, мне нужно что бы выполнилось открытие моего приложения. Ну к примеру приложения с ложными звонками которые запускаются через указанное тобой время. Как это реализовать? Подскажите!

  • @ValeGoG
    @ValeGoG 6 років тому

    Спасибо за урок :)

  • @visser_channel
    @visser_channel 6 років тому

    Зачетно!

  • @vashti3449
    @vashti3449 5 років тому +3

    Интересно, хочу дальше, но всё слишком уж быстро (как у меня в постели), особенно в частях с новым материалом
    Местами сложные вещи пролетают незаметно, в нескольких словах - нам нужно больше зол... подробностей
    Спасибо, удачи, пока.

  • @KolfOFFICIAL
    @KolfOFFICIAL 6 років тому

    Круто!

  • @TheHeronLady
    @TheHeronLady 6 років тому +1

    Я наверно чего-то не знаю, но где ты сделал старт Spawn? Вроде ничего не пропускал. Все очень понятно, почти получил удовлетворение, но вот это ломает все восприятие. Объясните пожалуйста или мне все таки придётся лезть в файлы проекта(хах, которых кстати нет...)?

    • @user-cq5to1ew5g
      @user-cq5to1ew5g 6 років тому

      KuzmICh возможно, случайно вырезал при монтаже.
      Сразу после подписки на Enemy.OnEnemyOverFly

    • @TheHeronLady
      @TheHeronLady 6 років тому

      Евгений Бренев это и заметил (время на компе между кадром), не забывайте про такие штуки, важный момент, состояние незаконченности было у меня на протяжение трёх пересмотров в поисках этого :0

  • @Bond007in
    @Bond007in 5 років тому +8

    ВСЕ ПРОСТО И ПОНЯТНО ! (НЕТ)

  • @igorkovbel5259
    @igorkovbel5259 3 роки тому +1

    зачем нужна эта строчка кода на 5:10 public Sprite MainSprite{} ?

  • @jamian_eg0istique
    @jamian_eg0istique 6 років тому +3

    СДЕЛАЙСДЕЛАЙСДЕЛАЙ ЕЩЕ УРОКИ ПО ЭТИМ СКРЫПТАБЛЕ ОБЖЕКТАМ!!! ОМГ КАК ЖЭ ЭТО КЛАССНО, ЕСЛИ Я СМОГУ ОСВОИТЬ ЭТО, ТО МОИ ГОРИЗОНТЫ СТАНУТ В РАЗЫ ШИРЕ!

  • @DaronRUS
    @DaronRUS 6 років тому +2

    У тебя класные настройки цвета текста VS, можешь настройки выложить, думаю многим бы понравились.

    • @ANDROIDHELPERRU
      @ANDROIDHELPERRU  6 років тому

      В уроке по оформлению VS есть ссылка на эту тему.

    • @DaronRUS
      @DaronRUS 6 років тому

      ооо, спасибо.

  • @UAGamesChannel
    @UAGamesChannel 6 років тому

    Лайкосик поставив бо цікаво!

  • @esplaygame4189
    @esplaygame4189 6 років тому +1

    Боже я никогда не научусь писать скрипты красиво как ты.... у меня просто такое убожество получается, что сам черт ногу сломает....

  • @ellips9955
    @ellips9955 5 років тому

    А ничего что, по итогу у нас получается что в сцене появляется условно говоря 100 экземпляров класса Enemy и т.о. метод FixedUpdate вызывается 100 раз за 1 секунду? Не лучше ли было бы вызывать этот метод 1 раз за 1 секунду в каком-нибудь EnemiesMovementManager, висящем в сцене? Т.е. мы бы тогда с одного скрипта двигали бы всех enemy.

  • @ay3336
    @ay3336 4 роки тому

    А есть смысл использовать Scriptable objects для игр типа Flappy bird? Когда нужно спавнить один и тот же префаб на постоянной основе? Или в этом нет смысла для такого маленького проекта?
    Урок хороший, в принципе даже для новичка не так сложно. Сложнее скорее самостоятельно потом всё это повторить и применить, но в этом и суть обучения)

    • @АртурГагиев-ж7я
      @АртурГагиев-ж7я 4 роки тому +1

      На мой взгляд SO, не особо то и нужен, если рассматривать классический Flappy bird. А вот Pool объектов не помешает точно!)

  • @_nickname_nickname_
    @_nickname_nickname_ 3 роки тому

    Короче это рофл) Чел применяет SO для генерации случайных значений с ограничением. На 9:40 единственное применение, троллинг просто высшего уровня))

  • @timofey858
    @timofey858 3 роки тому +1

    кто то читает дисклеймер?
    кто не читает тот беременный ребёнок!

  • @vladisslavss
    @vladisslavss 5 років тому

    Больше !

  • @ANDROIDHELPERRU
    @ANDROIDHELPERRU  6 років тому +5

    Это перезалив видео, т.к UA-cam решил никому не показывать его в подписках, и не звонить в колокольчик...Низкий поклон YT.

    • @mushr000m-
      @mushr000m- 6 років тому +2

      ANDROIDHELPER [UNITY3D and more] Вы можете выложить код, пожалуйста

    • @adengard3473
      @adengard3473 6 років тому +1

      Поддерживаю ECS... Слышал, но ничего не понял как работает... Инфы мало на ру. )))

    • @DARWINSubscribeplz
      @DARWINSubscribeplz 6 років тому

      Привет, такой вопрос не по теме, как сделать вызов приложения через некоторое время ? К примеру в приложении есть кнопка при нажатии на которую ты запускаешь кусочек кода через некоторое время, мне нужно что бы выполнилось открытие моего приложения. Ну к примеру приложения с ложными звонками которые запускаются через указанное тобой время. Как это реализовать? Подскажите!

    • @adengard3473
      @adengard3473 6 років тому

      С такими вопросами я бы порекомендовал группы в вк (если не гугл и не ютуб тебе не помогают). Там сидят 20000+ человек и могут гораздо быстрее ответить. По своему нубскому опыту могу предположить, что отложенный вызов будет реализован через метод Invoke.

  • @1Nurali
    @1Nurali 4 роки тому

    Даже незнаю как это сформулировать. Скриптинг? Или сценарий?
    1 Но Как делать эмоции плеера?!
    Помните бэтлтодс?! Эмоция лягух (плеера) изменялась при виде босса.

  • @lichlichi
    @lichlichi 6 років тому

    Почему трансформ двигаешь в фиксед апдейте?

  • @hierayku873
    @hierayku873 5 років тому

    Где вы учитесь или учились?

  • @GameDev55
    @GameDev55 3 роки тому

    Блин, залез написать, что IEnumerator Spawn в воздухе висит, а тут уже всё написано)

  • @ZIC3011
    @ZIC3011 6 років тому

    По моему ты объяснил принцип ООП

  • @user-jx7pc9ku7b
    @user-jx7pc9ku7b 6 років тому +5

    Это ж какой мозг нужно иметь, что бы писать такие скрипты О_о

    • @murosekai
      @murosekai 6 років тому +6

      минимальный по мощности мозг и куча времени на обучение)

    • @civilontrol2139
      @civilontrol2139 6 років тому

      самый обычный, но с кучей опыта

  • @nightkotnightkot9997
    @nightkotnightkot9997 4 роки тому

    А как добавить врагам АНИМАЦИЮ с аниматором?

  • @DobleFun
    @DobleFun 6 років тому +1

    А нельзя написать обычный скрипт с параметрами типа : скорость , картинка,дамаг итп. Скрипт который будет спавнить их естественно и присваивать этим переменным соответствующие значения? Так тоже получится 1 префаб. Можно создать лист, в скрипте спавна, в котором будут параметры для врагов, типа нажал плюсик, уже в редакторе, и у тебя ещё 1 враг и редактируешь его параметры

    • @user-cq5to1ew5g
      @user-cq5to1ew5g 6 років тому +3

      DoubleFun здорово, а теперь представьте, что у каждого врага не три поля, а сто.
      Вам нужно сделать скажем 1000 спаунеров разных (допустим, вы делаете много уровней). В каждом спаунере вам нужно иметь 500 врагов. Пусть каждое поле будет занимать в среднем 8 байт. Итого, каждый враг будет занимать 800 байт. Так как вам нужно будет в каждом спаунере таскать его копию, вам придется для каждого из 1000 спаунеров возить с собой 800*500 = 40кБайт. 40 кБайт * 1000 спаунеров = 40 мБайт. То есть ваша игра только на врагах в размерах поднимется на 40 мБайт, хотя с помощью SO этот размер можно ужать в тысячу раз.
      Понятно, что пример притянут за уши, понятно, что в реальных условиях экономия получится меньше, но, помимо экономии памяти вы получаете:
      Гибкость и удобство - изменение и добавление врагов делается в 2 клика мыши.
      Возможность хранения ссылок на SO, а не целиком объект позволит вам легко переконфигурировать ваш спаунеров под конкретные нужды.
      Если обмазать это дело ещё и эдиторскриптами, можно сделать работу с врагами ещё более красивой и изящной.

    • @DobleFun
      @DobleFun 6 років тому +1

      Сделать скрипт отвечающий за все спаунеры и хранить этот лист из врагов в нём, давая на него ссылки спавнерам xD

    • @DobleFun
      @DobleFun 6 років тому

      Попахивает костылями, но я же не могу сказать что я не прав) Но работать с ними приятней это да, говнокода меньше и структура более удобна

    • @user-cq5to1ew5g
      @user-cq5to1ew5g 6 років тому +1

      DoubleFun многие так делают, как вы описали, но по заверению самих разработчиков юнити - это неправильное использование префабов.

  • @mrche9674
    @mrche9674 4 роки тому

    Выложите исходники

  • @hierayku873
    @hierayku873 5 років тому

    Не могу понять, для чего нужно кроме поля border, делать еще и Border со свойствами get; set;? Ни как до меня не дойдет

    • @user-oe9bj3ww2g
      @user-oe9bj3ww2g 4 роки тому

      Чтобы ограничить перемещение игрока. Он же не должен убегать за экран...

  • @user-ml2et9iw2l
    @user-ml2et9iw2l 6 років тому

    Привет, начни уроки по 3D игре, к примеру от третьего лица, в жанре шутер.

  • @beklight
    @beklight 2 роки тому

    🤣👍 подпска на

  • @mblanche
    @mblanche 6 років тому

    Почему видео так часто?

  • @TheTempterable
    @TheTempterable 5 років тому

    Я так и не понял, чем ScriptableObject лучше обычных префабов?

    • @KirillBreuss
      @KirillBreuss 5 років тому +7

      К примеру у префаба врага есть параметр int hp = 100; Переменная int занимает 32 бита в памяти вне зависимости от того, какое число она хранит. Представь, что у врага есть еще три десятка переменных и в итоге 1 враг на сцене занимает аж 500 кб. А теперь самое интересное. Ты создал на сцене армию из 300 таких врагов. Умножаем 500 кб на 300 и вот враги сожрали 146 мб нашей памяти одним своим существованием. При этом у них у всех одинаковые параметры. У одного int hp = 100, у другого int hp = 100 и т.д.
      В случае со Scriptable Object, все 300-500-1000 врагов будут юзать один общий Scriptable Object вместо того, чтобы создавать новый экземпляр скрипта с абсолютно одинаковыми стартовыми параметрами. Если у всех орков в игре, стартовое значение здоровья = 100хр, то мы можем это указать всего 1 раз в Scriptable Object, а не каждый раз для каждого отдельного орка. Экономия памяти.

    • @user-gm3gt7cl2y
      @user-gm3gt7cl2y 5 років тому +1

      @@KirillBreuss Спасибо, после твоего коммента до меня наконец дошло, что по сути это реализация паттерна Легковес, теперь понятно в чем их фишка

  • @aliatajanov8681
    @aliatajanov8681 6 років тому

    помогите пж. help plz
    могу ли я использовать Javascript вместо C#?
    будут ли у меня проблемы какие то?

    • @ANDROIDHELPERRU
      @ANDROIDHELPERRU  6 років тому

      JS больше не поддерживается в Unity.

    • @aliatajanov8681
      @aliatajanov8681 6 років тому

      +ANDROIDHELPER [UNITY3D and more] вот бл** ...
      а есть другие языки ? кроме C#? я имею ввиду, ну не хочется учить C# только из за unity......

    • @aliatajanov8681
      @aliatajanov8681 6 років тому

      +Владислав Костюков а там просто база требуется?
      в юнити?

    • @aliatajanov8681
      @aliatajanov8681 6 років тому

      +Владислав Костюков премного благодарен !

  • @EAGames_unity
    @EAGames_unity 3 роки тому +2

    Это обучающий ролик или ты просто выпендриваешься что умеешь это делать?Нахера так тараторить и пропускать 90% действий?

    • @ANDROIDHELPERRU
      @ANDROIDHELPERRU  3 роки тому

      Видимо так смотрите, раз у вас пропущено 90% действий. Если для вас человек в видео тараторит на 13 минут, то в ютубе есть настройка управления скоростью видео.

  • @NittorKingcTV
    @NittorKingcTV 6 років тому

    Сделайте урок Unity или AndroidStudio по созданию приложения с фунциями Bluetooth. Например Боютуз терминал.

  • @NRodriges
    @NRodriges 5 років тому

    Что за музыка на 0:00

    • @ANDROIDHELPERRU
      @ANDROIDHELPERRU  5 років тому +1

      Весь треклист в порядке очереди в конце видео

    • @NRodriges
      @NRodriges 5 років тому

      ANDROIDHELPER [UNITY3D and more] спасибо

  • @oscar343
    @oscar343 6 років тому

    Но чем тебе PHP не угодил? Я бы на его место поставил Руби например....

    • @user-cq5to1ew5g
      @user-cq5to1ew5g 6 років тому +1

      Oscar я ничего против php не имею, но он снискал свою плохую славу из-за низкокачественного кода, который в обилие пишется на этом языке. Большинство программистов знает шутку про php, именно потому я его сюда и поместил)

    • @oscar343
      @oscar343 6 років тому

      С этим я согласен но шутка довольно старая.... Впрочем забей, спасибо за инфу)

  • @MrVladikt
    @MrVladikt 4 роки тому

    Я один это под пивко смотрю?)

    • @modjaid3907
      @modjaid3907 4 роки тому

      возможно даже и с дилдаком в заднице ты не единственный

  • @stanislavadler5788
    @stanislavadler5788 2 роки тому

    Из-за шуток невозможно воспринимать это видео за что-то серьёзное

  • @alexm3212
    @alexm3212 3 роки тому

    Надо уменьшить 50% ГОВНОшуток на 1 минуту времени и будет норм видос, а пока это жалкое зрелище.

  • @TheAniKmax
    @TheAniKmax 2 роки тому

    Добавил такие строки:
    health -= EnemySpawner.Enemies[obj].Attack;
    if (health

    • @TheAniKmax
      @TheAniKmax 2 роки тому

      Добвил в EnemySpawner
      private void Awake()
      {
      DontDestroyOnLoad(this.gameObject); // Не уничтожать текущий объект при загрузки новой сцены
      }
      Все заработало, но вот, на сколько это правильно ?