Тёмный

ScriptableObject в Unity на примере информации о сундуках 

Лавка Разработчика
Подписаться 12 тыс.
Просмотров 20 тыс.
50% 1

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

 

26 окт 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 77   
@Roman_SBB
@Roman_SBB 3 года назад
Спасибо, что увеличиваешь окно IDE, на телефоне тоже код видно👍
@nikto_hin897
@nikto_hin897 2 года назад
4 видео пол статьи прочитал , и наконец тихий и спокойный подробный разбор , спасиба , не досмотрел но уже нравиться
@nikto_hin897
@nikto_hin897 2 года назад
жаль что походу это не то что мне нужно (грусный смайлик)
@artemignat7764
@artemignat7764 3 года назад
По моему мнению твой канал самый полезный, среди русскоязычных туториалов.
@vicmeateater5508
@vicmeateater5508 3 года назад
Спасибо за видео! В который раз убеждаюсь, что канал просто находка! Единственное, пока слушаешь всё понятно, но если бы еще явные примеры были, как это применять в игре, было бы супер. Я например открываю проект и начинаю тупить, не знаю, как впихнуть знания ))) Наверно у всех ньюфагов такая беда. Вообще бы запилить стрим, создание простенькой игры с 0. Видел зарубежные коллеги такое практикуют.
@gamedevlavka
@gamedevlavka 3 года назад
Про то, как применять в игре - услышал, подумаю, как можно сделать. А вот со стримом - сложности, т.к. мой контент направлен на развитие мышления разработчика, чтобы потом получить работу или самому делать игры. За один стрим игру с хорошим кодом не напишешь)
@vicmeateater5508
@vicmeateater5508 3 года назад
@@gamedevlavka Спасибо за ответ. Согласен, концепцию канала не надо менять, большая редкость в РУ сегменте. Планируются видео про MVC + Unity? Весьма актуальная тема, т.к. подавляющее большенство RU Unity (Рунити %)) ) разработчиков, которые решились перейти на архитектуру, используют именно MVC... А по ECS?
@gamedevlavka
@gamedevlavka 3 года назад
@@vicmeateater5508 Когда-нибудь и до них руки дойдут :)
@azogblog
@azogblog 7 месяцев назад
Спасибо, было очень полезно!
@Lord53711
@Lord53711 9 дней назад
Ты гений реально
@EAGames_unity
@EAGames_unity 2 года назад
Если что то непонятно с миллиарда других гайдов, заходишь на данный канал, находишь нужную тему, если такая имеется и все становится легче, проще, понятней и интересней). Уже не раз выручал в этом плане. Конечно изначально все пытаются находить инфу на живых примерах, и я так же, но почти всегда, на живых примерах объсняется менее понятно и доступно, чем это делаешь ты)
@vssq
@vssq Год назад
Спасибо большое! Всё понятно и приятно объясняешь. Я так понимаю на эти объекты универсальные характеристики накидываются и используются в игре
@requiem_for_a_dream5463
@requiem_for_a_dream5463 2 года назад
Спасибо за видео. Впринципе осталось только цену придумать легендарному и редкому сундукам и можно в Юбисофт идти.
@GGamess
@GGamess 2 года назад
жесть, насколько просто вы объяснили сложную для понимания модель сохранения данных)
@fjas5925
@fjas5925 7 месяцев назад
Так в каком месте оно сложное? Но да, автор очень хорошо объясняет тему
@atmgaming096
@atmgaming096 2 года назад
Очень короткое, но полезное видео
@EAGames_unity
@EAGames_unity 3 года назад
Отличный материал!
@GamDevRus
@GamDevRus 2 года назад
Крутая тема!!!
@toxicknight3079
@toxicknight3079 3 года назад
Позволю себе пару замечаний: 1. Писать this в свойствах (например this._id) не нужно. Нижнее подчеркивание в именах приватных полей как раз и пишут, чтобы не нужно было постоянно писать "this". 2. Свойства принято именовать с большой буквы. Рад, что нашел твой канал, очень круто и понятно объясняешь, и видео выходят чуть ли не каждый день. Спасибо :)
@gamedevlavka
@gamedevlavka 3 года назад
Отвечу на пару замечаний) 1. this я пишу всегда в локальных переменных. Почему? Об этом я писал в телеграм канале тут t.me/gamedevlavka/15. Нижнее подчеркивание я использую тогда, когда нужно использовать такое же имя, как у свойства, но чтобы я мог менять его через редактор. 2. Так принято в венгерской нотации (по классике), да. Однако, внутри Unity все свойства пишутся с маленькой буквы, и чтобы мой код не отличался от кода Unity, я решил, что также буду использовать маленькую первую букву и для свойств. Спасибо за комментарий :)
@toxicknight3079
@toxicknight3079 3 года назад
@@gamedevlavka, тут скорее момент, что если пойти работать на дядю, то там обычно придерживаются код стайла C#, поэтому может быть неприятно переучиваться. Лично я для себя выбрал сразу привыкнуть к общепринятому именованию, чтоб меньше головняка было.
@gamedevlavka
@gamedevlavka 3 года назад
@@toxicknight3079 я и есть такой дядя :)
@Dmittry
@Dmittry Год назад
@@toxicknight3079 У разных дядь разные кодстайлы приняты. Есть стиль, который больше похож на Джаву, есть, который Майкрософт у себя написала. Например, лично мне открывающая фигурная скобка на новой строке кажется менее удобной, чем в конце предыдущей (вместо увеличения читабельности варит лапшу). И я видел много на Ютубе, кто пишет в джавовском стиле, кто в смешанном, кто по Майкрософту. Так что если ты придерживаешься хоть какого-то более-менее распространённого и адекватного стиля, то уже хорошо. Тут нет единого железобетонного стандарта. И стиль Майкрософта нравится далеко не всем.
@sergeyvvedenskyi4866
@sergeyvvedenskyi4866 2 года назад
Видео очень информативное, твой канал очень помогает развиваться в данной сфере, остался один вопрос, по функциональности очень похожу на обычный префаб, так чем отличается ScriptableObject от Prefab ?
@artemkorotkov9770
@artemkorotkov9770 3 года назад
СПАСИБО!!!!
@misenikolai9032
@misenikolai9032 Год назад
спасибо
@ИванМартыненко-х8к
@ИванМартыненко-х8к 9 месяцев назад
вопрос... Ну мало ли время будет на глупые вопросы. var _hero = Resources.Load(""); пытался так вот файлик получить прилетает null. то есть если его в инспекторе прокидываешь все работает. если собираешь в массив все работает. а если просто в переменную пытаюсь закинуть то нифига не работает ...странно просто как то
@liorgisoritto8495
@liorgisoritto8495 3 года назад
Андрей, добрый день. Спасибо за видео. А можете еще рассказать, как переносить данные из сцены в сцену. Например, мы прошли уровни и заработали монеты и рубины. Когда мы вернулись на главную карту после уровня, заработанные монеты и рубины добавились к их общему количеству. Думаю подобное очень актуально, заранее спасибо ❤
@gamedevlavka
@gamedevlavka 3 года назад
Это вопрос архитектуры, доберёмся и до него!
@АлександрБычко-п9ъ
Ну по идее используя Scriptable object это легко реализуется, т.к. они сохраняют все данные на жёстком диске.
@tomasgammister5776
@tomasgammister5776 2 года назад
@@АлександрБычко-п9ъ слышал про то что они не попадают в билд. Может не правильно понял...
@KadykovDenis
@KadykovDenis Год назад
я так и не понял для чего нужен этот гемор? Почему просто в обыкновенном префабе в проекте не держать ссылку на иконку сундука, саму 3д модель, сколько монет он содержит и многое другое?
@Slowedyandexsound
@Slowedyandexsound Год назад
Вот у меня задача при смене оружия, чтобы патроны одного оружия не ссылались на уже патроны другого оружия, тут подойдет ScriptableObject?
@vlader776
@vlader776 Год назад
Добрый день, появился вопрос по ScriptableObject. Создал с помощью ScriptableObject описание оружия для шутера, в котором хранится префаб оружия, скорострельность, обьем магазина и метод стрельбы через Raycast. На основе данного шаблона создал ассет винтовки. Создал скрипт, который принимает в поле данную винтовку и вызывает метод Shoot(), у Player через инпут, а у Enemy, если в его поле видимости зашел Player, однако при нажатии кнопки выстрела стреляет только оружие врага, при этом если войти в поле видимости враг тоже стреляет! Решил продублировать ассет винтовки и дать врагу, то все работает как было задумано.
@ThePirateHistory
@ThePirateHistory 3 года назад
Зачем SerializedField так и не понял, посмотрел фулл видос, обещание словил что дальше объяснение будет и все, так же почему с нижним подчеркиванием тоже не понятно, насколько я знаю допустим из питона нижние подчеркивание, при импорте import library не импортирует то что написано с нижним подчеркиванием.
@gamedevlavka
@gamedevlavka 3 года назад
Хороший вопрос. Ответ писал тут: t.me/gamedevlavka/13
@aleksey2793
@aleksey2793 9 месяцев назад
А почему _id здесь string, а не enum?
@vicktoriashepard
@vicktoriashepard 2 года назад
Хм, про безопасность полей это вполне очевидно, но архитектура на so подразумевает запись данных в поля. С префиксом [nonserialised] дабы не сохранять данные из runtime в ассете. Да и вопрос что можешь сказать по архитектуре на SO ? Плюсы, минусы? Спасибо за видео!
@nightyonetwothree
@nightyonetwothree 2 года назад
для записи лучше использовать методы для тех же полей, что бы логика записи данным была внутри самого объекта и он мог валидировать всё
@MrGoldorange
@MrGoldorange 3 года назад
Все никак не возьму в толк, по сути единственное преимущество и надобность(перед просто префабом) в том что можно создавать их из меню?
@gamedevlavka
@gamedevlavka 3 года назад
Префаб - шаблон игрового объекта. ScriptableObject - объект с информацией, конфиг, он нужен для хранения информации. У одного не может быть преимущества перед другим, потому что они созданы для разных целей. Конечно, ты можешь сделать конфиг и в качестве префаба, но это все равно что из пушки по воробъям стрелять.
@MrGoldorange
@MrGoldorange 3 года назад
@@gamedevlavka огромное спасибо что отвечаешь и объясняешь!)
@ec6189
@ec6189 2 года назад
@@gamedevlavka А почему не создать просто класс Config ? Для чего нужен именно ScriptableObject, пока вижу преимущество только в том, что: 1. Его не нужно инициализировать (Но это решается на уровне архитектуры, создаем объектный пулл и инжектим туда) 2. Можно добавить в контекстное меню
@NewUser78654
@NewUser78654 8 месяцев назад
Скажу сразу - в ООП программировании далеко не джун. Изучаю юнити. И зачем ScriptableObject? Нам нужен сундук. Пишем скрипт для сундука, указываем в нем необходимые поля (сериализуемые-доступные из редактора), скрипт прикрепляем к сундуку. Всё. Один сундук в префабах, к нему подключен скрипт. Там есть выпадающее поле (enum) какой это сундук (обычный, необычный и т.д.). Удобно. Никаких меню с 1000 сундуков, кучи объектов в ресурсах и т.д. Смысл ScriptableObject?
@goga19980
@goga19980 3 года назад
Кстати, в чем разница private void Start() от void Start()?
@gamedevlavka
@gamedevlavka 3 года назад
Функционально - ни в чем. Дело в читабельности. Писал об этом тут => t.me/gamedevlavka/7
@goga19980
@goga19980 3 года назад
@@gamedevlavka на телегу подписан, не листал:D Теперь стоит))) Ну вообще я их не писал только в Start Update и подобных, так, в принципе, это логично)
@-._63
@-._63 2 года назад
Но что лучше использовать? Структуры или SO?
@gamedevlavka
@gamedevlavka 2 года назад
Это разные типы данных для разных задач. SO для хранения и использования конфигурации, структуры - для быстрого и наименее ресурсозатратного использования данных. Кроме того, SO - ссылочный тип, а структуры - значимый, со всеми вытекающими последствиями. Для более детального понимания рекомендую глянуть видео с типами данных на канале
@АлександрБычко-п9ъ
Ну по сути scriptable object это сериализуемая структура получается. За исключением того что можно создавать обьекты в юнити.
@Degril
@Degril 2 года назад
через [field: serializeFIled] можно сериализовать проперти, и не придется писать каждый раз пару филд + проперти.
@gamedevlavka
@gamedevlavka 2 года назад
Автопроперти - это фишка C#, но она еще не была официально добавлена в Unity, что означает, она работает нестабильно. Например, существуют проблемы с переопределением свойств в Prefab Variants.
@andrewalexart
@andrewalexart 2 года назад
Не совсем понятно. Если пишешь [serialisable field] для private переменной то ведь ты и так можешь менять значения ТОЛЬКО в инспекторе. Или я не так что то понял...
@isoldpower
@isoldpower 2 года назад
все верно, только вот получать данные публично тоже надо. В этом и проблема
@VonBreuss
@VonBreuss 3 года назад
А почему Вы всегда явно пишите слово private? Отсутствие модификатора доступа вообще ведь тоже самое, что и private. Т.е. чуточку короче запись получается.
@gamedevlavka
@gamedevlavka 3 года назад
В таком случае отсутствия private методы и переменные уже не выглядят унифицировано, а следовательно при беглом чтении кода создается маленький хаос в голове. Удобнее читать, когда все методы и переменные выглядят одинаково. Это такой маааленький пенёк, об который спотыкаешься при чтении, если не писать.
@developerazcom
@developerazcom 3 года назад
стоит ли применить принципы СОЛИД в Юнити?
@gamedevlavka
@gamedevlavka 3 года назад
Обязательно!
@developerazcom
@developerazcom 3 года назад
@@gamedevlavka а в будушем в вашим канале будет такое видео где покажете приминение солид в скирптах юнити?
@gamedevlavka
@gamedevlavka 3 года назад
@@developerazcom SOLID Применяется независимо, в юнити ты работаешь или нет. Но устроить можно.
@developerazcom
@developerazcom 3 года назад
@@gamedevlavka было бы круто
@ДимаЕфремов-ф9п
@ДимаЕфремов-ф9п 3 года назад
@@gamedevlavka ждём!!! :)
@Maximka_23
@Maximka_23 5 месяцев назад
Где пчелиная война 2?
@kriegsmarine6935
@kriegsmarine6935 Год назад
Абсолютно непонятно на кой такое удовольствие. Чем это отличается от создание обычного класса с 3 полями? Нужно будет 3 сундука - сделаешь префабы. Что так у тебя 3 объекта лежат в директории, что эдак будут. Только при этом на префабы еще всякие интересные вещи по типу риджидбоди или коллайдера накинуть можно
@ViATVmy
@ViATVmy 3 года назад
id => this._id почему нельзя просто так id = this._id ?? в чем разница между ними ?
@gamedevlavka
@gamedevlavka 3 года назад
Это сокращенное написание свойства: string id { get { return this._id; } } Согласись, написать string id => this._id гораздо быстрее, короче и аккуратнее
@gamedevlavka
@gamedevlavka 3 года назад
В первом случае это свойство только с возможность чтения, а I'd = this._id это присваивание, нам присваивать ничего не нужно, только возвращать (читать)
@dmytromahas9207
@dmytromahas9207 3 года назад
Почему нельзя одной строчкой записать приватный ID ? [SerializeField] public string _id {get; private set; }
@gamedevlavka
@gamedevlavka 3 года назад
Потому что редактор не умеет отображать свойства
@dmytromahas9207
@dmytromahas9207 3 года назад
@@gamedevlavka Не совсем понял как редактор отображает свойства, можете поподробней объяснить? Большое Вам спасибо.
@gamedevlavka
@gamedevlavka 3 года назад
Свойства он никак не отображает. Если вы напишете строчку, как предложили, вы не сможете задать ее через редактор
@anatoliydingo2200
@anatoliydingo2200 2 года назад
@@gamedevlavka [field: SerializeField] это на автосвойства, а если надо с логикой в сеттере то погугли [SerializeProperty]
Далее
ITZY 예지한테 AI 메이크업하기💖 #shorts
00:23
новое испытание
00:40
Просмотров 194 тыс.
Rethink Everything with Scriptable Object VARIABLES
15:28
ITZY 예지한테 AI 메이크업하기💖 #shorts
00:23