UObject

## Общие сведения

Класс **UObject** официально является конечным предком для всех других классов UE4. На самом деле UObject сам является потомком класса UObjectBaseUtility, а последний — класса UObjectBase; именно последний является конечным предком иерархии классов.

Классы, порождённые от UObject, тэгируются макросом UCLASS, который предназначен для обеспечения генерации дополнительного кода специальным инструментарием UE4, что обеспечивает доступ к полям и функциям классов из редактора UE4 и из блупринтов.

UObject вместе со своими предками отвечает за реализацию следующих функций:

* сборку мусора;
* учёт ссылок;
* отражение (reflection);
* сериализацию;
* автоматическое обновление значений свойств по умолчанию;
* автоматическую инициализацию свойств;
* автоматическую интеграцию с редактором;
* RTTI (штатная RTTI, обеспечиваемая компилятором C++, отключена, поскольку может заметно сказываться на производительности);
* репликацию по сети.

Каждому классу типа UObject (или его потомку) соответствует парный класс типа UClass. Последний содержит метаданные, описывающие UObject, и поддерживает эталонный экземпляр объекта, называемый объектом класса по умолчанию (CDO, Class Default Object). CDO служит шаблоном для создания объектов данного класса; после своего создания в процессе инициализации движка он не модифицируется.

Создавать экземпляры объектов классов-наследников UObject можно несколькими способами. Судя по всему, основным из них является использование шаблонной функции NewObject. Имеются и другие подобные функции, а также переопределённый оператор new, однако их использование объявлено устаревшим.

## Типы

### FAssetRegistryTag

```
public struct FAssetRegistryTag
{
    enum ETagType
    {
        TT_Hidden,
        TT_Alphabetical,
        TT_Numerical,
        TT_Dimensional
    };

```

```
    FName     Name;
    ETagType  Type;
    FString   Value;

```

```
    FAssetRegistryTag(
            FName           InName,
            const FString  &InValue,
            ETagType        InType)
        : Name(InName), Type(InType), Value(InValue)
    {}

```

```
    COREUOBJECT_API static void  GetAssetRegistryTagsFromSearchableProperties(
            const UObject              *Object,
            TArray<FAssetRegistryTag>  &OutTags);
}

```

### FAssetRegistryTagMetadata

```
public struct FAssetRegistryTagMetadata
{
    FText    DisplayName;
    FText    TooltipText;
    FText    Suffix;
    FString  ImportantValue;

```

```
    FAssetRegistryTagMetadata&  SetDisplayName(const FText  &InDisplayName)
    {
        DisplayName = InDisplayName;
        return *this;
    }

```

```
    FAssetRegistryTagMetadata&  SetTooltip(const FText  &InTooltipText)
    {
        TooltipText = InTooltipText;
        return *this;
    }

```

```
    FAssetRegistryTagMetadata&  SetSuffix(const FText  &InSuffix)
    {
        Suffix = InSuffix;
        return *this;
    }

```

```
    FAssetRegistryTagMetadata&  SetImportantValue(const FString  &InImportantValue)
    {
        ImportantValue = InImportantValue;
        return *this;
    }
};

```

Используется только в редакторе.

### Object\_eventExecuteUbergraph\_Parms

```
struct Object_eventExecuteUbergraph_Parms
{
    int32 EntryPoint;
};

```

### Super

```
public typedef UObject  Super

```

Super является принятым в UE4 именем для класса-предка текущего класса. В случае с UObject предком будет считаться он сам, поскольку в обычном коде классы-предки UObject явным образом не используются.

### TClass

```
public typedef UObject  TClass

```

TClass является принятым в UE4 именем-синонимом для текущего класса.

### WithinClass

```
public typedef UObject  WithinClass

```

Синоним для UObject.

## Константы

### StaticClassFlags

```
public enum {StaticClassFlags = CLASS_Abstract | CLASS_NoExport}

```

Флаги, характеризующие данный класс.

## Конструкторы

```
UObject()

```

```
UObject(
    const FObjectInitializer &ObjectInitializer)

```

```
UObject(
    EStaticConstructor,
    EObjectFlags        InFlags);

```

```
UObject(
    FVTableHelper &Helper);

```

Различные варианты конструктора. Обычно используется вторая форма. Четвёртый вариант предназначен только для внутреннего использования для «горячей» перезагрузки.

!TODO!

## Общие методы

### \_\_DefaultConstructor

```
public static void  __DefaultConstructor(
                        const FObjectInitializer &X)

```

Этот метод выделяет память под объект с помощью одного из пользовательских вариантов оператора new (с параметрами InSize и InMem; в качестве последнего передаётся результат вызова метода X.GetObj(), приведённый к типу EInternal\*), после чего вызывает конструктор, передавая ему в качестве параметра структуру типа FObjectInitializer.

!TODO!

### \_\_VTableCtorCaller

```
public static UObject *__VTableCtorCaller(
                       FVTableHelper &Helper)

```

!TODO!

### AddReferencedObjects

```
public static void  AddReferencedObjects(
                        UObject             *InThis,
                        FReferenceCollector &Collector)

```

Метод обратного вызова, используемый, чтобы разрешить объекту регистрировать его прямые ссылки на объекты, которые ещё не покрыты потоком токенов.

Параметры:

* InThis — объект, для которого собираются ссылки;
* Collector — объект, используемый для сбора ссылок.

!TODO!

### AreNativePropertiesIdenticalTo

```
public virtual bool  AreNativePropertiesIdenticalTo(
                         UObject *Other
                     ) const

```

Возвращает true, если нативные свойства идентичны таковым, передаваемым компонентам.

Для класса UObject возвращает true.

### BeginDestroy

```
public virtual void  BeginDestroy()

```

Этот метод вызывается перед уничтожением объекта, позволяя объекту начать выполнение необходимых действий асинхронным образом.

### CallAddReferencedObjects

```
public void  CallAddReferencedObjects(
                 FReferenceCollector &Collector)

```

Вспомогательный метод для вызова AddReferencedObjects для данного класса.

### CallFunction

```
public void  CallFunction(
        FFrame       &Stack,
        RESULT\_DECL,
        UFunction    *Function)

```

### CallFunctionByNameWithArguments

```
public bool  CallFunctionByNameWithArguments(
        const TCHAR    *Cmd,
        FOutputDevice  &Ar,
        UObject        *Executor,
        bool            bForceCallWithNonExec = false)

```

### CallRemoteFunction

```
public virtual bool  CallRemoteFunction(
        UFunction           *Function,
        void                *Parms,
        struct FOutParmRec  *OutParms,
        FFrame              *Stack)

```

### CanCheckDefaultSubObjects

```
protected bool  CanCheckDefaultSubObjects(
        bool   bForceCheck,
        bool  &bResult)

```

### CanCreateInCurrentContext

```
public static bool  CanCreateInCurrentContext(
        UObject *Template)

```

Этот метод вызывается для определения, можно ли создать объект из предоставленного шаблона в текущем контексте (редактор, клиент, выделенный сервер, «слушатель» игры). Для выполнения своих функций он вызывает методы NeedsLoadForClient и NeedsLoadForServer.

### CheckDefaultSubobjects

```
public bool  CheckDefaultSubobjects(
        bool  bForceCheck = false)

```

### CheckDefaultSubobjectsInternal

```
protected virtual bool  CheckDefaultSubobjectsInternal()

```

### CollectDefaultSubobjects

```
public void  CollectDefaultSubobjects(
        TArray<UObject *>  &OutDefaultSubobjects,
        bool                bIncludeNestedSubobjects = false)

```

### ConditionalBeginDestroy

```
public bool  ConditionalBeginDestroy()

```

Вызывается непосредственно после того, как принято решение уничтожить данный объект. Может инициировать различные асинхронные операции по его уничтожению.

!TODO!

### ConditionalFinishDestroy

```
public bool  ConditionalFinishDestroy()

```

!TODO!

### ConditionalPostLoad

```
public void  ConditionalPostLoad()

```

PostLoad, если необходимо.

### ConditionalPostLoadSubobjects

```
public void  ConditionalPostLoadSubobjects(
                 FObjectInstancingGraph *OuterInstanceGraph = NULL)

```

Создаёт подобъекты и компоненты для объектов, загружаемых с диска, если это необходимо, а также убеждается в корректности ссылок между компонентами.

Параметры:

* OuterInstanceGraph — задаёт граф создания подобъектов и компонентов, начиная с корня подобъектов.

### CreateAbstractDefaultSubobject

```
public template<class TReturnType>
TReturnType *CreateAbstractDefaultSubobject(
                 FName SubobjectName,
                 bool  bTransient    = false)

```

Параметры:

* TReturnType — класс возвращаемого типа;
* SubobjectName — имя создаваемого подобъекта;
* bTransient — true, если подобъект присваивается несохраняемому свойству.

!TODO!

### CreateDefaultSubobject

```
public UObject *CreateDefaultSubobject(
                    FName   SubobjectFName,
                    UClass *ReturnType,
                    UClass *ClassToCreateByDefault,
                    bool    bIsRequired,
                    bool    bAbstract,
                    bool    bIsTransient)

```

```
public template<class TReturnType>
TReturnType *CreateDefaultSubobject(
                 FName SubobjectName,
                 bool  bTransient    = false)

```

```
public template<class TReturnType, class TClassToConstructByDefault>
TReturnType *CreateDefaultSubobject(
                 FName SubobjectName,
                 bool  bTransient    = false)

```

Параметры:

* TReturnType — класс возвращаемого типа;
* TClassToConstructByDefault — класс, используемый по умолчанию для создания объекта;
* SubobjectName — имя создаваемого подобъекта;
* bTransient — true, если подобъект присваивается несохраняемому свойству.

Создаёт компонент или подобъект. Шаблонные функции вызывают первый вариант, подготавливая для него необходимые параметры.

!TODO!

### CreateEditorOnlyDefaultSubobject

```
public template<class TReturnType>
TReturnType*  CreateEditorOnlyDefaultSubobject(
         FName SubobjectName,
         bool  bTransient     = false)

```

Параметры:

* TReturnType — тип создаваемого подобъекта;
* SubobjectName — имя создаваемого подобъекта;
* bTransient — true, если подобъект присваивается несохраняемому свойству.

Этот метод создаёт подобъект или компонент, который будет использоваться только в редакторе.

### CreateEditorOnlyDefaultSubobjectImpl

```
private UObject*  CreateEditorOnlyDefaultSubobjectImpl(
        FName    SubobjectName,
        UClass  *ReturnType,
        bool     bTransient = false)

```

Параметры:

* SubobjectName — имя создаваемого подобъекта;
* TReturnType — тип создаваемого подобъекта;
* bTransient — true, если подобъект присваивается несохраняемому свойству.

Создаёт компонент или подобъект, используемый только в редакторе.

### CreateOptionalDefaultSubobject

```
public template<class TReturnType>
TReturnType *CreateOptionalDefaultSubobject(
                 FName SubobjectName,
                 bool  bTransient    = false)

```

Параметры:

* TReturnType — класс возвращаемого типа;
* SubobjectName — имя создаваемого подобъекта;
* bTransient — true, если подобъект присваивается несохраняемому свойству.

Этот метод создаёт необязательный компонент или подобъект. Последний не создаётся, когда порождённый класс указывает DoNotCreateDefaultSubobject для заданного имени подобъекта.

!TODO!

### DestroyNonNativeProperties

```
public void  DestroyNonNativeProperties()

```

Уничтожает свойства, которые не могут быть уничтожены нативным деструктором.

### EnsureNotRetrievingVTablePtr

```
private void  EnsureNotRetrievingVTablePtr() const

```

Включается только при определённом символе WITH\_HOT\_RELOAD\_CTORS.

### ExecuteUbergraph

```
public void  ExecuteUbergraph(
        int32  EntryPoint)

```

### ExportCustomProperties

```
public virtual void  ExportCustomProperties(
        FOutputDevice &Out,
        uint32         Indent)

```

Экспортирует значения свойств объекта в виде текста, что необходимо для операций copy/paste.

Параметры:

* Out — устройство, которому отправляется текстовый вывод;
* Indent — число пробелов, предшествующих каждой строке вывода.

Большинство объектов не нуждается в реализации этого метода, поскольку скрипты Unreal способны обработать большинство ситуаций самостоятельно.

Для класса UObject этот метод никаких действий не выполняет.

### FindFunction

```
public UFunction*  FindFunction(
        FName  InName
    ) const

```

### FindFunctionChecked

```
public UFunction*  FindFunctionChecked(
        FName  InName
    ) const

```

### FinishDestroy

```
public virtual void  FinishDestroy()

```

Этот метод осуществляет окончательное уничтожение объекта, после чего занимаемая объектом память становится недоступна. Методы, перекрывающие этот метод в классах-потомках, должны в конце своего выполнения вызывать этот метод, реализованный классом-предком.

### GetArchetype

```
public UObject*  GetArchetype() const

```

Возвращает объект-архетип, на котором базируется текущий объект. Реально вызывает функцию GetArchetypeFromRequiredInfo, передавая ей необходимые характеристики текущего объекта.

### GetArchetypeFromRequiredInfo

```
public static UObject*  GetArchetypeFromRequiredInfo(
        UClass        *Class,
        UObject       *Outer,
        FName          Name,
        EObjectFlags   ObjectFlags)

```

Возвращает адрес объекта, который должен бы быть архетипом для объекта с заданными параметрами (классом, хозяином, именем и набором флагов).

Если текущий объект является CDO (в *ObjectFlags* установлен флаг RF\_ClassDefaultObject), возвращается его архетип, т.е. CDO для класса, являющегося предком класса текущего объекта. Если у класса текущего объекта предков нет, возвращается нуль.

Если при вызове объект-хозяин (параметр *Outer*) не указан, а также если он указан, но является пакетом (пакеты не могут иметь подобъектов), возвращается CDO текущего объекта. Если CDO в этот момент отсутствует, он будет создан.

Если же объект-хозяин не является пакетом, то:

* если в составе архетипа объекта-хозяина найден подходящий подъобъект (с заданными классом и именем — параметры *Class* и *Name* соответственно; нуль означает игнорирование соответствующего значения), то возвращается этот подъобъект;

* если подходящего подобъекта нет, но архетип может находиться в суперклассе (в *ObjectFlags* установлен флаг RF\_InheritableComponentTemplate), то производится просмотр всей цепочки скомпилированных из блупринта суперклассов (у суперкласса должен быть установлен флаг CLASS\_CompiledFromBlueprint), начиная от прямого суперкласса объекта-хозяина, до тех пор, пока у какого-либо из этих блупринтовых суперклассов не будет обнаружен подобъект подходящего типа. Если таковой найден, будет возвращён именно он, в противном случае возвращается CDO текущего объекта (который при необходимости создаётся);

* если же подходящего подобъекта у хозяина нет и архетип не может находиться в суперклассе, производится поиск подходящего архетипа в классе архетипа объекта-хозяина. Если он не найден, возвращается CDO текущего объекта (который при необходимости создаётся).

### GetArchetypeInstances

```
public void  GetArchetypeInstances(
        TArray<UObject *>  &Instances)

```

Строит список объектов, являющихся архетипами текущего объекта.

### GetAssetRegistryTags

```
public virtual void  GetAssetRegistryTags(
        TArray<FAssetRegistryTag> &OutTags
    ) const

```

### GetDefaultConfigFilename

```
public FString  GetDefaultConfigFilename() const

```

### GetDefaultSubobjectByName

```
public UObject *GetDefaultSubobjectByName(
                    FName  ToFind)

```

Этот метод возвращает подобъект с заданным именем.

### GetDefaultSubobjects

```
public void  GetDefaultSubobjects(
                 TArray<UObject*> &OutDefaultSubobjects)

```

Этот метод возвращает список всех подобъектов по умолчанию, связанных с данным объектом.

### GetDesc

```
public virtual FString  GetDesc()

```

Возвращает однострочное описание объекта.

Для класса UObject возвращается пустая строка.

### GetDetailedInfo

```
public FString  GetDetailedInfo() const

```

Возвращает детальную информацию об объекте.

### GetDetailedInfoInternal

```
protected virtual FString  GetDetailedInfoInternal() const

```

