Design methodology of multimedia applications for gaming engines with a component-oriented architectural stile
The article presents the methodology of designing multimedia applications for game engines with a componentoriented architectural style. The work emphasizes the importance of choosing the appropriate architectural pattern, taking into account the features of modern game engines such as Unity, Unreal...
Saved in:
| Date: | 2024 |
|---|---|
| Main Authors: | , |
| Format: | Article |
| Language: | Ukrainian |
| Published: |
PROBLEMS IN PROGRAMMING
2024
|
| Subjects: | |
| Online Access: | https://pp.isofts.kiev.ua/index.php/ojs1/article/view/624 |
| Tags: |
Add Tag
No Tags, Be the first to tag this record!
|
| Journal Title: | Problems in programming |
| Download file: | |
Institution
Problems in programming| id |
pp_isofts_kiev_ua-article-624 |
|---|---|
| record_format |
ojs |
| resource_txt_mv |
ppisoftskievua/49/f666102a9507b735fa13e42375b66049.pdf |
| spelling |
pp_isofts_kiev_ua-article-6242025-02-14T11:24:23Z Design methodology of multimedia applications for gaming engines with a component-oriented architectural stile Методика проектування мултимедійних застосунків для ігрових рушіїв з компонентно-орієнтованим архітектурним стилем Bezditnyi, V.M. Chebanyuk, О.V. game engine; design patterns; Unity; service; category theory UDC 004.421.72/74 ігровий рушій; патерни проектуванння; Unity; сервіс; теорія категорій УДК 004.421.72/74 The article presents the methodology of designing multimedia applications for game engines with a componentoriented architectural style. The work emphasizes the importance of choosing the appropriate architectural pattern, taking into account the features of modern game engines such as Unity, Unreal Engine and Godot Engine. The key problems and challenges associated with the design of flexible and scalable architectures are indicated. The life cycle model of the user interaction session with the application is described, which includes three main stages: Bootstrap, GameLoop and Dispose. The importance of controlling transient processes between life cycle states to ensure the correct functioning of the application is shown. For a better organization of the interaction of services, the mathematical apparatus of the theory of categories and sets is applied, which allows you to clearly define and manage dependencies and relationships between components. The advantages of using category theory for modeling and managing data flows and dependencies in the system, in particular through functors and monads, are described. These approaches enable the creation of adaptive and scalable systems that are easy to maintain and extend. The work contains practical recommendations for designing the architecture of game applications, taking into account the specifics of component-oriented and service-oriented architectural styles. The need for regular review and updating of the project architecture in accordance with changes in requirements and operating conditions is substantiated. A methodology is proposed, which is a theoretical basis for the development of flexible architectures of multimedia applications. It takes into account the specifics of component-oriented and service-oriented architectural styles, as well as the peculiarities of the functioning of game engines. Examples of the practical application of the proposed theoretical approaches in real projects are also considered in the work, which demonstrates their effectiveness and applicability in various contexts of game application development. These examples include concrete implementations of patterns, state management using the State Machine, and optimizing interaction between components through Service Locator and Dependency Injection.Prombles in programming 2024; 2-3: 92-98 У статті представлено методику проєктування мультимедійних застосунків для ігрових рушіїв з компонентноорієнтованим архітектурним стилем. Робота акцентує увагу на важливості вибору відповідного архітектурного патерну, враховуючи особливості сучасних ігрових рушіїв, таких як Unity, Unreal Engine та Godot Engine. Зазначено ключові проблеми та виклики, пов'язані з проєктуванням гнучких та масштабованих архітектур. Описано модель життєвого циклу сеансу взаємодії користувача із застосунком, яка включає три основні етапи: Bootstrap, GameLoop та Dispose. Показано важливість контролю перехідних процесів між станами життєвого циклу для забезпечення коректного функціонування застосунку. Для кращої організації взаємодії сервісів застосовано математичний апарат теорії категорій та множин, що дозволяє чітко визначити та управляти залежностями та відносинами між компонентами. Описано переваги застосування теорії категорій для моделювання та управління потоками даних та залежностей у системі, зокрема, через функтори та монади. Ці підходи дозволяють створювати адаптивні та масштабовані системи, які легко підтримувати та розширювати. Робота містить практичні рекомендації для проєктування архітектури ігрових застосунків, враховуючи специфіку компонентно-орієнтованого та сервіс-орієнтованого архітектурних стилів. Обґрунтовано необхідність регулярного перегляду та оновлення архітектури проекту відповідно до змін у вимогах та умовах експлуатації. Запропоновано методику, яка є теоретичним підґрунтям для розробки гнучких архітектур мультимедійних застосунків. Вона враховує специфіку компонентно-орієнтованого та сервіс-орієнтованого архітектурних стилів, а також особливості функціонування ігрових рушіїв. У роботі також розглянуто приклади практичного застосування запропонованих теоретичних підходів у реальних проєктах, що демонструє їх ефективність та застосовність у різних контекстах розробки ігрових застосунків. Ці приклади включають конкретні реалізації патернів, управління станами за допомогою State Machine та оптимізацію взаємодії між компонентами через Service Locator та Dependency Injection.Prombles in programming 2024; 2-3: 92-98 PROBLEMS IN PROGRAMMING ПРОБЛЕМЫ ПРОГРАММИРОВАНИЯ ПРОБЛЕМИ ПРОГРАМУВАННЯ 2024-12-17 Article Article application/pdf https://pp.isofts.kiev.ua/index.php/ojs1/article/view/624 10.15407/pp2024.02-03.092 PROBLEMS IN PROGRAMMING; No 2-3 (2024); 92-98 ПРОБЛЕМЫ ПРОГРАММИРОВАНИЯ; No 2-3 (2024); 92-98 ПРОБЛЕМИ ПРОГРАМУВАННЯ; No 2-3 (2024); 92-98 1727-4907 10.15407/pp2024.02-03 uk https://pp.isofts.kiev.ua/index.php/ojs1/article/view/624/676 Copyright (c) 2024 PROBLEMS IN PROGRAMMING |
| institution |
Problems in programming |
| baseUrl_str |
https://pp.isofts.kiev.ua/index.php/ojs1/oai |
| datestamp_date |
2025-02-14T11:24:23Z |
| collection |
OJS |
| language |
Ukrainian |
| topic |
game engine design patterns Unity service category theory UDC 004.421.72/74 |
| spellingShingle |
game engine design patterns Unity service category theory UDC 004.421.72/74 Bezditnyi, V.M. Chebanyuk, О.V. Design methodology of multimedia applications for gaming engines with a component-oriented architectural stile |
| topic_facet |
game engine design patterns Unity service category theory UDC 004.421.72/74 ігровий рушій патерни проектуванння Unity сервіс теорія категорій УДК 004.421.72/74 |
| format |
Article |
| author |
Bezditnyi, V.M. Chebanyuk, О.V. |
| author_facet |
Bezditnyi, V.M. Chebanyuk, О.V. |
| author_sort |
Bezditnyi, V.M. |
| title |
Design methodology of multimedia applications for gaming engines with a component-oriented architectural stile |
| title_short |
Design methodology of multimedia applications for gaming engines with a component-oriented architectural stile |
| title_full |
Design methodology of multimedia applications for gaming engines with a component-oriented architectural stile |
| title_fullStr |
Design methodology of multimedia applications for gaming engines with a component-oriented architectural stile |
| title_full_unstemmed |
Design methodology of multimedia applications for gaming engines with a component-oriented architectural stile |
| title_sort |
design methodology of multimedia applications for gaming engines with a component-oriented architectural stile |
| title_alt |
Методика проектування мултимедійних застосунків для ігрових рушіїв з компонентно-орієнтованим архітектурним стилем |
| description |
The article presents the methodology of designing multimedia applications for game engines with a componentoriented architectural style. The work emphasizes the importance of choosing the appropriate architectural pattern, taking into account the features of modern game engines such as Unity, Unreal Engine and Godot Engine. The key problems and challenges associated with the design of flexible and scalable architectures are indicated. The life cycle model of the user interaction session with the application is described, which includes three main stages: Bootstrap, GameLoop and Dispose. The importance of controlling transient processes between life cycle states to ensure the correct functioning of the application is shown. For a better organization of the interaction of services, the mathematical apparatus of the theory of categories and sets is applied, which allows you to clearly define and manage dependencies and relationships between components. The advantages of using category theory for modeling and managing data flows and dependencies in the system, in particular through functors and monads, are described. These approaches enable the creation of adaptive and scalable systems that are easy to maintain and extend. The work contains practical recommendations for designing the architecture of game applications, taking into account the specifics of component-oriented and service-oriented architectural styles. The need for regular review and updating of the project architecture in accordance with changes in requirements and operating conditions is substantiated. A methodology is proposed, which is a theoretical basis for the development of flexible architectures of multimedia applications. It takes into account the specifics of component-oriented and service-oriented architectural styles, as well as the peculiarities of the functioning of game engines. Examples of the practical application of the proposed theoretical approaches in real projects are also considered in the work, which demonstrates their effectiveness and applicability in various contexts of game application development. These examples include concrete implementations of patterns, state management using the State Machine, and optimizing interaction between components through Service Locator and Dependency Injection.Prombles in programming 2024; 2-3: 92-98 |
| publisher |
PROBLEMS IN PROGRAMMING |
| publishDate |
2024 |
| url |
https://pp.isofts.kiev.ua/index.php/ojs1/article/view/624 |
| work_keys_str_mv |
AT bezditnyivm designmethodologyofmultimediaapplicationsforgamingengineswithacomponentorientedarchitecturalstile AT chebanyukov designmethodologyofmultimediaapplicationsforgamingengineswithacomponentorientedarchitecturalstile AT bezditnyivm metodikaproektuvannâmultimedíjnihzastosunkívdlâígrovihrušíívzkomponentnooríêntovanimarhítekturnimstilem AT chebanyukov metodikaproektuvannâmultimedíjnihzastosunkívdlâígrovihrušíívzkomponentnooríêntovanimarhítekturnimstilem |
| first_indexed |
2025-07-17T09:36:40Z |
| last_indexed |
2025-07-17T09:36:40Z |
| _version_ |
1850412922685095936 |
| fulltext |
Архітектура програмного забезпечення
92
УДК 004.421.72/74 http://doi.org/10.15407/pp2024.02-03.092
В.М. Бездітний, О.В. Чебанюк
МЕТОДИКА ПРОЄКТУВАННЯ МУЛЬТИМЕДІЙНИХ
ЗАСТОСУНКІВ ДЛЯ ІГРОВИХ РУШІЇВ З КОМПОНЕНТНО-
ОРІЄНТОВАНИМ АРХІТЕКТУРНИМ СТИЛЕМ
У статті представлено методику проєктування мультимедійних застосунків для ігрових рушіїв з компонентно-
орієнтованим архітектурним стилем. Робота акцентує увагу на важливості вибору відповідного архітектурно-
го патерну, враховуючи особливості сучасних ігрових рушіїв, таких як Unity, Unreal Engine та Godot Engine. За-
значено ключові проблеми та виклики, пов'язані з проєктуванням гнучких та масштабованих архітектур.
Описано модель життєвого циклу сеансу взаємодії користувача із застосунком, яка включає три основні
етапи: Bootstrap, GameLoop та Dispose. Показано важливість контролю перехідних процесів між станами
життєвого циклу для забезпечення коректного функціонування застосунку. Для кращої організації
взаємодії сервісів застосовано математичний апарат теорії категорій та множин, що дозволяє чітко визна-
чити та управляти залежностями та відносинами між компонентами.
Описано переваги застосування теорії категорій для моделювання та управління потоками даних та залеж-
ностей у системі, зокрема, через функтори та монади. Ці підходи дозволяють створювати адаптивні та мас-
штабовані системи, які легко підтримувати та розширювати.
Робота містить практичні рекомендації для проєктування архітектури ігрових застосунків, враховуючи
специфіку компонентно-орієнтованого та сервіс-орієнтованого архітектурних стилів.
Обґрунтовано необхідність регулярного перегляду та оновлення архітектури проекту відповідно до змін у
вимогах та умовах експлуатації. Запропоновано методику, яка є теоретичним підґрунтям для розробки
гнучких архітектур мультимедійних застосунків. Вона враховує специфіку компонентно-орієнтованого та
сервіс-орієнтованого архітектурних стилів, а також особливості функціонування ігрових рушіїв.
У роботі також розглянуто приклади практичного застосування запропонованих теоретичних підходів у ре-
альних проєктах, що демонструє їх ефективність та застосовність у різних контекстах розробки ігрових за-
стосунків. Ці приклади включають конкретні реалізації патернів, управління станами за допомогою State
Machine та оптимізацію взаємодії між компонентами через Service Locator та Dependency Injection.
Ключові слова: ігровий рушій, патерни проектуванння, Unity, сервіс, теорія категорій.
V. Bezditnyi, О. Chebanyuk
DESIGN METHODOLOGY OF MULTIMEDIA APPLICATIONS
FOR GAMING ENGINES WITH A COMPONENT-ORIENTED
ARCHITECTURAL STYLE
The article presents the methodology of designing multimedia applications for game engines with a component-
oriented architectural style. The work emphasizes the importance of choosing the appropriate architectural pattern,
taking into account the features of modern game engines such as Unity, Unreal Engine and Godot Engine. The key
problems and challenges associated with the design of flexible and scalable architectures are indicated.
The life cycle model of the user interaction session with the application is described, which includes three main
stages: Bootstrap, GameLoop and Dispose. The importance of controlling transient processes between life cycle
states to ensure the correct functioning of the application is shown. For a better organization of the interaction of
services, the mathematical apparatus of the theory of categories and sets is applied, which allows you to clearly de-
fine and manage dependencies and relationships between components.
The advantages of using category theory for modeling and managing data flows and dependencies in the system, in
particular through functors and monads, are described. These approaches enable the creation of adaptive and scala-
ble systems that are easy to maintain and extend.
The work contains practical recommendations for designing the architecture of game applications, taking into ac-
count the specifics of component-oriented and service-oriented architectural styles.
The need for regular review and updating of the project architecture in accordance with changes in requirements
and operating conditions is substantiated. A methodology is proposed, which is a theoretical basis for the develop-
ment of flexible architectures of multimedia applications. It takes into account the specifics of component-oriented
and service-oriented architectural styles, as well as the peculiarities of the functioning of game engines.
Examples of the practical application of the proposed theoretical approaches in real projects are also considered in
the work, which demonstrates their effectiveness and applicability in various contexts of game application devel-
opment. These examples include concrete implementations of patterns, state management using the State Machine,
and optimizing interaction between components through Service Locator and Dependency Injection.
Key words: game engine, design patterns, Unity, service, category theory.
© В.М. Бездітний, О. В. Чебанюк, 2024
ISSN 1727-4907. Проблеми програмування. 2024. №2-3
Архітектура програмного забезпечення
93
Вступ
Сучасна ігрова індустрія постійно
розвивається, пропонуючи все більш скла-
дні та інноваційні рішення у створенні іг-
рових додатків. Одним із ключових аспек-
тів ефективного розроблення ігор є вибір
архітектури, яка забезпечує гнучкість, ма-
сштабованість та легкість у підтримці ко-
ду. Основою ігрового застосунку є ігровий
рушій, який є середовищем для розробки
та прототипування ігрових застосунків зі
своїми особливостями та мовою програму-
вання. Серед популярних ігрових рушіїв
найчастіше виділяють Unity Engine, Unreal
Engine, Godot Engine рис 1 [1].
1. Проблемні питання та виклики
проєктування гнучких архітектур
для сучасних ігрових рушіїв
Проєктування архітектури будь-
якого застосунку може становити певні
виклики та проблеми, зокрема:
Рис. 1. Найбільш популярні у світі ігрові
рушії[1]
1. Вибір відповідного архітектурно-
го патерну: ігрові рушії не накладають жо-
рстких обмежень на архітектуру, що може
призвести до труднощів у виборі оптима-
льного патерну. Розповсюджені патерни,
наприклад, MVC (Model-View-Controller),
MVVM (Model-View-ViewModel) або ECS
(Entity Component System), мають свої пе-
реваги та недоліки залежно від проєкту [2].
2. Початкові архітектурні рішення
можуть ускладнити масштабування проек-
ту в майбутньому. Неправильний вибір
може призвести до необхідності перепису-
вання коду у разі додавання нових функ-
цій.
3. Користуючись доступним функ-
ціоналом ігрових рушіїв без спроєктованої
архітектури та без використання кращих
практик веде до створення сильно зв'яза-
них систем, що ускладнює їх тестування та
рефакторинг. Використання принципів
SOLID та патернів проєктування, таких як
Dependency Injection, Service Locator може
допомогти керувати цими залежностями.
4. Архітектура, яка ускладнює тес-
тування, може значно збільшити час роз-
робки. Автоматизоване тестування, таке як
модульні тести, може бути важким для ре-
алізації у Unity через залежності від ігро-
вого рушія [3].
5. Деякі архітектурні патерни мо-
жуть негативно вплинути на продуктив-
ність, особливо в проєктах з великою кіль-
кістю об'єктів і компонентів. Оптимізація і
правильний вибір патернів є ключовими
для підтримки високої продуктивності.
6. Інтеграція із зовнішніми систе-
мами, такими як бази даних або веб-
сервіси, може бути складною залежно від
обраної архітектури. Важливо планувати
ці аспекти на ранніх етапах розробки.
7. Різні розробники можуть мати рі-
зні підходи до архітектури, що може
ускладнити співпрацю в команді. Важливо
встановити чіткі стандарти і засади архіте-
ктури на початку проєкту.
Для вирішення цих проблем важли-
во витрачати час на планування архітекту-
ри, регулярно переглядати і оновлювати її
відповідно до змін у проєкті, а також вра-
ховувати досвід та найкращі практики ін-
ших розробників.
На сьогоднішній день існує велика
кількість патернів та реалізацій їхніх ком-
бінацій. Для того, щоб обрати найбільш
придатну архітектуру пропонується розг-
Архітектура програмного забезпечення
94
лянути виклики, з якими доводиться спра-
влятися розробникам.
Перший – це отримання залежнос-
тей від іншого класу. Зазвичай це вирішу-
ється налаштуванням зв’язків між компо-
нентами у середовищі розробки, викорис-
танням патерну Singleton, статичних полів
чи івентів. Недоліки цього підходу стають
помітними у процесі наповнення проєкту
об’єктами та логікою. Альтернативою є
Dependency Injection (DI), що дає змогу
передати посилання га об’єкт через меха-
нізм ін’єкції залежностей.
Інший виклик це підтримання стру-
ктури проєкту, мінімізація проблем поряд-
ку ініціалізації. Для цього потрібно чітко
контролювати життєвий цикл застосунку,
а також ігрових об’єктів. Для визначення
етапів життєвого циклу відповідає патерн
State, оскільки кожен етап це окремий стан
застосунку, в який ми можемо зайти та
можемо вийти.
Крім залежностей перед розробни-
ками часто постає питання, як використо-
вувати один і той самий функціонал у різ-
них частинах проєкту? Якщо логіка глоба-
льна для всіх користувачів і 100 користу-
вачів звернуться із запитами до однієї
служби одночасно, то результат у кращому
випадку отримають лише декілька. Саме
цю проблему вирішує патерн Service
Locator у поєднанні з патерном State для
забезпечення послідовного виконання за-
питів у порядку, визначеному станом [1-3].
Розглянемо детальніше стани та
опис ігрового циклу застосунку.
2. Технології підтримки
функціонування ігрового
застосунку
Говорячи про будь-який застосунок
(додаток для навчання, гра тощо), життє-
вий цикл сеансу виглядає приблизно таким
чином (рис. 2):
Bootstrap GameLoop Dispose
Перехідні
процеси
Перехідні
процеси
Рис. 2. Модель життєвого циклу сеансу
взаємодії користувача із застосунком
Bootstrap – це вхідна точка, місце де
ініціалізуються сервіси, залежності, заван-
тажуються необхідні для запуску ресурси.
GameLoop – це безпосередньо ігро-
вий процес, взаємодії з додатком, в якому
відбувається вся ігрова або бізнес-логіка.
Dispose – це стан додатку перед ви-
ходом, вивантаження ресурсів, сервісів,
тощо.
Найбільш критичні точки у цій схе-
мі (рис. 2) містяться між станами життєво-
го циклу і можуть називатися «перехідни-
ми процесами». Під цим розуміється, на-
приклад, порядок ініціалізації сервісів, пе-
ревірки отримання залежностей, порядок
вивантаження ресурсів з пам’яті. У разі за-
лишення цих процесів без контролю,
отримуємо невірне виконання програми
або взагалі помилки, що блокують процес
виконання.
Для коректної роботи додатку нам необхі-
дно контролювати ці стани, мати зручний
механізм переходу між ними, мати почат-
кову точку входу, в якій контрольовано
ініціалізуються необхідні залежності за
допомогою сервісів. А доступ до самих
сервісів реалізується за допомогою De-
pendency Injection.
3. Формальна модель ігрового
процесу, представлена за допомогою
апарату дискретної математики
З метою інтерпретації ігрового цик-
лу в математичну модель можливо вико-
ристати теорію категорій та теорію
множин. Розглянемо основні аналогії:
1. Об'єкти та морфізми. В теорії ка-
тегорій, системи та їх взаємодії
можна моделювати за допомо-
гою об'єктів (компонентів, серві-
сів) та морфізмів (функцій, які
описують взаємодії між цими
об'єктами). У контексті Unity це
може бути застосовано для ви-
значення взаємозв'язків між різ-
ними компонентами гри, такими
як Service Locator, DI, Factory, та
State Machine.
2. Функтори та монади. Функтори
(структури, що відображають
Архітектура програмного забезпечення
95
об'єкти та морфізми однієї кате-
горії в іншу) і монади (тип функ-
торів, що дозволяють послідовно
об'єднувати операції) можуть бу-
ти використані для моделювання
та управління потоками даних та
залежностей у системі.
3. Множини та підмножини. Еле-
менти гри (об'єкти, компоненти)
можуть бути представлені як
множини, а їхні властивості та
характеристики – як підмножи-
ни. Це дозволяє чітко визначити
та управляти залежностями та
відносинами між компонентами.
4. Операції над множинами. Опе-
рації, такі як об'єднання, пере-
тин, різниця множин, можуть бу-
ти використані для опису взає-
модій між компонентами. На-
приклад, об'єднання множин мо-
же представляти інтеграцію різ-
них сервісів в одну систему.
Застосування в Unity:
• Service Locator може бути пред-
ставлений як централізована сис-
тема, що відповідає за відсте-
ження та надання доступу до різ-
них сервісів (об'єктів), викорис-
товуючи принципи теорії катего-
рій для управління залежностя-
ми.
• Dependency Injection може бути
інтерпретовано через теорію
множин, де залежності між об'є-
ктами представляються як відно-
сини між множинами.
• Factory Pattern використовується
для створення об'єктів, що можна
розглядати через призму теорії
категорій, де фабрика – це функ-
тор, який відображає параметри
на об'єкти.
• State Machine можна моделюва-
ти, використовуючи теорію мно-
жин, де стани представляються
як множини, а переходи – як від-
носини між ними.
Комбінуючи перераховані вище те-
оретичні підходи, можна розробити гнучку
та масштабовану систему для Unity, яка
оптимізує управління залежностями та по-
токами даних у комплексних проєктах.
4. Модель функціонування
ігрового застосунку
Стани та керування станами зазви-
чай реалізуються за допомогою патерну
«Game State Machine».
«State Machine» – це математична
модель, яка використовується для опису
поведінки системи. Вона складається з
набору станів, переходів та дій. Стан пред-
ставляє конкретну поведінку або умову
системи, тоді як перехід визначає рух з од-
ного стану в інший. Дії, асоційовані зі ста-
нами або переходами, представляють
логіку, яку потрібно виконувати у процесі
входу, виходу або під час перебування в
стані [4].
На рисунку 3 зображено
послідовність запуску програмного за-
стосунку (зокрема, гри).
Рис. 3. Схема послідовності запуску
застосунку
Перший крок у реалізації «State
Machine» полягає у визначенні станів. Ко-
жен стан буде представлений окремим
скриптом (логікою), що наслідується від
інтерфейсу IState, який декларує 2 основ-
них методи: вхід до певного стану та вихід
з нього.
Наступний крок – створення класу
GameStateMachine для можливості ке-
рування переходами між станами та вико-
нання відповідних дій.
Клас GameStateMachine може мати
різні стани (наприклад: `BootstrapState`,
`LoadLevelState`, `LoadProgressState`,
`GameLoopState`), які можна розглядати як
об'єкти в категорії. Перехід між станами
Архітектура програмного забезпечення
96
через методи Enter() та ChangeState() може
бути аналогією морфізмів, які перетворю-
ють один об'єкт (стан) в інший.
Одним із ключових аспектів теорії
категорій є композиція морфізмів, що в
даному випадку може бути представлено
як серія переходів між станами. Напри-
клад, перехід з `BootstrapState` до
`LoadLevelState`, а потім до
`GameLoopState`. Композиція цих пере-
ходів (морфізмів) створює «шлях» крізь
різні стани гри.
У теорії категорій функтори — це
відображення між категоріями. Можна
розглядати взаємодію між різними компо-
нентами системи (наприклад, між
`GameStateMachine` та конкретними ста-
нами) як функтор-подібні відносини, де
поведінка одного компонента визначає по-
ведінку іншого.
Система станів може бути розгля-
нута як категорія, де стани є об'єктами, а
переходи між ними — морфізмами. У рам-
ках більшої системи (наприклад, всієї гри),
така система станів може розглядатися як
підкатегорія.
У теорії категорій кожен об'єкт має
ідентичний морфізм, що відображає об'єкт
сам у себе. Це може бути реалізовано як
здатність стану залишатися незмінним,
якщо не відбувається перехід до іншого
стану.
Розглянемо наступну формулу (1),
яка описує перехід з BootstrapState до
GameLoopState через LoadLevelState:
LLS = BS --> LPS --> GLS (1)
Цю формулу можна інтерпретувати
як композицію двох морфізмів:
- BootstrapState-> LoadProgressState.
Цей морфізм відповідає переходу з
BootstrapState до LoadProgressState.
- LoadProgressState->GameLoopState
Цей морфізм відповідає переходу з
LoadProgressState до GameLoopState.
Композиція цих двох морфізмів дає
морфізм BootstrapState -> GameLoopState,
який відповідає прямому переходу з
BootstrapState до GameLoopState.
Даний приклад демонструє, як тео-
рія категорій може використовуватися для
описування та розуміння переходів між
станами в системі станів гри.
Ця математична модель є спроще-
ним представленням системи станів гри.
Реальна система може бути набагато
складнішою, з більшою кількістю станів,
переходів та взаємодій.
Теорія категорій надає потужний
інструментарій для моделювання та
аналізу систем станів, але для розуміння та
застосування її концепцій потрібні певні
знання абстрактної математики.
5. Проєктування архітектури
ігрових застосунків,
використовуючи теорію категорій
Проєктування структури сервіс-
орієнтованого застосунку (SOA, Service-
Oriented Architecture) в Unity вимагає ро-
зуміння як основних принципів SOA, так і
специфіки Unity як ігрового рушія. Основ-
на ідея SOA полягає у створенні модуль-
них, незалежних сервісів, які можуть бути
легко замінені, оновлені або модифіковані
без впливу на інші частини системи [5].
SOA визначає спосіб, як зробити
програмні компоненти придатними для ба-
гаторазового використання та взаємодії
через сервісні інтерфейси. Сервіси викори-
стовують загальні стандарти інтерфейсу та
архітектурний шаблон, щоб їх можна було
швидко інтегрувати в нові додатки. Це
знімає завдання з розробника програми,
який раніше переробляв або дублював
існуючу функціональність, або повинен
був знати, як з'єднати чи забезпечити
сумісність з існуючими функціями.
Кожна послуга в SOA містить код і
дані, необхідні для виконання повної, дис-
кретної бізнес-функції (наприклад, пе-
ревірка кредитоспроможності клієнта, ро-
зрахунок щомісячного платежу за креди-
том або обробка заявки на іпотеку). Інтер-
фейси сервісів забезпечують вільний
зв'язок, тобто їх можна викликати, майже
не знаючи, як реалізована послуга, що
знаходиться під ними, а це зменшує за-
лежність між додатками.
Архітектура програмного забезпечення
97
Нижче наведено ключові аспекти
для проєктування SOA в Unity:
• Визначення сервісів. Функціо-
нальні елементи застосунку мо-
жуть бути відділені як самостійні
сервіси. Це можуть бути, зокре-
ма, система збереження гри,
управління звуком, мережеві
взаємодії, управління рекламою
тощо.
• Інтерфейси сервісів. Необхідно
чітко визначити інтерфейси для
кожного сервісу. Це дозволить
заміняти реалізації сервісів без
необхідності зміни коду, який
використовує ці сервіси.
• Перевірка залежностей та
ін'єкція залежностей. Викори-
стання шаблону Dependency
Injection допоможе керувати за-
лежностями між різними
сервісами та компонентами. Це
може бути реалізовано через
конструктори, сеттери або через
спеціальні фреймворки (Zenject
[6], VContainer [7]).
• Проєктування менеджеру
сервісів. Для керування сервіса-
ми необхідно створити цен-
тральний менеджер сервісів (Ser-
vice Locator), який буде
відповідати за ініціалізацію,
зберігання та доступ до різних
сервісів у застосунку.
• Проєктування модульної та
гнучкої архітектури. Кожен
сервіс необхідно розробити так,
щоб він був самодостатнім і міг
функціонувати незалежно від
інших частин системи. Це забез-
печить високу гнучкість і спро-
стить тестування та розвиток
проєкту.
• Розгортання й оновлення
сервісів. Способи розгортання та
оновлення окремих сервісів по-
винні мати змогу оновлювати
сервіси без зупинки всієї систе-
ми.
• Тестування. Кожен сервіс проєк-
тується з урахуванням можли-
вості його тестування. Автомати-
зоване тестування є ключовим
елементом для підтримки висо-
кої якості коду та стабільності
системи.
У Unity SOA може бути реалізовано
як за допомогою вбудованих засобів
(наприклад, через компоненти
MonoBehaviour), так і за допомогою
зовнішніх бібліотек або фреймворків. Го-
ловне — зберігати фокус на чіткому
визначенні ролей та відповідальностей
кожного сервісу, а також на гнучкості та
розширюваності архітектури.
Висновки
У ході дослідження було проаналі-
зовано ключові положення теорії катего-
рій, яка стала теоретичним підґрунтям для
розробки методики проєктування застосу-
нку.
Було запропоновано інтерпретацію
життєвого циклу застосунку як набору
станів програми, які переходять з одного в
інший за допомогою «State Machine».
Композицію цих станів можливо предста-
вити як композицію морфізмів, відобра-
ження одного стану в інший, що випливає
з теорії категорій.
Описана інтерпретація дає змогу
контрольовано масштабувати архітектуру
проєкту та покращує розуміння виконання
процесів та логіки у застосунку.
Запропонована методика є теорети-
чним підгрунтям для розробки гнучких ар-
хітектур мультимедійних застосунків. Во-
на враховує специфіку компонентно-
орієнтованого та сервіс-орієнтованого ар-
хітектурних стилів, а також особливості
функціонування ігрових рушіїв.
Література
1. Kaushal Kishor, Rupa Rani, Atul Ku-
mar Rai. 3D Application Development
Using Unity Real Time Platform. Pro-
ceedings of Fourth Doctoral Symposi-
um on Computational Intelligence.
2023. P. 665–675.
2. Using the Game Engine Unity
Efficiently in Teaching: Development
of a fully-automated webserver-based
Архітектура програмного забезпечення
98
build pipeline / P. Mosler et
al. eCAADe 2023: Digital Design
Reconsidered, Graz, Austria, 20–22
September 2023. 2023.
URL: https://doi.org/10.52842/conf.ec
aade.2023.2.883 (дата звернення:
05.04.2024).
3. Mobile Game Development Using
Unity Engine. Methodologies and In-
telligent Systems for Technology En-
hanced Learning, Workshops - 13th
International Conferenc. 2023. P.
129–138. URL:
https://www.researchgate.net/publicati
on/373475694_Mobile_Game_Develo
pment_Using_Unity_Engine (date of
access: 02.04.2024).
4. Sufyan bin Uzayr. Mastering Unity: A
Beginner's Guide (Mastering
Computer Science) 1st Edition. CRC
Press, 2022. 260 с.
5. What is service-oriented architecture
(SOA)?.
URL: https://www.ibm.com/topics/soa
(дата звернення: 03.04.2024)..
6. GitHub - modesttree/Zenject:
Dependency Injection Framework for
Unity3D. GitHub.
URL: https://github.com/modesttree/Z
enject (дата звернення: 03.04.2024).
7. About | VContainer. About | VCon-
tainer. URL:
https://vcontainer.hadashikick.jp/ (да-
та звернення: 02.04.2024)..
Одержано: 12.02.2024
Внутрішня рецензія отримана: 19.02.2024
Зовнішня рецензія отримана: 08.03.2024
Про авторів:
1Бездітний В’ячеслав Миколайович,
асистент кафедри інформаційної
безпеки НН ФТІ.
https://orcid.org/0009-0002-7319-964X.
2Чебанюк Олена Вікторівна
дослідник
Instituto de Investigación en Inteligencia
Artificial (IIIA) Consejo Superior de
Investigaciones Científicas (CSIC).
https://orcid.org/0000-0002-9873-6010
Місце роботи авторів:
1НТУУ «КПІ ім. І. Сікорського»,
тел. +38-097-762-57-48
E-mail: vyachbezd@lll.kpi.ua
2 Instituto de Investigación en
Inteligencia Artificial (IIIA)
E-mail: elena.chebanyuk@iiia.csic.es
|