Вторник, 26 Ноября 2024, 09:27

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Компонентно-ориентированный фреймворк для Unity3d
pixeyeДата: Воскресенье, 06 Мая 2018, 18:18 | Сообщение # 1
Red Winter Software
Сейчас нет на сайте
Пишу фреймворк для более простой и удобной работы с Unity3d в стиле КОП ( компонентно ориентированный подход )
Подход изначально заложен в юнити ( GameObject -> компоненты ) и он очень хорошо зарекомендовал себя в разработке игр. ( Например тот же ECS подход основан на КОП парадигме )

Ссылка на github
Наш дискорд канал

Предупреждаю, это скелет системы без большинства важных примочек.
Их постепенно буду добавлять.

Смысл в строгом разделении дата компонентов от поведений. Вместо классов сущностей мы описываем поведения которые опираясь на компоненты даты выдают нам новую сущность.
Внутри фреймворка есть демка с актором который сам себя уничтожит если его здоровье упадет до 0. Здоровье можно в инспекторе поменять : )


Для начала в Edit=>ProjectSettings=>ScriptExecutionOrder ставит StarterKernel где-нибудь на -20000

StarterKernel - это компонент который загружает все процессы. Например апдейтов.
Обязательно на сцене нужен объект [KERNEL] ( процесс апдейтов вешает туда компонент )

Все наши игровые сущности называются Actors


Например ActorHero.
Для инициализации вместо Awake используем Setup
и там мы добавляем все желаемые поведения и даты в актора. Даты уже созданы и добавляются в пул актора , а поведения мы создаем по их типу.

Для работы нам нужны дата классы.


Это обычные C# классы, делаем их серилизуемыми чтобы видеть в инспекторе юнити.
Если у нас в дате могут оказаться ссылки на объекты во время игровой сессии то просто обнуляем все в методе Dispose.

Когда мы добавили всю дату приступаем к поведениям. Поведения наследуются от BehaviorBase


Так же используем метод Setup для инициализации. Например тут поведение смерти - из setup добавляем дату здоровья.
В OnTick ( аналог Update ) - обрабатываем ее: смотрим если здоровье упало до нуля то убиваем сущность. DataHealth необязательно кешировать в поведении:
можно напрямую в апдейте вызывать actor.Get<DataHealth>() - в отличии от юнитивского GetComponent это крайне дешевый вызов.

В OnDispose обнуляем переменные.

Вся игра строится из одного Update метода в ProcessingUpdate. Поэтому акторы и поведения должны наследоваться от интерфейсов:

  • ITick - для аналога Update
  • ITickFixed - для аналога UpdateFixed
  • ITickLate - для аналога UpdateLate

В нашем примере у героя есть поведение смерти который имеет апдейт - наследуем ActorHero и BehaviorDeath от ITick

Тут закладываю серию видео где буду шаг за шагом рассказывать о КОП.


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю



Сообщение отредактировал pixeye - Воскресенье, 06 Мая 2018, 18:27
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг