Ответ
Класс сцены (Scene) в игровом движке служит контейнером и менеджером для всех игровых объектов и систем на определенном уровне. Его типичная структура включает:
- Коллекция игровых объектов (GameObjects): Обычно это список, словарь или иерархическое дерево для хранения всех сущностей на сцене.
- Методы жизненного цикла:
Load()/Initialize()– загрузка ресурсов и начальная настройка.Update(float deltaTime)– обновление логики всех объектов (движение, AI, ввод).Render()/Draw()– отрисовка всех визуальных компонентов.Unload()– очистка ресурсов при переходе на другую сцену.
- Состояние сцены: Флаги или перечисление (например,
Running,Paused,Completed). - Системы: Ссылки на менеджеры физики, коллизий, звука и событий, которые работают в контексте этой сцены.
- Камера (Camera): Объект, определяющий вид и проекцию для рендеринга.
Пример минимального класса на C#:
public class Scene
{
private List<GameObject> _gameObjects = new List<GameObject>();
public Camera MainCamera { get; set; }
public SceneState State { get; private set; } = SceneState.Running;
public void AddObject(GameObject obj) => _gameObjects.Add(obj);
public void Update(float deltaTime)
{
if (State != SceneState.Running) return;
foreach (var obj in _gameObjects)
obj.Update(deltaTime);
}
public void Render()
{
foreach (var obj in _gameObjects.Where(obj => obj.IsVisible))
obj.Render(MainCamera?.ViewMatrix);
}
}
В современных движках (Unity, Unreal) используется компонентная система (ECS или ее вариации), где GameObject — это просто контейнер для компонентов (Transform, MeshRenderer, Rigidbody), а сцена управляет их обновлением и взаимодействием.