Этот метод возвращает детальную информацию об объекте. Он не должен вызываться прямо; вместо него вызывается метод GetDetailedInfo.

Применительно к типу UObject возвращается строка "No\_Detailed\_Info\_Specified".

### GetExporterName

```
public virtual FName  GetExporterName()

```

Возвращает имя экспортёра, используемого для экспорта этого объекта. Используется, когда одно и то же расширение имеют несколько экспортёров.

Для класса UObject возвращается пустая строка.

### GetFunctionCallspace

```
public virtual int32  GetFunctionCallspace(
        UFunction  *Function,
        void       *Parameters,
        FFrame     *Stack)

```

### GetGlobalUserConfigFilename

```
public FString  GetGlobalUserConfigFilename() const

```

### GetLifetimeReplicatedProps

```
public virtual void  GetLifetimeReplicatedProps(
                       TArray<class FLifetimeProperty> &OutLifetimeProps
                     ) const

```

Возвращает свойства, которые реплицируются во время жизни канала актёра.

### GetNativePropertyValues

```
public virtual bool  GetNativePropertyValues(
                         TMap<FString,FString> &out_PropertyValues,
                         uint32                 ExportFlags=0
                     ) const

```

Функция обратного вызова для получения текстового представления нативно сериализированных свойств. Дочерние классы должны реализовывать этот метод, если они желают иметь нативно сериализованные значения свойств, включаемые в, например, вывод diffcommandlet.

Параметры:

* out\_PropertyValues — хранилище для пар «имя свойства — значение свойства». Значения должны быть отформатированы так, как это делает метод UProperty::ExportText.

* ExportFlags — битовая маска флагов EPropertyPortFlags, используемая для модификации формата значений свойств.

Возвращается true, если в хранилище было помещено хотя бы одно свойство.

Для класса UObject всегда возвращает false.

### GetPrivateStaticClass

```
private static UClass *GetPrivateStaticClass(
                           const TCHAR *Package)

```

!TODO!

### GetResourceSize

```
public virtual SIZE_T  GetResourceSize(
                           EResourceSizeMode::Type  Mode)

```

Возвращает размер ресурсов объекта для отображения в редакторе.

Для класса UObject возвращается константа RESOURCE\_SIZE\_NONE, показывающая, что размер не определён.

### GetRestoreForUObjectOverwrite

```
public virtual FRestoreForUObjectOverwrite*  GetRestoreForUObjectOverwrite()

```

Сохраняет информацию для StaticAllocateObject в случае перезаписи существующего объекта. StaticAllocateObject вызовет уничтожение результата после вызова Restore.

Этот метод возвращает FRestoreForUObjectOverwrite, позволяющий восстановить объект, или NULL, если в этом нет необходимости.

Для класса UObject возвращается нуль.

### GetSubobjectsWithStableNamesForNetworking

```
public virtual void  GetSubobjectsWithStableNamesForNetworking(
                         TArray<UObject*> &ObjList)

```

Возвращает список подобъектов, имеющих стабильные имена для работы по сети.

Для класса UObject ничего не делает.

### GetWorld

```
public virtual UWorld *GetWorld() const

```

!TODO!

### GetWorldChecked

```
public UWorld *GetWorldChecked(
                   bool &bSupported
               ) const

```

!TODO!

### Implements

```
public template<class T>
    bool Implements() const

```

Возвращает true, если данный объект реализует интерфейс *T*.

### ImplementsGetWorld

```
public bool  ImplementsGetWorld() const

```

### ImportCustomProperties

```
public virtual void  ImportCustomProperties(
                         const TCHAR      *SourceText,
                         FFeedbackContext *Warn)

```

Импортирует свойства объекта.

Параметры:

* SourceText — входные данные, не могут быть нулём;
* Warn — параметр для информирования об ошибках, не может быть нулём.

Большинство объектов не нуждается в реализации этого метода, поскольку скрипты Unreal способны обработать большинство ситуаций самостоятельно.

Для класса UObject этот метод никаких действий не выполняет.

### InstanceSubobjectTemplates

```
public void  InstanceSubobjectTemplates(
        struct FObjectInstancingGraph  *InstanceGraph = NULL)

```

### IsAsset

```
public virtual bool  IsAsset() const

```

Возвращает true, если данный объект считается ассетом.

### IsBasedOnArchetype

```
public bool  IsBasedOnArchetype(
        const UObject* const  SomeObject
    ) const

```

Возвращает true, если текущий объект имеет заданный объект в качестве своего архетипа (не обязательно прямого — при анализе прослеживается вся цепочка архетипов, получаемая последовательными вызовами метода GetArchetype).

### IsFullNameStableForNetworking

```
public virtual bool IsFullNameStableForNetworking() const

```

Возвращает true, если к данному объекту можно обращаться по сети, используя его абсолютный путь.

### IsInBlueprint

```
public bool  IsInBlueprint() const

```

Возвращает true, если данный объект содержится в блупринтовом объекте или является частью последнего.

### IsLocalizedResource

```
public virtual bool  IsLocalizedResource()

```

Возвращает true, если данный объект является локализованным ресурсом.

Для класса UObject этот метод возвращает false.

### IsNameStableForNetworking

```
public virtual bool  IsNameStableForNetworking() const

```

Возвращает true, если к объекту можно обращаться через сеть по имени его пути относительно его «хозяина».

### IsPostLoadThreadSafe

```
public virtual bool  IsPostLoadThreadSafe() const

```

Этот метод вызывается во время асинхронной загрузки для определения, может ли метод PostLoad быть вызван в потоке загрузки.

