Привет. Некоторые моменты в видео получились очень быстрыми, но финальную версию ролика никак не удаётся отрендерить, я увидел столько разных вариаций ошибок при рендере, сколько не видел за всё предыдущее время ведения канала. Решил оставить эту. Поэтому, ставьте паузу, если не успеваете что-то прочитать по коду или понять, надеюсь этого хватит. :)
имелось ввиду что Resources Load плох когда не при старте игры данных подгружаются? или в целом. Как по мне это идеальный метод чтобы не заниматься перетягиванием 100 вещей и прочих обьектов в поля
@@arsenbabaev1022 Resources.Load сломается, стоит переименовать или перенести файл. Но да, имелось в виду что не стоит его использовать регулярно во время игрового процесса, если только один раз на старте, то на производительность это особо не повлияет, в рамках загрузочного экрана будет выглядеть нормально.
[Тупой зануда mode on] Выражаю свое ИМХО, в этом видео ScriptableObject раскрыт не полностью, на самом деле ScriptableObject позволяет проектировать гибкую архитектуру, в частности их очень удобно использовать для применения паттернов фабрики [Тупой зануда mode off]
@@sharpes4253 согласен, у ScriptableObject множество применений, но многие кейсы весьма специфические. Им, на мой взгляд, имеет смысл посвящать отдельные видео)
Спасибо огромное! Искал именно то что ты рассказал, у других либо много воды было, либо звук который при каждом нажатии на клавишу сбивал весь настрой смотреть видео, а тут все кратко понятно, без воды, с отличным звуком!!! Спасибо!
Было бы интересно посмотреть ролик о том, где можно хранить все возможные ресурсы игры. Например, про AssetBunlles. Как его использовать в локальной игре и при этом не забивать оперативку.
SO - очень крутая тема в Unity! На основе него можно легко делать магазины в игре)) На мой взгляд, когда создаешь таким образом итемы, то было бы неплохо для них сделать кастомный инспектор, чтобы иконки лучше отображались например, или описание предмета было не в одну строчку. А в остальном, ролик на высоте!
Где хранить данные, настройки и прочие вопросы. В чем плох подход с хранением в БД? Все данные храним в БД и получаем всю мощь современной СУБД для хранения, выборки, миграции данных - никаких ограничений и решение любых задач с данными оптимальным способом. Стандарт де факто. Данные из БД один раз загружаем в класс - статический класс, при запуске игры. Доступ к статическому классу и изменения данных в нем, получаем из любого места в коде, без использования объектов, префабов, DontDestroyOnLoad и т.д. При завершении игры сохраняем данные из класса в БД. Идеально. Если нужно, можно писать/читать из БД в любое время.
Для тех, у кого будет проблема с объектом Image в InventoryWindow - в том же скрипте прописываем using UnityEngine.UI, в icon.AddComponent заменяем на , и ошибка исчезнет.
стараюсь не использовать ScriptableObject, все данные храню в json намного надежней и в некоторых местах удобней чем ScriptableObject, а геймдизайнерам вообще нечего работать в основном проекте, лучше парсер данных из екселя или гугл таблиц в json за пару минут написать, чем восстанавливать то, что смержил в гите геймдизайнер)
Да и геймдизайнеру удобнее и привычнее его гугл таблица. Но использовать повсеместно json это всё-таки странно, когда есть встроенный в движок инструмент, который за минуту позволяет создать класс параметров. Парсить везде вместо этого json и редактировать его, как мне кажется, менее удобно и оптимально.
@@insaneone-7220 на ScriptableObject могут быть проблемы по крайней мере у меня на версии юнити 2017 очень часто слетали ссылки в ScriptableObject, юнити иногда не предсказуемо себя ведет и могут быть разные краши и вылеты парсить и редактировать json только кажется, что не удобно, для парсинга использую этот ассет assetstore.unity.com/packages/tools/input-management/json-net-for-unity-11347 конечно если делать гиперказуалки или платформеры, где можно обойтись одним ScriptableObject будет не целесообразно использовать json, но в более крупных проектах уже лучше использовать json тем более если использовать json, то может просто отпасть необходимость постоянно компилировать игру или приложения ради изменения какого то параметра, тем более json можно на сервер закинуть и обновленные данные юзер будет сходу получать без обновления приложения или вообще можно сделать чтоб прям с гугл таблиц данные в игру залетали в json можно записать данные практически любой сложности со ScriptableObject так не выйдет, придется писать свои PropertyDrawer, что иногда очень трудозатратно также json удобен если планируется в игре сторонние модификации от юзеров, я например в своем проекте могу полностью изменять или добавлять юнита внося или удаляя пару строчек в json файле, тоесть игровой юнит практически полностью на лету формируется из json данных, мне не надо создавать для каждого игрового юнита отдельный префаб(я правда щас не на юнити эту игру делаю, но смысл понятен) вешать на него компоненты, все описывается в файле и это не только внешний вид, а и его поведение.
Слишком быстро, чтобы можно было что-то понять для новичка. Я то смотрю это видео потому что не знаю как это делать. А тут с такой скоростью всё идёт и переходит от одного скрипта к другому, что ничего не понятно.
Когда в инвентарь добавляется несколько топоров, то все они разные? То есть если я поменяю значение цены одного топора в инвентаре, то поменяется ли цена другого топора в этом инвентаре?
@@МихаилЕлисеев-ы8т Ну смотри. Ты можешь создать 1 ScriptableObject топора с нужными характеристиками и ценой. И поместить 3 таких топора в инвентарь. Можешь создать ещё один вид топора, у которого будут другие характеристики и цена, и положить его тоже в инвентарь. В итоге у нас будет 3 топора одного вида и один другого вида. Естественно мы можем хоть тысячу ScriptableObject-ов создать с разными параметрами. Это помогает расширять контент игры без изменения кода и других вещей. Ну и это удобнее, чем задавать это в коде или в инспекторе.
@@tnak7947 подскажите пж , мне надо так называемые way pointы создавать , на них варианты поведения для объекта , у каждого wp одинаковые свойства для однотипных объектов , сейчас я просто размножаю префаб этого wp с навешанным на него скриптом - те ставится множество wp и у каждого разные значения свойств , не могу тупо уловить переходить ли на SO ? , когда то смотрел изучал его , но че то чую опять неделька улетит пока разберешься по новой) спс
@@BastionKadabr Да, можно переходить. В данном случае вы можете не только вывести свойства/данные в SO, но и вынести поведение. Я вроде даже видел тутор у CodeMonkey, где он делал такую систему с WayPoint-ами, чтобы легко создавать "скрипты" (для кат-сцен например) поведений в сцене, не написав ни одной строчки кода.
привет, понравился урок, правильно ли понимаю, что ScriptableObject следует использовать только когда нужно сохранить данные при переходе между сценами, а то что хранится в одной сцене можно и в обычных переменных
и подойдет ли такой подход для условного клона доты(пример для понимания), типа храним все абилки персонажа, все предметы из магазина, в таких вот ScriptableObject? но в таком случае же не нужно переносить обьект из сцены в сцену по этому подойдет ли такой подход?
Непосредственного отношения к переходу между сценами ScriptableObject не имеет. В контексте урока - это просто удобное хранилище любых данных, в том числе абилок, параметров предметов и прочего. Альтернатив, которые были бы удобнее, в Unity нет. Можно использовать свой формат, но нужно понимать, для чего ты это делаешь, иначе, ScriptableObject - основной инструмент для этой цели.
Не работает. Бился часа 4. Метод привлекательный, но похоже до ума не доведен. Уже на 3м скрипте начинается лажа. объекты не добавляются на панель. Все прочекал. Код до милиметров 1 в 1 переписал, хотя бы чтобы понимать как должно работать. Все скрипты развесил как указано в видео. Не работает.
А в объект на сцене никак нельзя добавить префаб? У меня на сцене находится объект с картинкой у которого есть скрипт с триггером, после которого он должен прикрепленный к нему префаб добавить в инвентарь игрока
Редко вижу, когда используют SerializeReference. 2:37 - Почему именно SerializeField, а не SerializeReference? Буду благодарен, если кто-то пояснит, может я что-то не понимаю и в данном случае ссылочный и значимый тип имеют свои обусловленности?
Можешь посмотреть в доках Unity, что сериализует SerializeField. Если класс, наследуется от MonoBehaviour, то проблем нет. Проблемы возникают, когда нужно сериализовать какую-то ссылку в виде интерфейса или абстрактного класса или любого класса, не наследуемого от UnityEngine.Object. Т.е ты в коде пишешь это: [SerializeField] private IKeyboard _keyboard; Но SerializeField не позволяет такое сериализовать. Поэтому юзают SerializeReference, который недавно появился: [SerializeReference] private IKeyboard _keyboard; И теперь оно сериализуется и ты можешь в инспекторе перетащить любой компонент, который реализует интерфейс IKeyboard.
Как записать список InventoryItems в PlayerPrefs? Нужно сохранения инвентаря, я пытался записать InventoryItems в PlayerPrefs через json, но у меня нечего не получилось
Привет всем, помогите пожалуйста с Google Play services, какой ключ SHA1 использовать: из консоли на компе или из Google Console, чтобы скачанная с гугл плей игра проходила авторизацию в гугл сервисах.
Привет, я пробовал создавать с помощью ScriptableObject листы с характеристиками предметов. Примерно как у вас. Но оно шикарно работает когда эти характеристики неизменяемые. Если же характеристику изменять - я не знаю как сделать оптимально. Например нужно создать топор. Я записываю в ScriptableObject всю информацию о нём: урон, цена продажи, модель в виде префаба и прочность оружия. Но если в игре топоров 5, мне для каждого нужно создавать свой ScriptableObject, т.к. ломаются топоры не одинаково быстро. А если топоров 100? 1000? Если оставлять один ScriptableObject, то естественно смена значения поля "Прочность" ведёт к смене её у всех топоров. Как в этом случае оптимально поступать?
В случае, если все топоры ломаются с разной скоростью, то тут дело не в подходе к редактированию данных, это будет долго в любом виде. Если есть несколько разных вариантов поломки, то можно сделать отдельный тип ScriptableObject, который будет описывать прогресс поломки, сделать нужное количество вариаций, потом группами выделять топоры к которым оно применимо, и задавать просто туда ссылкой этот новый ассет. Если это простая характеристика по типу float или подобное числовое значение, то смысла делать отдельный ScriptableObject-тип нет, проще сделать какое-то хранилище со списком таких значений, а в параметрах топора задавать id нужной поломки в этом списке или нечто подобное.
У меня такая же проблема, автор чуть позже показывает что он исправил в коде несколько строк и не показал этого сразу. Но у меня тоже всё равно не работает.
Скорее всего не все поправили. Он в Inventory Start() на Awake() заменил, иначе предметы из стартового набора не успевают попасть в инвентарь до его вывода в панели. И в методе Redraw() должна быть строка icon.transform.SetParent(itemsPanel); чтобы иконка попала в панель
За идею - спасибо. А вот как пошаговая инструкция - имеет миллион ошибок и к использованию не подлежит. Корректней было бы строить абстрактный урок о ScriptableObject без демонстрации последовательности. Каким волшебным способом созданные спрайты(gameObject) попадают itemsPanel без указания родителя? Или что/кто инициализирует функцию Redrow() которая просто висит где-то на объекте и тд.
Я, наверное, опоздал с вопросом, но всё же: что делать, если есть несколько типов предметов, и у каждого свои параметры? У оружия - урон, у еды - насыщение и тд. Как поступить в данной ситуации? Я делал персональные параметры с помощью dictionary, а как правильно - не знаю.
Как вариант - сделать базовый класс Item, а от него наследовать несколько разных типов предметов. Это первое, что на ум приходит, так вариантов конечно много, и через композицию можно, и просто засунуть все параметры в один класс и по какому-нибудь enum кастомно их выводить в настройках) Как больше удобно в конкретной ситуации, так и стоит делать, единственно правильного варианта точно не существует.
Подскажите пожалуйста выводит 2 ошибки что делать? (1. 'Inventory' does not contain a definition for 'InventoryItems' and no accessible extension method 'InventoryItems' accepting a first argument of type 'Inventory' could be found (are you missing a using directive or an assembly reference?) 2.The type or namespace name 'Image' could not be found (are you missing a using directive or an assembly reference?))
Норм ролики у тебя. Но блин ты когда кд допечатал, оставь хотя бы на две секунды, чтоб успеть разглядеть что там, итак эта штука маячит весь код закрывает, так потом шлеп и все уже другой кадр. Приходится отлавливать паузой. А так как все молниеносно иногда приходится ползунок дуда сюда таскать. Это практически всегда так. Начало напрягать блин. А в остальном контент супер! Спасибо!
Отличный контент для тех кто уже шарит за программирование и просто меняет технологию, для совсем новичков конечно лучше подыскать что нибудь более разжеванное.
Вот так всегда - у одного получасовой ролик с кучей ненужной инфы, у другого 5 минут практически без разбора кода. 3 года в геймдеве, а скриптаблы походу не выучу
Привет. Некоторые моменты в видео получились очень быстрыми, но финальную версию ролика никак не удаётся отрендерить, я увидел столько разных вариаций ошибок при рендере, сколько не видел за всё предыдущее время ведения канала. Решил оставить эту. Поэтому, ставьте паузу, если не успеваете что-то прочитать по коду или понять, надеюсь этого хватит. :)
Пожалуйста, продолжай делать видео, у тебя очень круто получается. Качество просто на высоте и уроки очень полезные)
имелось ввиду что Resources Load плох когда не при старте игры данных подгружаются? или в целом. Как по мне это идеальный метод чтобы не заниматься перетягиванием 100 вещей и прочих обьектов в поля
@@arsenbabaev1022 Resources.Load сломается, стоит переименовать или перенести файл. Но да, имелось в виду что не стоит его использовать регулярно во время игрового процесса, если только один раз на старте, то на производительность это особо не повлияет, в рамках загрузочного экрана будет выглядеть нормально.
[Тупой зануда mode on] Выражаю свое ИМХО, в этом видео ScriptableObject раскрыт не полностью, на самом деле ScriptableObject позволяет проектировать гибкую архитектуру, в частности их очень удобно использовать для применения паттернов фабрики [Тупой зануда mode off]
@@sharpes4253 согласен, у ScriptableObject множество применений, но многие кейсы весьма специфические. Им, на мой взгляд, имеет смысл посвящать отдельные видео)
Ждем новых видосов. Я бы и стрим/вебинар посмотрел. Толковых людей мало.
Спасибо огромное! Искал именно то что ты рассказал, у других либо много воды было, либо звук который при каждом нажатии на клавишу сбивал весь настрой смотреть видео, а тут все кратко понятно, без воды, с отличным звуком!!! Спасибо!
Лучший, спасибо! Отлично объяснил, помогло мне очень! (у тебя хороший тембр голоса для видео, приятный)
В очередной раз удостоверился, что ты лучший. Максимально просто объясняешь, продолжай в том же духе! Однозначно лайк
Я в ах***е. Я за 6 минут видоса увидел столько полезной и хорошо объясненной информации.... Крепкого тебе здоровья и удачи. А с меня лайк и подписка.
Отличное видео! Для меня было всё просто и понятно, но для многих оно покажется слишком быстрым и маленьким)
Было бы интересно посмотреть ролик о том, где можно хранить все возможные ресурсы игры. Например, про AssetBunlles. Как его использовать в локальной игре и при этом не забивать оперативку.
Полезные ролики, спасибо. Но первый раз за все время пользования ютубом, приходиться не ускорять видео, а замедлять
SO - очень крутая тема в Unity!
На основе него можно легко делать магазины в игре))
На мой взгляд, когда создаешь таким образом итемы, то было бы неплохо для них сделать кастомный инспектор, чтобы иконки лучше отображались например, или описание предмета было не в одну строчку.
А в остальном, ролик на высоте!
Для этого есть ассет Odin Inspector
@@bros_os чувак, два года прошло, я даже не знал тогда, что есть такой ассет.
@@psy_gamer бляяяя, сори
"Ничего не рекомендуется" но мы это делаем) Ну хотяб описал бы причину почему не рекомендуется)
Максимально быстро и непонятно. Спасибо, что заставил ставить на паузу каждую секунду видео чтобы понять, что ты вообще сделал в инспекторе
благодарности
лаконично, с чувством и расстановкой
Где хранить данные, настройки и прочие вопросы. В чем плох подход с хранением в БД? Все данные храним в БД и получаем всю мощь современной СУБД для хранения, выборки, миграции данных - никаких ограничений и решение любых задач с данными оптимальным способом. Стандарт де факто.
Данные из БД один раз загружаем в класс - статический класс, при запуске игры. Доступ к статическому классу и изменения данных в нем, получаем из любого места в коде, без использования объектов, префабов, DontDestroyOnLoad и т.д. При завершении игры сохраняем данные из класса в БД.
Идеально. Если нужно, можно писать/читать из БД в любое время.
Спасибо.Сними видео про свет
Я ждал видос на эту тему, спасибо!
Твой голос очень похож на голос ютубера по игре VALORANT "embrace me"
Самое полезное видео , которое я когда-либо видел .
Отличный материалл! Приятно слушать
Очень полезно, спасибо за ролик!
Для тех, у кого будет проблема с объектом Image в InventoryWindow - в том же скрипте прописываем using UnityEngine.UI, в icon.AddComponent заменяем на , и ошибка исчезнет.
стараюсь не использовать ScriptableObject, все данные храню в json намного надежней и в некоторых местах удобней чем ScriptableObject, а геймдизайнерам вообще нечего работать в основном проекте, лучше парсер данных из екселя или гугл таблиц в json за пару минут написать, чем восстанавливать то, что смержил в гите геймдизайнер)
Да и геймдизайнеру удобнее и привычнее его гугл таблица. Но использовать повсеместно json это всё-таки странно, когда есть встроенный в движок инструмент, который за минуту позволяет создать класс параметров. Парсить везде вместо этого json и редактировать его, как мне кажется, менее удобно и оптимально.
@@insaneone-7220 на ScriptableObject могут быть проблемы по крайней мере у меня на версии юнити 2017 очень часто слетали ссылки в ScriptableObject, юнити иногда не предсказуемо себя ведет и могут быть разные краши и вылеты
парсить и редактировать json только кажется, что не удобно, для парсинга использую этот ассет assetstore.unity.com/packages/tools/input-management/json-net-for-unity-11347
конечно если делать гиперказуалки или платформеры, где можно обойтись одним ScriptableObject будет не целесообразно использовать json, но в более крупных проектах уже лучше использовать json
тем более если использовать json, то может просто отпасть необходимость постоянно компилировать игру или приложения ради изменения какого то параметра, тем более json можно на сервер закинуть и обновленные данные юзер будет сходу получать без обновления приложения или вообще можно сделать чтоб прям с гугл таблиц данные в игру залетали
в json можно записать данные практически любой сложности со ScriptableObject так не выйдет, придется писать свои PropertyDrawer, что иногда очень трудозатратно
также json удобен если планируется в игре сторонние модификации от юзеров, я например в своем проекте могу полностью изменять или добавлять юнита внося или удаляя пару строчек в json файле, тоесть игровой юнит практически полностью на лету формируется из json данных, мне не надо создавать для каждого игрового юнита отдельный префаб(я правда щас не на юнити эту игру делаю, но смысл понятен) вешать на него компоненты, все описывается в файле и это не только внешний вид, а и его поведение.
Мое почтение 🤝:) Понятно обьясняешь 👍
Слишком быстро, чтобы можно было что-то понять для новичка. Я то смотрю это видео потому что не знаю как это делать. А тут с такой скоростью всё идёт и переходит от одного скрипта к другому, что ничего не понятно.
жаль месяц назад, я об этом не знал)
Доброго времени суток, у меня есть конкретный предмет на сцене с boxcolaider, как тогда использовать scriptableobject?
Классный видос!
Все сделал как на видео, ушел от всех ошибок, а предметы не хотят появляться( что за UI объект был взят за основу для itemsPanel?
Когда в инвентарь добавляется несколько топоров, то все они разные? То есть если я поменяю значение цены одного топора в инвентаре, то поменяется ли цена другого топора в этом инвентаре?
Да, поменяется
@@tnak7947 И в чем тогда смысл?) Спасибо
@@МихаилЕлисеев-ы8т Ну смотри. Ты можешь создать 1 ScriptableObject топора с нужными характеристиками и ценой. И поместить 3 таких топора в инвентарь. Можешь создать ещё один вид топора, у которого будут другие характеристики и цена, и положить его тоже в инвентарь.
В итоге у нас будет 3 топора одного вида и один другого вида. Естественно мы можем хоть тысячу ScriptableObject-ов создать с разными параметрами.
Это помогает расширять контент игры без изменения кода и других вещей. Ну и это удобнее, чем задавать это в коде или в инспекторе.
@@tnak7947 подскажите пж , мне надо так называемые way pointы создавать , на них варианты поведения для объекта , у каждого wp одинаковые свойства для однотипных объектов , сейчас я просто размножаю префаб этого wp с навешанным на него скриптом - те ставится множество wp и у каждого разные значения свойств , не могу тупо уловить переходить ли на SO ? , когда то смотрел изучал его , но че то чую опять неделька улетит пока разберешься по новой)
спс
@@BastionKadabr Да, можно переходить. В данном случае вы можете не только вывести свойства/данные в SO, но и вынести поведение. Я вроде даже видел тутор у CodeMonkey, где он делал такую систему с WayPoint-ами, чтобы легко создавать "скрипты" (для кат-сцен например) поведений в сцене, не написав ни одной строчки кода.
Спасибо за видос, очень полезно
Ничего не понятно, половину действий пропустил, спасибо!
Очень круто!! Прям точку
привет, понравился урок, правильно ли понимаю, что ScriptableObject следует использовать только когда нужно сохранить данные при переходе между сценами, а то что хранится в одной сцене можно и в обычных переменных
и подойдет ли такой подход для условного клона доты(пример для понимания), типа храним все абилки персонажа, все предметы из магазина, в таких вот ScriptableObject? но в таком случае же не нужно переносить обьект из сцены в сцену по этому подойдет ли такой подход?
Непосредственного отношения к переходу между сценами ScriptableObject не имеет. В контексте урока - это просто удобное хранилище любых данных, в том числе абилок, параметров предметов и прочего. Альтернатив, которые были бы удобнее, в Unity нет. Можно использовать свой формат, но нужно понимать, для чего ты это делаешь, иначе, ScriptableObject - основной инструмент для этой цели.
@@insaneone-7220 благодарю , еще почитал, уже понял)
Да уж. Можно еще побыстрее? На отматывание 10-15 минут прошло + ничего не получилось
Попробуй скорость видео меньше поставить
Так это не урок
Не работает. Бился часа 4. Метод привлекательный, но похоже до ума не доведен. Уже на 3м скрипте начинается лажа. объекты не добавляются на панель. Все прочекал. Код до милиметров 1 в 1 переписал, хотя бы чтобы понимать как должно работать. Все скрипты развесил как указано в видео. Не работает.
Аналогично, не понимаю, что запускает метод Redraw();....
А в объект на сцене никак нельзя добавить префаб? У меня на сцене находится объект с картинкой у которого есть скрипт с триггером, после которого он должен прикрепленный к нему префаб добавить в инвентарь игрока
Вы не знаете почему у меня с каждым разом при нажатии на E прибавляется всё больше и больше предметов?
Спасибо, это бы здорово))
Редко вижу, когда используют SerializeReference. 2:37 - Почему именно SerializeField, а не SerializeReference? Буду благодарен, если кто-то пояснит, может я что-то не понимаю и в данном случае ссылочный и значимый тип имеют свои обусловленности?
Можешь посмотреть в доках Unity, что сериализует SerializeField. Если класс, наследуется от MonoBehaviour, то проблем нет. Проблемы возникают, когда нужно сериализовать какую-то ссылку в виде интерфейса или абстрактного класса или любого класса, не наследуемого от UnityEngine.Object.
Т.е ты в коде пишешь это:
[SerializeField] private IKeyboard _keyboard;
Но SerializeField не позволяет такое сериализовать. Поэтому юзают SerializeReference, который недавно появился:
[SerializeReference] private IKeyboard _keyboard;
И теперь оно сериализуется и ты можешь в инспекторе перетащить любой компонент, который реализует интерфейс IKeyboard.
Как записать список InventoryItems в PlayerPrefs? Нужно сохранения инвентаря, я пытался записать InventoryItems в PlayerPrefs через json, но у меня нечего не получилось
Очень крутой видеоролик, спасибо!
Всегда хотел туториал по этой штуке
Спасибо огромное!!
Привет всем, помогите пожалуйста с Google Play services, какой ключ SHA1 использовать: из консоли на компе или из Google Console, чтобы скачанная с гугл плей игра проходила авторизацию в гугл сервисах.
Можно ли как-то стакать предметы через ScriptableObject?
Можешь пожалуйста подсказать как узнать айди материала?
Привет, я пробовал создавать с помощью ScriptableObject листы с характеристиками предметов. Примерно как у вас. Но оно шикарно работает когда эти характеристики неизменяемые. Если же характеристику изменять - я не знаю как сделать оптимально. Например нужно создать топор. Я записываю в ScriptableObject всю информацию о нём: урон, цена продажи, модель в виде префаба и прочность оружия. Но если в игре топоров 5, мне для каждого нужно создавать свой ScriptableObject, т.к. ломаются топоры не одинаково быстро. А если топоров 100? 1000? Если оставлять один ScriptableObject, то естественно смена значения поля "Прочность" ведёт к смене её у всех топоров. Как в этом случае оптимально поступать?
В случае, если все топоры ломаются с разной скоростью, то тут дело не в подходе к редактированию данных, это будет долго в любом виде. Если есть несколько разных вариантов поломки, то можно сделать отдельный тип ScriptableObject, который будет описывать прогресс поломки, сделать нужное количество вариаций, потом группами выделять топоры к которым оно применимо, и задавать просто туда ссылкой этот новый ассет. Если это простая характеристика по типу float или подобное числовое значение, то смысла делать отдельный ScriptableObject-тип нет, проще сделать какое-то хранилище со списком таких значений, а в параметрах топора задавать id нужной поломки в этом списке или нечто подобное.
У меня почему-то не работает вывод предметов на экран. Ошибок нет, все делал по туториалу. Таймкод - 3:03
У меня такая же проблема, автор чуть позже показывает что он исправил в коде несколько строк и не показал этого сразу. Но у меня тоже всё равно не работает.
Скорее всего не все поправили. Он в Inventory Start() на Awake() заменил, иначе предметы из стартового набора не успевают попасть в инвентарь до его вывода в панели. И в методе Redraw() должна быть строка icon.transform.SetParent(itemsPanel); чтобы иконка попала в панель
@@АлексейШтерн-г7я Спасибо большое. Твой коммент очень помог
То же самое - час бился. Смог одолеть только создав префаб имэджа, который инстантиирую вместо просто создания нового геймобджекта
@@АлексейШтерн-г7я Спасибо большое за вашу поддержку новичков.
Какой редактор ты используешь?
JetBrains Rider
За идею - спасибо. А вот как пошаговая инструкция - имеет миллион ошибок и к использованию не подлежит. Корректней было бы строить абстрактный урок о ScriptableObject без демонстрации последовательности.
Каким волшебным способом созданные спрайты(gameObject) попадают itemsPanel без указания родителя? Или что/кто инициализирует функцию Redrow() которая просто висит где-то на объекте и тд.
Я, наверное, опоздал с вопросом, но всё же: что делать, если есть несколько типов предметов, и у каждого свои параметры? У оружия - урон, у еды - насыщение и тд. Как поступить в данной ситуации? Я делал персональные параметры с помощью dictionary, а как правильно - не знаю.
Как вариант - сделать базовый класс Item, а от него наследовать несколько разных типов предметов. Это первое, что на ум приходит, так вариантов конечно много, и через композицию можно, и просто засунуть все параметры в один класс и по какому-нибудь enum кастомно их выводить в настройках) Как больше удобно в конкретной ситуации, так и стоит делать, единственно правильного варианта точно не существует.
@@insaneone-7220 спасибо большое за ответ)
Те кто жалуются что быстро. А поставить скоромть воспроизведение поменьше нельзя?
Делать так не рекомендуется - но кого это останавливает, логика крутая
Подскажите пожалуйста выводит 2 ошибки что делать? (1. 'Inventory' does not contain a definition for 'InventoryItems' and no accessible extension method 'InventoryItems' accepting a first argument of type 'Inventory' could be found (are you missing a using directive or an assembly reference?) 2.The type or namespace name 'Image' could not be found (are you missing a using directive or an assembly reference?))
по моему перед InventoryItems нужно убрать [SerializeField] и поставить public, а вторая ошибка ты просто не указал image
@@ipeget 👍
Норм ролики у тебя. Но блин ты когда кд допечатал, оставь хотя бы на две секунды, чтоб успеть разглядеть что там, итак эта штука маячит весь код закрывает, так потом шлеп и все уже другой кадр. Приходится отлавливать паузой. А так как все молниеносно иногда приходится ползунок дуда сюда таскать. Это практически всегда так. Начало напрягать блин. А в остальном контент супер! Спасибо!
Прочитай пожалуйста закреплённый комментарий) В следующих видео буду это учитывать.
@@insaneone-7220 что то ты как то не надежно прикрепил коментарий))) спасибо за труд, смотрю сейчас про оптимизацию ролики твои🙂
@@eugenekrutoy1475 Ютуб шутить изволил, я точно помню, что закреплял :D
Отличный контент для тех кто уже шарит за программирование и просто меняет технологию, для совсем новичков конечно лучше подыскать что нибудь более разжеванное.
а где скрипты посмотреть?
Чего-то я вообще не понял, что за метод "Redraw", где он вызывается, потому что мне он бьёт ошибки ?
не показали этого в видео)
Привет, тебе можно заказать работу ?
Что у тебя за программа для написания кода?
JetBrains Rider
Вот так всегда - у одного получасовой ролик с кучей ненужной инфы, у другого 5 минут практически без разбора кода. 3 года в геймдеве, а скриптаблы походу не выучу
было бы неплохо если бы ты заливал код с урока на гит, чтобы можно было взять в проект без переписывания по видео
@bitmap дивжоп
ЯРОСНА СОГЛАСЕН С КОММЕНТЕРОМ НИЖЕ
Как то странно это всё
у меня статический класс
Ну правильный способ тебе подсказали
Тоже вариант, но я постепенно ушёл от использования статик класса для такой цели после того, как узнал о ScriptableObject)
Че нагарадил.. Ты для кого видео снимаешь.. Для гуру юнити которые и так все знают..
Очень быстро.