Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос Как работает энтити система?

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
1 Дек 2025
Сообщения
7
Реакции
0
Как работает энтити система?Типо чем павн отличается от бэйс плеера или зачем нужно разделите на павны.А ещё как получить павн,чем ентити лист отличается от ентити системы.Нужна любая инфа
 

1.​

Это основа игрового мира. Вся игра — это коллекция сущностей (entities), которые взаимодействуют друг с другом.

  • Entity (Энтити, Сущность) — это базовый объект в игре. У него есть:
    • Уникальный ID (индекс в списке).
    • Класс (тип: игрок, оружие, дверь, источник звука, свет).
    • Параметры (properties/keyvalues) — например, для двери: цвет, скорость открытия, цель, к которой она ведет.
    • Состояние (state) — позиция в мире, здоровье, флаги активности.
    • Поведение (логика) — может быть описано скриптами, кодом на C++ или встроенной логикой движка.
Entity System (Система сущностей) — это менеджер, который:

  • Создает и уничтожает сущности.
  • Хранит их все в организованном списке.
  • Обновляет их состояние каждый кадр (вызывает метод Think() или Update).
  • Обрабатывает взаимодействия между ними (через систему сообщений, столкновений, лучей).
  • Сериализует их (сохраняет и загружает).
Аналог из реального мира: Представьте себе театр. Entity System — это режиссер и сценарист в одном лице. Он знает всех актеров (игроки, враги), реквизит (оружие, бонусы), декорации (двери, лифты, кнопки), свет и звук. Он дает им команды и управляет их взаимодействием.


2.​

Это иерархия наследования. Представьте ее как матрешку:

  1. CBaseEntity (Базовый объект) — самая большая матрешка. Есть у ВСЕГО. Имеет позицию, модель, может думать. Дверь, оружие, игрок — все начинаются отсюда.
  2. CBaseCombatCharacter (Боевой персонаж) — матрешка поменьше. Добавляет к CBaseEntity здоровье, броню, возможность носить оружие, систему анимаций. Подходит для игроков И для NPC (врагов, союзников).
  3. CBasePlayer / CBasePawn (Базовый Игрок / Павн) — еще меньше. Конкретная реализация игрового персонажа, управляемого кем-либо (человеком или ботом). У него уже есть:
    • Инвентарь и система оружия.
    • Камера от первого/третьего лица.
    • Ввод с мыши/клавиатуры (или ИИ для бота).
    • HUD (интерфейс).
    • Сетевой код для синхронизации с сервером.
А теперь ключевой момент: В современных движках (как Source 2 или Unreal Engine) произошло дальнейшее разделение:

  • Pawn (Пешка, Павн) — это физическое представление игрока/персонажа в мире. Он имеет коллизию (тело), может двигаться, получать урон, взаимодействовать с физическими объектами. Pawn — это "тело".
  • Player Controller (Контроллер игрока) — это "мозг". Он получает ввод от пользователя (нажатия клавиш, движение мыши) и решает, как на это должен реагировать Pawn. Контроллер также управляет камерой (которая не всегда привязана к телу Pawn) и интерфейсом.
Зачем такое разделение?

  • Гибкость: Один контроллер может "вселяться" в разных павнов (например, в single-player вы можете временно управлять птицей или танком).
  • Смерть/Возрождение: Когда игрока "убивают", его Pawn уничтожается (тело падает), но Player Controller остается живым. Через несколько секунд он создает нового Pawn (новое тело) в точке возрождения.
  • Сетевой код: Контроллер часто существует "на стороне" игрока (клиент-сайден), а Pawn — это реплицируемый на всех клиентах объект на сервере.
  • Специализация: Pawn заботится о физике и анимациях, а Controller — о логике управления и взаимодействии с UI.
Итог: Base Player (в классическом понимании) — это часто монолитная сущность, объединяющая и контроллер, и павна. Pawn — это более чистая, современная и гибкая концепция физического аватара.


3.​

Получить ссылку на павна можно разными способами в коде игры. Например:

  • На стороне клиента / в UI: Запрос у Player Controller его текущего управляемого Pawn.
  • На стороне сервера: При создании игрока сервер сам создает экземпляр класса Pawn и привязывает его к контроллеру.
  • В скриптах (Hammer, Unreal Blueprints): Через специальные узлы (типа Get Player Pawn или Get Actor Of Class).
  • Из другого объекта: При столкновении или "лучевом трассировании" (raycast) вы получаете ссылку на сущность, с которой столкнулись, и можете проверить, является ли она Pawn.
Конкретный API зависит от движка (Source SDK, Unreal Engine C++/Blueprint).


4.​

Это простое и важное различие:

  • Entity List (Список сущностей) — это контейнер, хранилище. Просто массив, список или словарь всех активных сущностей в текущей игре. По сути, это база данных с указателями на объекты CBaseEntity. Его основная функция — хранить и позволять искать сущности по ID или типу.
    • Аналог: Телефонная книга, в которой записаны все сотрудники компании (игрового мира).
  • Entity System (Система сущностей) — это вся логика и менеджмент. Она использует Entity List как одну из своих структур данных. Но кроме этого она отвечает за:
    • Создание сущности (аллокация памяти, добавление в список).
    • Вызов Spawn() (появление) у сущности.
    • Вызов Think() (обновление логики) у всех сущностей каждый кадр.
    • Обработку коллизий между сущностями.
    • Рассылку сообщений между сущностями (например, "игрок нажал на кнопку" -> сообщение кнопке -> сообщение двери, которую она открывает).
    • Уничтожение сущностей (удаление из списка, освобождение памяти).
    • Аналог: Вся система управления персоналом (HR) компании. Телефонная книга (Entity List) — лишь один из ее инструментов.
Итог: Entity List — это часть Entity System. Список — это данные, а Система — это код, который этими данными управляет.
 
контроллер это короче ентити для каждого игрока на сервере, который управляет павном - реальной физической сущностью игрока которая может держать оружие бегать прыгать и тд, можно из контролера получить павн через поле m_hPawn, контроллеры располагаются по индексам от 1 до 64 если не ошибаюсь
 
Назад
Сверху Снизу