Возвращает true, если вызов PostLoad в потоке загрузки возможен.

Для UObject возвращает false. С чем это связано, непонятно, т.к., по идее, если нельзя в другом потоке вызывать PostLoad для базового класса, то нельзя это делать и для любых его классов-наследников.

### IsReadyForFinishDestroy

```
public virtual bool  IsReadyForFinishDestroy()

```

Этот метод вызывается, чтобы проверить, готов ли объект к выполнению FinishDestroy. Этот вызов производится после вызова метода BeginDestroy, поскольку необходимо убедиться, что все потенциально асинхронные действия были выполнены.

Для класса UObject всегда возвращается true.

### IsSafeForRootSet

```
public virtual bool  IsSafeForRootSet() const

```

Возвращает true, если данный объект безопасно добавлять к корневому набору.

### IsSelected

```
public bool  IsSelected() const

```

Возвращает true, если данный объект выбран.

### IsSupportedForNetworking

```
public virtual bool  IsSupportedForNetworking() const

```

Возвращает true, если к данному объекту можно обращаться по сети.

### LoadConfig

```
public virtual void  LoadConfig(
        UClass       *ConfigClass      = NULL,
        const TCHAR  *Filename         = NULL,
        uint32        PropagationFlags = UE4::LCPF_None,
        UProperty    *PropertyToLoad   = NULL)

```

### MarkAsEditorOnlySubobject

```
public virtual void  MarkAsEditorOnlySubobject()

```

### Modify

```
public virtual bool  Modify(
        bool  bAlwaysMarkDirty = true)

```

Параметры:

* bAlwaysMarkDirty — если равен true, пакет помечается как изменённый даже в случае, если в данный момент не выполняется запись активной транзакции undo/redo.

Отмечает текущий объект как модифицированный. Если в этот момент выполняется запись в транзакционный буфер (undo/redo), при вызове этого метода копия объекта сохраняется в буфере, а пакет помечается как нуждающийся в сохранении. Возвращается true, если объект был сохранён в транзакционном буфере.

!TODO!

### NeedsLoadForClient

```
public virtual bool  NeedsLoadForClient() const

```

Вызывается во время сохранения для определения флагов загрузки, сохраняемых вместе с объектом. Во время перезагрузки этот объект клиентами будет отброшен.

Возвращается true, если данный объект не должен загружаться клиентами. Для класса UObject всегда возвращается true.

### NeedsLoadForEditorGame

```
public virtual bool NeedsLoadForEditorGame() const

```

Вызывается во время сохранения для определения флагов загрузки, сохраняемых вместе с объектом.

Возвращается true, если данный объект должен всегда загружаться для игры в редакторе. Для класса UObject всегда возвращается false.

### NeedsLoadForServer

```
public virtual bool  NeedsLoadForServer() const

```

Вызывается во время сохранения для определения флагов загрузки, сохраняемых вместе с объектом. Во время перезагрузки этот объект сервером будет отброшен.

Возвращается true, если данный объект не должен загружаться сервером. Для класса UObject всегда возвращается true.

### OutputReferencers

```
public void  OutputReferencers(
        FOutputDevice               &Ar,
        FReferencerInformationList  *Referencers = NULL)

```

### ParseParms

```
public void  ParseParms(
        const TCHAR  *Parms)

```

### PostDuplicate

```
public virtual void  PostDuplicate(
                         bool  bDuplicateForPIE)

```

Этот метод вызывается после дублирования и сериализации и перед вызовом метода PostLoad. Он используется, например, чтобы убедиться, что UStaticMesh'и, относящиеся к продублированному UModel, тоже были должным образом скопированы.

Этот метод не вызывается для компонентов, если выполняется дублирование объекта. В данном случае нужно использовать метод PostEditImport.

Для класса UObject никаких действий не выполняется.

### PostEditImport

```
public virtual void  PostEditImport()

```

Вызывается после импорта значений свойств данного объекта (вставка, дублирование или импорт .t3d). Позволяет объекту выполнить любые дополнительные действия со свойствами, которые не должны дублироваться или которые не поддерживаются скриптовой сериализацией.

Для класса UObject никаких действий не выполняется.

### PostInitProperties

```
public virtual void  PostInitProperties()

```

Этот метод вызывается после завершения работы конструктора и после окончания инициализации свойств.

### PostInterpChange

```
public virtual void  PostInterpChange(
                         UProperty *PropertyThatChanged)

```

Этот метод вызывается, когда какое-либо свойство объекта изменяется через InterpPropertyTracks.

### PostLoad

```
public virtual void  PostLoad()

```

Этот метод вызывается сразу после завершения загрузки объекта или сразу после выполнения undo/redo.

### PostLoadSubobjects

```
public virtual void  PostLoadSubobjects(
                         FObjectInstancingGraph *OuterInstanceGraph)

```

Параметры:

* OuterInstanceGraph — задаёт граф подобъектов и компонентов, созданных для корня подобъектов.

Этот метод создаёт компоненты для объектов, загруженных с диска, и обеспечивает корректность ссылок между вложенными компонентами.

### PostNetReceive

```
public virtual void  PostNetReceive()

```

Вызывается после получения пакета (bunch) через сеть.

### PostReloadConfig

```
public virtual void  PostReloadConfig(
                         UProperty *PropertyThatWasLoaded)

```

Вызывается из ReloadConfig после того, как объект перезагрузит свои конфигурационные данные.

Для класса UObject никаких действий не выполняется.

### PostRename

```
public virtual void PostRename(
                        **UObject**     *OldOuter,
                        const FName  OldName)

```

