Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

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

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
1 Дек 2025
Сообщения
32
Реакции
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 если не ошибаюсь
 
Назад
Сверху Снизу