РЕВОЛЮЦИЯ В UNITY! НОВЫЙ ПАТТЕРН - ENTITY-STATE-BEHAVIOUR. СТРИМ
HTML-код
- Опубликовано: 13 окт 2024
- Всем привет! 👋
В общем прошло полгода, и я сделал фреймворк для разработки игр на процедурной и функциональной парадигме, и скорость моей разработки игр выросла в 5 раз 🚀
Если вкратце, то 6 лет я разрабатывал игры с помощью ООП и считал, что это самый лучший и правильный подход... Но оказалось не совсем так)
Сегодня я пришел к тому, что ООП хорош в разработке отдельных компонентов, в которых важна инкапсуляция, но взаимодействие между этими объектами лучше описывать статическими методами, которые получают на вход данные из центрального реестра и выполняют над ними работу. Поскольку в процедурном программировании есть четкое разделение на данные и логику, то разработчик может легко переиспользовать любую процедуру или функцию в другой процедуре, и это существенно уменьшит дублирование кода и самое главное - упростит архитектуру!
В результате этого я полностью отказался от Zenject и DI, потому что это гибче, проще и быстрее)
Поэтому зовите всех знакомых, кто занимается разработкой игр на Unity!
Уверен, что такой паттерн должен увидеть каждый разработчик, кто хочет делать игры быстрее и качественнее 💪
-----------------------------------------------
Что будет на стриме? 📺
1. Проблематика ООП
2. Что такое процедурное программирование
3. Разработка персонажа на ПП
4. Боевые примеры
5. Выводы
6. Ответы на вопросы
Ссылка на мой телеграмм канал:
t.me/unitycode...
По ручному выставлению импортов для кодогенератора, можно просто автоматически добавлять импорты через рефлексию, у типа можно просто посмотреть его нэймспейс, что бы убрать всю эту ручную настройку и упростить взаимодействие с фреймворком
Это как из анекдота: сколько ни делаем ECS, а всё равно Аtomic Design получается.
Шутка 😁
Шикарный стрим. Очень много для себя вынес. Спасибо!
спасибо за проделанную работу! ) 6 часов - это сильно )
по сути -
осталось вместо atomic variable использовать атомарные IComponentData (в вашей парадигме)
и систему с withchangefilter для реактивности
и singleton для проброса данных из ECS в UI Monobehavior
понимаю тягу к атомарности и сохранению работы в редакторе, но ECS требует MindShift и как только он произойдет - все будет круто без переизобретения )
public struct FloatData : IComponentData
{
public float value;
}
public struct Health : IComponentData
{
public FloatData health;
public FloatData healthMax;
}
Для дизайнерского удобства вот здесь можно что-то придумать что-бы таскать IComponentData в редакторе
типаа словаря name-floatData
public class HealthAuthoring : MonoBehaviour
{
public float healthInit;
public float heatlhMaxInit;
public class HealthAuthoringBaker : Baker
{
public override void Bake(HealthAuthoring authoring)
{
var entity = GetEntity(TransformUsageFlags.None);
AddComponent(entity,
new Health()
{
health = new FloatData() { value = authoring.healthInit },
healthMax = new FloatData() { value = authoring.heatlhMaxInit }
});
}
}
}
public partial struct HealthShowSystem : ISystem
{
public void OnUpdate(ref SystemState state)
{
foreach (var health
in SystemAPI.Query()
.WithChangeFilter())
{
PlayerStatsPresenter.Instance.SetPlayerHealth(health.ValueRO).ToString("F2");
}
}
}
Спасибо за такой детальный разбор. Как раз искал какой то подход для быстрых прототипов. Полностью поддерживаю идею разделения данных и поведения.
По поводу инсталлеров и тп. однотипного кода: современные IDE поддерживают кастомные снипеты (названия могут отличаться) для таких целей, как вариант =)
Благодарю за фидбэк! Да, можно настроить снипетты, в Rider они называются Live Templates
Игорь, спасибо за такой огромный стрим. Приятно что у тебя формат часто в видео презентации.
да, Игорь нереально крут.
Перевод логических элементов на русском и английском добавлю через пару месяцев
Инкапсуляция, это не сокрытие чего-либо, а выделение методов и полей в отдельную сущность - объект, а скрывать там что-то или нет, выбор программиста или ограничение языка
У инкапсуляции два определения 🙂
en.wikipedia.org/wiki/Encapsulation_(computer_programming)
@@CodeCraftUnityEdition я в курсе, только одно нормальное, а второе тупорылое, причем второе видимо всем ближе, иначе не могу понять, почему его форсят
@@CodeCraftUnityEdition и писал статью в вики чувак, который видимо не в курсе, что существуют ООП языки, в которых нет в принципе ограничений видимости. Ну это конечно можно объяснить, что для таких языков первое определение)) Вы не понимаете, это другое
6 часов отборной дичи про изобретение велосипеда задом на перед
Окей)
тяжело ли будет интегрировать твое решение с steamworks + mirror+ unity? Очень понравились твои рассуждения, но меня тянет постоянно на создание кооперативных игр). Хотелось бы побольше кейсов разработки по твоему фреймворку. Для меня еще не понятен момент насколько удобно будет применять различные эффекты от способностей допустим, анимаций и т.д.
Дополняя свой комментарий. Эта тема хорошо зашла на канале, за 2 дня около 1.5к просмотров. Хотелось бы комплексные взаимодействия увидеть в тестовых проектах. Благодарность Игорю за вебинары, приятно контент смотреть (грамотно поставленная не душная речь + презентация).
По идее не должно быть сложностей, так как ты манипулируешь открытыми данными. Их легко шарить, сохранять и передавать по сети. По сути такие взаимодействия делаются через доп контроллеры, которые интегрируются с другими сервисами или сетью
For demo add more complex interactions, such like multi-story elevator with platform, call button and doors
А обещанная в начале ссылочка на гит будет? :) Чтоб потыркать и поучиться... А то в телеге нет, тут нет, на репозитории старом тож только атомик последний...
github.com/StarKRE22/unity-atomic
@@CodeCraftUnityEdition Благодарствую! Очень интересная тема, по этому хочется пощупать))
Перевод логических элементов на русском и английском добавлю через пару месяцев
@@CodeCraftUnityEdition это ведь не то, тут ссылка на атомик
Насчет кодогенерации инсталеров, как вариант можно сделать галочку, которую если убрать, то класс сгенерирован не будет
А я, кстати, подумал после стрима и сделал универсальный инсталлер, который ставится сразу в испектор!
А в чём преимущество этого паттерна перед ECS?
Была информация в стриме
@@greenbox674 6 часов смотреть что бы ответить на вопрос
Если вкратце, то гибче и удобнее)
@@CodeCraftUnityEdition на какой минуте?
@@ЕвгенийЗинченко-п5т 14:30
лайк