Данный метод для класса UObject никаких действий не выполняет.

### PostSaveRoot

```
public virtual void PostSaveRoot(
                        bool  bCleanupIsRequired)

```

Этот метод вызывается из SavePackage после выполнения сохранения, получая на входе значение, ранее возвращённое методом PreSaveRoot. Эта пара методов нужна в случае, когда сохраняемым объектам требуется выполнить какие-то действия перед и после сохранения.

Данный метод для класса UObject никаких действий не выполняет.

### PreNetReceive

```
public virtual void  PreNetReceive()

```

Вызывается перед получением пакета (bunch) через сеть.

### PreSave

```
public virtual void PreSave()

```

Этот метод однократно вызывается перед началом сериализации объекта для его сохранения. Он необходим для сохранения временных вычислений, поскольку вызов метода Serialize производится из SavePackage для каждого объекта трижды.

Для объектов, созданных в этом методе, вызов PreSave не выполняется.

!TODO!

### PreSaveRoot

```
public virtual bool  PreSaveRoot(
                         const TCHAR     *Filename,
                         TArray<FString> &AdditionalPackagesToCook)

```

Этот метод вызывается из SavePackage перед выполнением сохранения. После завершения сохранения вызывается метод PostSaveRoot, получающий в качестве параметра значение, возвращаемое этим методом. Эта пара методов нужна в случае, когда сохраняемым объектам требуется выполнить какие-то действия перед и после сохранения.

Данный метод для класса UObject возвращает false.

### ProcessConsoleExec

```
public virtual bool  ProcessConsoleExec(
        const TCHAR    *Cmd,
        FOutputDevice  &Ar,
        UObject        *Executor)

```

### ProcessContextOpcode

```
private void  ProcessContextOpcode(
        FFrame       &Stack,
        RESULT\_DECL,
        bool          bCanFailSilent)

```

### ProcessEvent

```
public virtual void  ProcessEvent(
        UFunction  *Function,
        void       *Parms)

```

### ProcessInternal

```
public void ProcessInternal(
        FFrame     &Stack,
        RESULT\_DECL)

```

### RegenerateClass

```
public virtual UClass*  RegenerateClass(
        UClass             *ClassToRegenerate,
        UObject            *PreviousCDO,
        TArray<UObject *>  &ObjLoaded)

```

### ReinitializeProperties

```
public void  ReinitializeProperties(
        UObject                *SourceObject  = NULL,
        FObjectInstancingGraph *InstanceGraph = NULL)

```

Обёртка для InitProperties, которая обрабатывает безопасную «разборку» этого объекта перед повторной инициализацией его из заданного исходного объекта.

### ReloadConfig

```
public void  ReloadConfig(
        UClass       *ConfigClass      = NULL,
        const TCHAR  *Filename         = NULL,
        uint32        PropagationFlags = UE4::LCPF_None,
        UProperty    *PropertyToLoad   = NULL)

```

### Rename

```
public virtual bool  Rename(
        const TCHAR  *NewName  = NULL,
        UObject      *NewOuter = NULL,
        ERenameFlags  Flags    = REN_None)

```

Переименовывает объект, чтобы обеспечить ему уникальное имя.

### RetrieveReferencers

```
public void  RetrieveReferencers(
        TArray<FReferencerInformation>  *OutInternalReferencers,
        TArray<FReferencerInformation>  *OutExternalReferencers)

```

### SaveConfig

```
public virtual void  SaveConfig(
        uint64            Flags    = CPF_Config,
        const TCHAR      *Filename = NULL,
        FConfigCacheIni  *Config   = GConfig)

```

### Serialize

```
public virtual void  Serialize(
        FArchive &Ar)

```

Сериализатор объекта для выполнения его записи.

### SerializeScriptProperties

```
public void  SerializeScriptProperties(
         FArchive &Ar
     ) const

```

Сериализирует скрпитовые свойства. Сохраняются лишь те свойства, чьи значения отличаются от базовых значений, указанных через DiffObject (обычно это архетип данного объекта).

### SetLinker

```
public void  SetLinker(
        FLinkerLoad  *LinkerLoad,
        int32         LinkerIndex,
        bool          bShouldDetachExisting = true)

```

### ShutdownAfterError

```
public virtual void  ShutdownAfterError()

```

Для класса UObject никаких действий этот метод не выполняет.

### SkipFunction

```
public void  SkipFunction(
        FFrame       &Stack,
        RESULT\_DECL,
        UFunction    *Function)

```

### SourceFileTagName

```
public static const FName &SourceFileTagName()

```

Возвращает общее имя тэга, используемое для всех путей импорта исходных файлов ассетов.

### StaticClass

```
public static UClass*  StaticClass()

```

Возвращает класс для текущего объекта. Технически этот метод обращается к приватному методу GetPrivateStaticClass, передавая ему имя пакета "/Script/CoreUObject".

### StaticClassCastFlags

```
public static EClassCastFlags  StaticClassCastFlags()

```

Для класса UObject возвращает флаг CASTCLASS\_None.

### StaticConfigName

```
public static const TCHAR *StaticConfigName()

```

Возвращает строку "Engine".

### StaticRegisterNativesUObject

```
public static void  StaticRegisterNativesUObject()

```

Не выполняет никаких действий.

### TagSubobjects

```
public virtual void  TagSubobjects(
        EObjectFlags  NewFlags)

```

Помечает объекты, являющиеся частями одного и того же ассета, заданными флагами, что используется сборщиком мусора.

