美文网首页
16 UE5 UObject简单介绍和定义

16 UE5 UObject简单介绍和定义

作者: 游戏开发程序员 | 来源:发表于2024-03-14 11:28 被阅读0次

UObject 核心功能

  • 反射:动态根据类型创建对象,遍历属性成员,根据名字调用函数等.
  • 网络复制功能
  • 运行时类型识别 RTTI(Run-Time Type Identification)
  • EDIT交互功能:编辑器交互.
  • GC 垃圾回收:内存管理和释放.
  • 序列化:存档和读档,存入package里.

UObject的简单实现和调用

  • 通过编辑器上创建一个继承UObject的类
  • 定义几个成员变量和函数 用于学习反射等功能
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "TestObject.generated.h"

/**
 * 测试使用的UObject对象
 */
UCLASS()
class UTestObject : public UObject
{
    GENERATED_BODY()

public:
    UPROPERTY(BlueprintReadWrite, Category = "Property")
    FString CurPlayerName;

    UPROPERTY(BlueprintReadWrite, Category = "Property")
    int32 CurPlayerAge;

    UFUNCTION(BlueprintCallable, Category = "Property")
    FString GetOutInfo(FString CallerName);

    // C++定义 蓝图可调用 UHT声明exec前缀函数  DECLARE_FUNCTION(execIsBoy);
    UFUNCTION(BlueprintCallable, Category = "Function")
    bool IsBoy();
    
    // C++定义 蓝图可调用/重写 UHT声明exec前缀函数 DECLARE_FUNCTION(execIsGirl); 
    UFUNCTION(BlueprintNativeEvent, Category = "Function")
    // c++函数定义为: bool UMyObject::IsGirl_Implementation()
    bool IsGirl();

    // C++声明和调用 蓝图去实现
    UFUNCTION(BlueprintImplementableEvent)
    bool IsBaBy();
};
#include "Character/TestObject.h"
#include "TestObject.h"

FString UTestObject::GetOutInfo(FString CallerName)
{
    return CallerName + TEXT(" call GetOutInfo!");
}

bool UTestObject::IsBoy()
{
    return false;
}

bool UTestObject::IsGirl_Implementation()
{
    return false;
}

简单的创建,销毁和存档。

    // UObject
    if(1)
    {
        UTestObject* pObj = NewObject<UTestObject>();
        pObj->CurPlayerName = TEXT("Mike");
        pObj->CurPlayerAge = 38;

        // UObject存档功能 
        FString AssetPath = TEXT("/Game/Link");
        // 全路径,MyGame/Content/MyObject.uasset
        FString PackageFileName = FPackageName::LongPackageNameToFilename(
         AssetPath, FPackageName::GetAssetPackageExtension());

        FString ObjectName = TEXT("Mike");

        // 不存在,直接保存
        if (!FPaths::FileExists(PackageFileName))
        {
            bool bSaved = SaveData(AssetPath, PackageFileName, ObjectName);
            UE_LOG(TestLog, Display, TEXT("Save Package %s !"), bSaved?TEXT("Success"):TEXT("Failed"));
        }
        else // 存在,加载
        {
            UPackage* pPkg = LoadPackage(nullptr, *AssetPath, LOAD_None);
            if(pPkg)
            {
                pPkg->FullyLoad();
                auto info = pPkg->GetDetailedInfo();
            }
        }

        // 异步执行且对象在当前帧内持续有效 等GC触发后失效
        pObj->ConditionalBeginDestroy(); 
        auto age = pObj->CurPlayerAge; // 依然有效
    }

相关文章

  • UE4对象系统_UObject&UClass

    UObject UObject为对象系统的基类。类层次为: UObjectBase和UObjectBaseUtil...

  • UObject

    CreateDefaultSubobject:创建一个子类实例,主要用于创建组件实例,而且只能在构造函数里调用。 ...

  • UE4之UObject介绍

    UObject UObject,它是所有引擎层面、游戏层面对象的基类。 UObjects 提供的功能 垃圾回收 引...

  • Android 03 style简单介绍

    style简单介绍目录介绍1.简单介绍2.样式的定义3.主题4.其他 1.简单介绍整合所有资源,定义成统一的样式。...

  • 2018-06-28 MockServer 增加开发效率

    MockServer 简单介绍:这个MockServer 提供了一些API,根据定义的Request定义和指定Re...

  • 程序打包

    关于UE5打包问题[https://www.bilibili.com/read/cv11679358] UE5 P...

  • Swift 十二讲 第六章 类 (Class) (draft)

    1.类的简单介绍 Swift的类的定义简单便捷,但足够丰富。 简单的说,类就是一个封装变量和函数的容器的定义。变量...

  • OC 链式编程 简单介绍

    1、设置属性和输出属性 定义相关宏 定义几个简单的方法,其中包括有返回值和没有返回值 以上就是简单的使用介绍 i...

  • UObject的创建与销毁

    1、使用NewObject进行创建 2、使用ConditionalBeginDestroy()销毁UObject

  • 并发相关的现象和异常(Phenomena AND Anomali

    本节简单介绍了与并发相关的现象(Phenomenon)和异常(Anomalies)。 ANSI SQL标准定义的现...

网友评论

      本文标题:16 UE5 UObject简单介绍和定义

      本文链接:https://www.haomeiwen.com/subject/oqwjzdtx.html