Unreal Engine C++ Course
PatreonBoostyTelegramYoutube
  • О курсе
  • Ссылки
    • Git
    • Visual Studio
    • Unreal Engine
  • Глоссарий
    • Общие понятия
    • Код / C++
      • Const correctness
      • Использование auto
    • Код / Best practices
    • Анимации
    • UI
    • VFX
    • AI
  • Unreal Editor Hotkeys
  • Visual Studio Hotkeys
  • Console commands
  • Проблемы и решения
    • IntelliSense тормозит
    • Проект не компилируется
    • Не вижу репозиторий ShootThemUp
    • Класс не отображается в Solution Explorer
    • Не работает Apply Damage
    • Где взять текстуры интерфейса
    • Нет контекстного меню UE при клике правой кнопкой мыши на файле .uproject
    • Ошибка Unable to start program
  • Вопросы и ответы
    • Зачем вступать в организацию EpicGames на Github
    • Можно ли проходить курс на UE5
    • Как перегенерировать файлы проекта
    • Насколько сильно влияет кол-во инклюдов на работу кода
    • На сколько большие могут быть структуры и таблицы
    • Медленный ли Cast
    • Что такое интерфейсы
    • Как работает код с переопределением GetMaxSpeed
    • Hit Reaction Animation
  • Дополнения к урокам
    • Лекция 065
      • Additive animation при приземлении
      • Блокировка стрельбы при беге
    • Лекция 079
      • Пикап видим после начисления патронов
      • Пикап не подбирается, если боекомплект расходуется в точке респауна пикапа
    • Лекция 089
      • NiagaraSystem не аттачится к дулу
    • Лекция 148
    • Лекция 155
  • Как задавать вопрос
  • Что почитать
  • UE5
  • Automation
    • Форматирование кода
  • VPN
  • 👨‍🎓мои курсы
    • 🧪Автоматизация и тестирование в Unreal Engine
    • 🐍Snake game
  • 🔗lifeexe сообщество
    • Поддержать проект
    • Ресурсы
    • Проекты участников сообщества
    • Code review участников сообщества
Powered by GitBook
On this page

Was this helpful?

  1. Вопросы и ответы

Насколько сильно влияет кол-во инклюдов на работу кода

PreviousКак перегенерировать файлы проектаNextНа сколько большие могут быть структуры и таблицы

Last updated 4 years ago

Was this helpful?

Насколько сильно влияет кол-во инклюдов на работу кода. Например, если хранить все структуры в одном файле и подключать его везде, где требуется хотя бы одна структура из него. Насколько это рационально?

На работу кода не влияет. Влияет на скорость компиляции. Если вы изменяете что-то в заголовочном файле, где у вас объявлены структуры или другие типы данных, то все единицы трансляции (.сpp файлы), где используется данный заголовочный файл будут перекомпилированы. Если данный заголовочный файл не изменяется, то влиять на перекомпиляцию он не будет.

Так же в Unreal Engine при компиляции используется оптимизация, которая называется UnityBuild (к другому игровому движку отношение это не имеет). При данном процессе несколько .cpp файлов объединяются в один и происходит совместная компиляция.

Поэтому, чтобы наглядно посмотреть какие файлы перекомпилируются, можно для теста в ShootThemUpEditor.Target.cs установить флаг bUseUnityBuild = false;

// Shoot Them Up Game, All Rights Reserved. 

using UnrealBuildTool;
using System.Collections.Generic;
 
public class ShootThemUpEditorTarget : TargetRules
{    
    public ShootThemUpEditorTarget(TargetInfo Target) : base(Target)    
    {        
        Type = TargetType.Editor;       
        DefaultBuildSettings = BuildSettingsVersion.V2;
        bUseUnityBuild = false;
        ExtraModuleNames.AddRange(new string[] { "ShootThemUp" });    
    }
}

Перекомпилируются все .сpp файлы, где подключен STUCoreTypes.h явно или косвенно (например в STULauncherWeapon он подтягивается из заголовочного файла STUBaseWeapon)

В консоли будет такая картина:

Я бы так примерно формализовал использование заголовочных файлов для типов данных:

1. Если структура, enum, делегат или какой-то другой тип используется только для внутреннего поведения актора, то декларировать данный тип лучше в соответствующем файле актора.

2. Если типы используются в разных классах, создаем заголовочный файл. Если проект небольшой, то достаточно одного заголовочного файла, например, MainTypes.h (так мы делали в проекте курса)

3. Если проект усложняется, то лучше группировать семантически: WeaponTypes.h, CoreTypes.h, AITypes.h и так далее. (в проекте курса мы так не делали, чтобы не усложнять повествование)

Сделать rebuild (Тут может возникнуть проблема с виртуальной памятью - ). После этого, например, добавить пустую строчку в файл STUCoreTypes.h и сделать build.

Здесь можно ознакомиться, что это такое.
фикс по ссылке