### UpdateDefaultConfigFile

```
public void  UpdateDefaultConfigFile(
        const FString  &SpecificFileLocation = "")

```

### UpdateGlobalUserConfigFile

```
public void  UpdateGlobalUserConfigFile()

```

### UpdateSinglePropertyInConfigFile

```
public void  UpdateSinglePropertyInConfigFile(
        const UProperty  *InProperty,
        const FString    &InConfigIniName)

```

### UpdateSingleSectionOfConfigFile

```
private void  UpdateSingleSectionOfConfigFile(
        const FString  &ConfigIniName)

```

## Методы, используемые только в редакторе

### BeginCacheForCookedPlatformData

```
public virtual void  BeginCacheForCookedPlatformData(
                         const ITargetPlatform *TargetPlatform)

```

!TODO!

В классе UObject ничего не делает.

### CanEditChange

```
public virtual bool  CanEditChange(
                         const UProperty *InProperty
                     ) const

```

!TODO!

### ClearAllCachedCookedPlatformData

```
public virtual void  ClearAllCachedCookedPlatformData()

```

!TODO!

В классе UObject ничего не делает.

### ClearCachedCookedPlatformData

```
public virtual void  ClearCachedCookedPlatformData(
                         const ITargetPlatform *TargetPlatform)

```

!TODO!

В классе UObject ничего не делает.

### GetAssetRegistryTagMetadata

```
public virtual void  GetAssetRegistryTagMetadata(
                         TMap<FName, FAssetRegistryTagMetadata> &OutMetadata
                     ) const

```

Собирает метаданные для тэга регистрации ассета.

!TODO!

### GetTransactionAnnotation

```
public virtual TSharedPtr<ITransactionObjectAnnotation>  GetTransactionAnnotation() const

```

!TODO!

### IsCachedCookedPlatformDataLoaded

```
public virtual bool  IsCachedCookedPlatformDataLoaded(
                         const ITargetPlatform *TargetPlatform)

```

!TODO!

В классе UObject возвращает true.

### LoadedFromAnotherClass

```
public virtual void  LoadedFromAnotherClass(
                         const FName &OldClassName)

```

Этот метод вызывается, когда данный объект был загружен из другого класса через активное перенаправление (redirect), что может произойти только в редакторе.

Для класса UObject никаких действий не выполняется.

!TODO!

### PostEditChange

```
public void  PostEditChange()

```

!TODO!

### PostEditChangeChainProperty

```
public virtual void  PostEditChangeChainProperty(
                         FPropertyChangedChainEvent &PropertyChangedEvent)

```

!TODO!

### PostEditChangeProperty

```
public virtual void  PostEditChangeProperty(
                         FPropertyChangedEvent &PropertyChangedEvent)

```

!TODO!

### PostEditUndo

```
public virtual void  PostEditUndo()

```

```
public virtual void  PostEditUndo(TSharedPtr<ITransactionObjectAnnotation>  TransactionAnnotation)

```

!TODO!

### PostLinkerChange

```
public virtual void  PostLinkerChange()

```

Этот метод вызывается в ответ на изменение линкера, что может произойти только в редакторе.

Для класса UObject никаких действий не выполняется.

!TODO!

### PreEditChange

```
public virtual void  PreEditChange(
                         UProperty *PropertyAboutToChange)

```

```
public virtual void  PreEditChange(
                         FEditPropertyChain &PropertyAboutToChange)

```

!TODO!

### PreEditUndo

```
public virtual void  PreEditUndo()

```

!TODO!

### PropagatePostEditChange

```
public void  PropagatePostEditChange(
                 TArray<UObject*>   &AffectedObjects,
                 FEditPropertyChain &PropertyAboutToChange)

```

!TODO!

### PropagatePreEditChange

```
public void  PropagatePreEditChange(
                 TArray<UObject*>   &AffectedObjects,
                 FEditPropertyChain &PropertyAboutToChange)

```

!TODO!

### WillNeverCacheCookedPlatformDataAgain

```
public virtual void  WillNeverCacheCookedPlatformDataAgain()

```

!TODO!

В классе UObject ничего не делает.

## Операторы

### operator=

```
private UObject &operator=(
                     UObject const &)

```

!TODO!

### operator new

```
public void *operator new(
                 const size_t  InSize,
                 UObject      *InOuter    = (UObject*) GetTransientPackage(),
                 FName         InName     = NAME_None,
                 EObjectFlags  InSetFlags = RF_NoFlags)

```

```
public void *operator new(
                 const size_t  InSize,
                 EInternal     InInternalOnly,
                 UObject      *InOuter        = (UObject*) GetTransientPackage(),
                 FName         InName         = NAME_None,
                 EObjectFlags  InSetFlags     = RF_NoFlags)

```

```
public void *operator new(
                 const size_t  InSize,
                 EInternal    *InMem)

```

Создаёт новый экземпляр данного класса.

Первый вариант объявлен устаревшим, начиная с UE версии 4.7. Вместо него необходимо использовать функции NewObject.

Два других варианта предназначены только для внутреннего использования.

## Автогенерируемые функции

Заголовки этих функций создаются с помощью макроса DECLARE\_FUNCTION. Его вызовы в определении класса UObject прописаны явно.

### execAddMulticastDelegate

```
void  execAddMulticastDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execArrayConst

```
void  execArrayConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execAssert

```
void  execAssert(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execAssetConst

```
void  execAssetConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execArrayElement

```
void  execArrayElement(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execBindDelegate

```
void  execBindDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execBoolVariable

