ФЭНДОМ


Класс UObjectBase находится в самой вершине иерархии классов UE4: от него порождён класс UObjectBaseUtility, а через последний — класс UObject, который «официально» считается базовым классом всех объектов.

UObjectBase отвечает за добавление объектов к массиву объектов (на котором основана работа сборщика мусора) и в хэш-таблицу имён (используется для поиска объекта по имени). Здесь же определены методы и поля, связанные со сбором статистики и с регистрацией классов.

Конструкторы Править

protected UObjectBase()

Конструктор, не выполняющий никаких действий.


protected UObjectBase(
              EObjectFlags  InFlags)

Параметры:

  • InFlags — флаги создаваемого объекта.

Этот конструктор инициализирует следующие поля:

  • ObjectFlags получает значение параметра InFlags;
  • InternalIndex получает значение INDEX_NONE (-1);
  • Class получает значение NULL;
  • Outer получает значение NULL.


public UObjectBase(
           UClass       *InClass,
           EObjectFlags  InFlags,
           UObject      *InOuter,
           FName         InName)

Параметры:

  • InClass — класс, к которому относится создаваемый объект; не может быть нулём.
  • InFlags — флаги создаваемого объекта.
  • InOuter — объект-«хозяин» создаваемого объекта (создаваемый объект логически находится внутри «хозяина»).
  • InName — имя создаваемого объекта.

Значения параметров присваиваются соответствующим полям создаваемого объекта. Если создание выполняется не в основном потоке игры, будет принудительно установлен флаг RF_Async. После заполнения полей новый объект добавляется к массиву объектов, а его имя — к хэш-таблице имён. Последние действия технически выполняются методом AddObject.

Деструкторы Править

public virtual  ~UObjectBase()

Конечный деструктор, удаляющий объект из массива объектов и (косвенно) из любых аннотаций.

Методы Править

AddObject Править

private void  AddObject(
                  FName  Name)

Параметры:

  • Name — имя, присваиваемое объекту.

Этот метод добавляет новосозданный объект к массиву объектов и хэш-таблице имён, предварительно присвоив полю Name значение, заданное в качестве параметра. Кроме того, если вызов метода произведён не из главного потока игры, для объекта устанавливается флаг RF_Async.

Для добавления объекта к массиву вызывается функция AllocateUObjectIndexForCurrentThread, а к хэш-таблице имён — фукнция HashObject.

AtomicallyClearFlags Править

public void  AtomicallyClearFlags(
                 EObjectFlags  FlagsToAdd)

Атомарно сбрасывает заданные флаги в поле ObjectFlags.

AtomicallySetFlags Править

public void  AtomicallySetFlags(
                 EObjectFlags  FlagsToAdd)

Атомарно устанавливает заданные флаги в поле ObjectFlags.

CreateStatID Править

private void  CreateStatID() const

!TODO!

DeferredRegister Править

protected virtual void  DeferredRegister(
                            UClass  *UClassStaticClass,
                            const TCHAR *PackageName,
                            const TCHAR *Name)

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

!TODO!

EmitBaseReferences Править

public static void  EmitBaseReferences(
                        UClass *RootClass)

Выдаёт токен для сборщика мусора.

!TODO!

GetClass Править

public UClass *GetClass() const

Возвращает значение поля Class.

GetFlags Править

public EObjectFlags  GetFlags() const

Возвращает значение поля ObjectFlags.

GetFName Править

public const FName  GetFName() const

Возвращает значение поля Name.

GetOuter Править

public UClass *GetOuter() const

Возвращает значение поля Outer.

GetStatID Править

public TStatId  GetStatID(
                        bool  bForDeferredUse = false
                    ) const

!TODO!

GetUniqueID Править

public uint32  GetUniqueID() const

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

IsValidLowLevel Править

public bool  IsValidLowLevel() const

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

  • наличие самого объекта (this отличен от нуля);
  • назначенность класса (поле Class отлично от нуля);
  • допустимость индекса объекта в массиве объектов (для проверки вызывается метод FUObjectArray::IsValid).

IsValidLowLevelFast Править

public bool  IsValidLowLevelFast(
                 bool  bRecursive = true
             ) const

Параметры:

  • bRecursive — если равен true, выполняется проверка корректности класса, заданного полем Class данного объекта.

В случае, если ошибок не выявлено, возвращается значение true, в противном случае — false.

Этот метод выполняет большее число проверок, чем метод IsValidLowLevel.

!TODO!

LowLevelRename Править

protected void  LowLevelRename(
                    FName    NewName,
                    UObject *NewOuter = NULL

Параметры:

  • NewName — новое имя объекта.
  • NewOuter — новый «хозяин» объекта. Если задан нуль, «хозяин» не изменяется.

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

Для выполнения операций с хэш-таблицей имён вызываются функции UnhashObject и HashObject.

Register Править

protected void  Register(
                    const TCHAR *PackageName,
                    const TCHAR *Name)

Ставит в очередь запрос на регистрацию данного объекта.

!TODO!

RegisterDependencies Править

protected virtual void  RegisterDependencies()

Этот метод заставляет сначала зарегистрироваться базовые классы для данного класса. Применительно к классу UObjectBase он ничего не делает.

SetClass Править

private void  SetClass(
                  UClass *NewClass)

Параметры:

  • NewClass — новый класс объекта.

Этот метод меняет класс, к которому относится объект, а также вносит необходимые изменения в хэш-таблицу имён. Сбор статистики для объекта начинается заново.

Для выполнения операций с хэш-таблицей имён вызываются функции UnhashObject и HashObject.

SetFlagsTo Править

protected void  SetFlagsTo(
                    EObjectFlags  NewFlags)

Присваивает полю ObjectFlags заданное новое значение.

ThisThreadAtomicallyClearedRFUnreachable Править

public bool  ThisThreadAtomicallyClearedRFUnreachable()

Атомарно сбрасывает флаг RF_Unreachable в поле ObjectFlags. Возвращает true, если именно этот вызов привёл к сбросу данного флага, и false, если флаг был сброшен ещё до вызова этого метода или же после его вызова, но другим потоком.

Поля Править

Class Править

private UClass *Class

Класс, к которому принадлежит данный объект.

InternalIndex Править

private int32  InternalIndex

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

Name Править

private FName  Name

Имя данного объекта, под которым он добавляется в хэш-таблицу имён.

ObjectFlags Править

private EObjectFlags  ObjectFlags

Различные флаги, отражающие состояние объекта.

Outer Править

private UObject *Outer

Объект, в котором находится данный объект.

StatID Править

private mutable TStatId  StatID