首页 > 编程语言 >UEC++ UClass类

UEC++ UClass类

时间:2024-11-01 14:47:47浏览次数:5  
标签:修饰符 对象 蓝图 UClass C++ 指定 UE

一、UClass的定义与功能

UClass是虚幻引擎中实现反射机制的关键部分,它允许引擎在运行时动态地查询和操作类的信息。每个UClass都保留了一个称作“类默认对象(Class Default Object,简称CDO)”的模板对象,这个对象由类的构造函数生成,并且之后不会被修改。UClass和CDO都可以为特定对象实例恢复,但它们通常为只读。

二、UClass的使用

在UE中,使用UCLASS()宏来定义一个类,并为其生成UClass类型信息。这个宏通常放在类声明的开始处,并可以包含一些修饰符和元数据来定义类的特定行为。例如:


cpp复制代码

在这个例子中,MyClass是一个继承自UObject的类,UCLASS()宏为其生成了UClass类型信息,而GENERATED_BODY()宏则用于在类体中插入必要的辅助代码。

三、UClass的修饰符与元数据

UCLASS()宏可以接受一些修饰符和元数据来定义类的特定行为。这些修饰符和元数据可以控制类在编辑器中的显示方式、类的序列化行为、类的实例化方式等。例如:

  • abstract:将类声明为抽象基类,防止用户实例化这个类。
  • BlueprintType/NotBlueprintType:将类公开为可用于蓝图中的变量的类型或防止其用于蓝图中的变量。
  • Blueprintable/NotBlueprintable:指定该类是否可以作为创建蓝图的可接受基类。
  • ClassGroup:在Actor浏览器中启用Group View后,将类及其任何子类包含在指定的组中。
  • HideCategories/ShowCategories:隐藏或显示类在虚幻编辑器属性窗口中的特定类别。

此外,还可以使用元数据(meta)来定义更复杂的类行为。元数据以键值对的形式指定,例如:

UCLASS()  
class MyClass : public UObject  
{  
    GENERATED_BODY()  
    // 类的成员变量和函数  
};

这将为类指定一个在编辑器中显示的友好名称。

四、UClass与蓝图系统的交互

在UE的蓝图系统中,UClass扮演着重要角色。蓝图系统允许设计师通过可视化界面创建和编辑游戏逻辑,而不需要编写代码。UClass为蓝图系统提供了类的类型信息,使得蓝图可以识别和操作不同类型的对象。例如,在蓝图中创建一个新的对象时,需要指定该对象的类类型(即UClass),以便蓝图系统知道如何创建和初始化该对象。

UClass*将返回指向指定类的类引用类型,而UObject*是指向指定类的对象引用类型

五、UClass的反射机制

UE的反射机制允许在运行时动态地查询和操作类的信息。这是通过UClass实现的。通过UClass,可以获取类的名称、属性、方法等信息,并可以动态地创建类的实例、调用类的方法等。这种反射机制为UE提供了极大的灵活性和可扩展性,使得开发者可以在不修改源代码的情况下添加新的游戏逻辑和功能。

标签:修饰符,对象,蓝图,UClass,C++,指定,UE
From: https://blog.csdn.net/2301_79650429/article/details/143418217

相关文章

  • 题解 洛谷 Luogu P1308 [NOIP2011 普及组] 统计单词数 C++
    题目传送门:P1308[NOIP2011普及组]统计单词数-洛谷|计算机科学教育新生态https://www.luogu.com.cn/problem/P1308getline() 会清除使当次getline() 终止的换行,而cin 不会因此cin 以换行终止,之后还需要getline()的话,需要用getchar() 吞换行Linux的一些相......
  • Asp.net 使用FluentScheduler
     1.安装包:Install-PackageFluentScheduler2.  Global.asax添加JobManager.Initialize(newMyRegister());3.添加类 publicclassMyRegister:Registry{publicMyRegister(){//ScheduleanIJobtorunataninte......
  • 为什么 C++ 编译速度比 Java 慢得多
    ###为什么C++编译速度比Java慢得多在探讨为什么C++编译速度比Java慢得多时,我们可以归纳出几个核心原因:C++的编译模型更为复杂、模板元编程、宏处理以及链接时间。其中,C++的编译模型更为复杂这一点尤为突出。C++需要处理的细节更多,如模板实例化、头文件的重复包含等,这些......
  • Vue基础知识——async指令、scope和样式穿透
    .sync在 Vue.js中,.sync 修饰符是一种语法糖,用于简化父子组件之间的双向数据绑定。它主要用在子组件向父组件发送更新某个prop的事件时。在Vue2.3.0+版本中,.sync 修饰符被重新引入(之前在Vue1.x中存在,但在Vue2.0中被移除了),用于替代之前需要手动监听事件并更新父......
  • 【C++】string 类模拟实现:深入探索字符串操作原理
     快来参与讨论......
  • Vue3 – Composition API
    OptionsAPI的弊端认识CompositionAPIsetup函数的参数setup函数的返回值ReactiveAPI定义响应式复杂数据RefAPI定义响应式数据Ref自动解包setup函数定义数据ref和reactive的使用场景认识readonlyreadonly的使用Reactive判断的APItoRefs结构内容变......
  • Vue Composition API 与 Options API:优劣分析与最佳实践
    前言在Vue3诞生之前,Vue的核心理念一直围绕着OptionsAPI。OptionsAPI是一种通过选项对象来定义组件的方式,比如data、methods、computed等等。它简单直观,非常适合初学者。然而,随着应用复杂度的增加,OptionsAPI有时会显得力不从心,代码的可维护性也会下降。于是,Vue......
  • 【Python】网络请求与数据获取:Requests库的使用与技巧
    网络请求与数据获取:Requests库的使用与技巧在现代Web开发与数据科学工作中,从API、网页或服务端获取数据是非常常见的任务,而Python的Requests库为此提供了便捷且功能强大的工具。本文将从基本的HTTP请求操作出发,结合常见的数据获取需求,深入讲解Requests的使用......
  • C++11的一些语法
    vector的用法在C++中,std::vector是一个动态数组,它可以在运行时调整大小,std::vector是C++标准模板库(STL)中的一个重要容器类。基本用法在使用std::vector之前,需要包含头文件<vector>。#include<iostream>#include<vector>当然,现在包含万能头<bits/stdc++.h>......
  • npm包 - 发布vue3组件
    npm包-发布vue3组件 1.创建VUE3项目npmcreatevue 2.在项目中创建packages文件夹,创建index.js,创建 components文件夹,创建 PanelCard1.vue 编辑PanelCard1.vue<template><divstyle="width:200px;height:200px;background:grey"><button......