```
void  execBoolVariable(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execBreakpoint

```
void  execBreakpoint(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execByteConst

```
void  execByteConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execCallMathFunction

```
void  execCallMathFunction(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execCallMulticastDelegate

```
void  execCallMulticastDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execClassContext

```
void  execClassContext(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execClassDefaultVariable

```
void  execClassDefaultVariable(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execClearMulticastDelegate

```
void  execClearMulticastDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execComputedJump

```
void  execComputedJump(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execContext

```
void  execContext(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execContext\_FailSilent

```
void  execContext_FailSilent(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDefaultVariable

```
void  execDefaultVariable(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynamicCast

```
void  execDynamicCast(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynArrayAdd

```
void  execDynArrayAdd(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynArrayAddItem

```
void  execDynArrayAddItem(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynArrayFind

```
void  execDynArrayFind(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynArrayFindStruct

```
void  execDynArrayFindStruct(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynArrayInsert

```
void  execDynArrayInsert(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynArrayInsertItem

```
void  execDynArrayInsertItem(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynArrayRemove

```
void  execDynArrayRemove(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynArrayRemoveItem

```
void  execDynArrayRemoveItem(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execDynArraySort

```
void  execDynArraySort(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execEatReturnValue

```
void  execEatReturnValue(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execEndFunctionParms

```
void  execEndFunctionParms(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execEndOfScript

```
void  execEndOfScript(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execEmptyParmValue

```
void  execEmptyParmValue(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execEqualEqual\_DelegateDelegate

```
void  execEqualEqual_DelegateDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execEqualEqual\_DelegateFunction

```
void  execEqualEqual_DelegateFunction(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execFalse

```
void  execFalse(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execFinalFunction

```
void  execFinalFunction(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execFloatConst

```
void  execFloatConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execGetDynArrayElement

```
void  execGetDynArrayElement(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execGetDynArrayLength

```
void  execGetDynArrayLength(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execInstanceDelegate

```
void  execInstanceDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execInstanceVariable

```
void  execInstanceVariable(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execIntConst

```
void  execIntConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execIntConstByte

```
void  execIntConstByte(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execInterfaceCast

```
void  execInterfaceCast(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execInterfaceContext

```
void  execInterfaceContext(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execInterfaceToBool

```
void  execInterfaceToBool(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execInterfaceToInterface

```
void  execInterfaceToInterface(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execInterfaceToObject

```
void  execInterfaceToObject(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execInterfaceVariable

```
void  execInterfaceVariable(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execIntOne

```
void  execIntOne(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execIntZero

```
void  execIntZero(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execJump

```
void  execJump(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execJumpIfNot

```
void  execJumpIfNot(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execLet

```
void  execLet(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execLetBool

```
void  execLetBool(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execLetDelegate

```
void  execLetDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execLetMulticastDelegate

```
void  execLetMulticastDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execLetObj

```
void  execLetObj(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execLetValueOnPersistentFrame

```
void  execLetValueOnPersistentFrame(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execLetWeakObjPtr

```
void  execLetWeakObjPtr(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execLocalVariable

```
void  execLocalVariable(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execLocalOutVariable

```
void  execLocalOutVariable(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execMetaCast

```
void  execMetaCast(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execNameConst

```
void  execNameConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execNativeParm

```
void  execNativeParm(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execNew

```
void  execNew(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execNoObject

```
void  execNoObject(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execNotEqual\_DelegateDelegate

```
void  execNotEqual_DelegateDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execNotEqual\_DelegateFunction

```
void  execNotEqual_DelegateFunction(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execNothing

```
void  execNothing(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execNothingOp4a

```
void  execNothingOp4a(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execNullInterface

```
void  execNullInterface(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execObjectConst

```
void  execObjectConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execObjectToBool

```
void  execObjectToBool(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execObjectToInterface

```
void  execObjectToInterface(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execPopExecutionFlow

```
void  execPopExecutionFlow(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execPopExecutionFlowIfNot

```
void  execPopExecutionFlowIfNot(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execPrimitiveCast

```
void  execPrimitiveCast(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execPushExecutionFlow

```
void  execPushExecutionFlow(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execRemoveMulticastDelegate

```
void  execRemoveMulticastDelegate(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execReturnNothing

```
void  execReturnNothing(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execRotationConst

```
void  execRotationConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execSelf

```
void  execSelf(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execSetArray

```
void  execSetArray(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execSetDynArrayElement

```
void  execSetDynArrayElement(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execSetDynArrayLength

```
void  execSetDynArrayLength(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execSkipOffsetConst

```
void  execSkipOffsetConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execStringConst

```
void  execStringConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execStructCmpEq

```
void  execStructCmpEq(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execStructCmpNe

```
void  execStructCmpNe(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execStructConst

```
void  execStructConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execStructMember

```
void  execStructMember(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execStructMemberContext

```
void  execStructMemberContext(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execSwitchValue

```
void  execSwitchValue(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execTextConst

```
void  execTextConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execTracepoint

```
void  execTracepoint(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execTransformConst

```
void  execTransformConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execTrue

```
void  execTrue(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execUndefined

```
void  execUndefined(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execUnicodeStringConst

```
void  execUnicodeStringConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execVectorConst

```
void  execVectorConst(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execVirtualFunction

```
void  execVirtualFunction(
        FFrame       &Stack,
        RESULT\_DECL)

```

### execWireTracepoint

```
void  execWireTracepoint(
        FFrame       &Stack,
        RESULT\_DECL)

```