查看: 300|回复: 10

[编程指南] 【对象 | Unreal Engine】

[复制链接]

1

主题

273

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
73034
发表于 2016-6-26 02:01:45 | 显示全部楼层 |阅读模式


本页面的内容:

      
UCLASS 宏

属性和函数类型

对象创建

UObjects 提供的功能

虚幻标头工具

头文件格式

更新对象

销毁对象
     
虚幻引擎拥有处理游戏对象的强大系统。虚幻引擎中的对象基础类为 UObject</code>。UCLASS 宏可用于标记从 UObject</code> 派生的类,使 UObject 处理系统识别到它们。
UCLASS 宏
UCLASS 宏为 UObject 提供一个对 UCLASS 的引用,描述其基于虚幻引擎的类型。每个 UCLASS 保留一个称作“类默认对象(Class Default Object)”的对象,简称 CDO。CDO 本质上是一个默认“模板”对象,由类构建函数生成,之后并未进行修改。UCLASS 和 CDO 均可为特定对象实例恢复,但它们通常为只读。使用 GetClass() 函数即可随时访问对象实例的 UCLASS。

UCLASS 包含定义类的一套属性和函数。这些是本地代码可用的普通 C++ 函数和变量,但被虚幻引擎特有的元数据所标记,它们在对象系统中的行为也因此受到控制。如需了解标记语法的更多细节,请查阅 编程参考。

需要注意 UObject 类还可包括仅限本地的属性,这些属性不存在于相应的 UCLASS 中。
属性和函数类型
UObjects 可拥有成员变量(称作属性)或任意类型的函数。然而,为方便虚幻引擎识别并操控这些变量或函数,它们必须以特殊的宏进行标记,并符合一定类型的标准。如需了解这些标准的细节,请查阅 属性 和 函数 参考页面。
对象创建
有多个函数可用于新建 UObject</code> 实例以及标准 new</code> 运算符;每个皆有其自身的使用案例:


方法
描述

NewObjectclass()</code>创建一个自动生成命名的新实例。在简单情况下使用最佳。NewNamedObjectclass()</code>使用特定命名以及其他几项任选参数创建一个新实例。将判断新实例的 Outer 中是否存在命名冲突。ConstructObjectclass()</code>创建一个提供所有可用创建选项的新实例。仅限需要灵活性时使用。new</code>用于在特定低层情况下构建对象,如构建函数需要参数时。
在 UObject实例创建 中可查阅游戏性 UObject</code> 类实例诸多创建方法的详细信息。
UObjects 提供的功能
此系统的使用不为强制要求,甚至有时不适合使用,但却存在以下益处:

垃圾回收

引用更新

映象

序列化

默认属性变化自动更新

自动属性初始化

自动编辑器整合

运行时类型信息可用

网络复制

如需了解每个系统的更多细节内容,请查阅 虚幻对象操作 文档。
虚幻标头工具
为利用 UObject 派生类型所提供的功能,需要在头文件上为这些类型执行一个预处理步骤,以核对需要的信息。该预处理步骤由 UnrealHeaderTool(简称 UHT)执行。

UObject 派生的类型需要遵守特定的结构,我们也将在此谈到这点。
头文件格式
UObject 在源(.cpp)文件中的实现与其他 C++ 类相似,其在头(.h)文件中的定义必须遵守特定的基础结构,以便在虚幻引擎 4 中正常使用。使用编辑器的“New C++ Class”命令是设置格式正确头文件的最简单方法。UObject 派生类的基础头文件可能看起来与此相似,假定 UObject 派生物被称为 UMyObject,其创建时所在的项目被称为 MyProject:
#pragma once#include 'Object.h'#include 'MyObject.generated.h'/** *  */UCLASS()class MYPROJECT_API UMyObject : public UObject{    GENERATED_BODY()};
虚幻引擎特定的部分如下:
#include "MyObject.generated.h"
此行预计为此文件中最后一个 #include 指令。如此头文件需要了解其他类,可将它们在文件中的任意位置提前声明,或包括在 MyObject.generated.h 上。
UCLASS()
UCLASS 宏使虚幻引擎 4 能识别 UMyObject。此宏支持大量参数,参数决定类功能的开或关。(UCLASS 参数页面的链接)
class MYPROJECT_API UMyObject : public UObject
如 MyProject 希望将 UMyObject 类公开到其他模块,则需要指定 MYPROJECT_API。这对游戏项目将包括的模块或插件十分实用。这些模块和插件将故意使类公开,在多个项目间提供可携的自含式功能。
GENERATED_BODY()
GENERATED_BODY 宏不获取参数,但会对类进行设置,以支持引擎要求的基础结构。所有 UCLASS 均有此要求。注意:在引擎的当前版本中,GENERATED_BODY 宏将成员访问等级设为“public”,而非设置“private”的缺省语言。
更新对象
Ticking 代表虚幻引擎中对象的更新方式。所有对象均可在每帧被 tick,方便您执行必要的更新计算或操作。

对象不具有嵌入的更新能力;然而必要时使用 inherits</code> 类说明符从 FTickableGameObject</code> 继承即可添加此能力。 之后即可实现 Tick()</code> 函数,引擎每帧都将调用此函数。注意:多数游戏内对象均为 Actor,可按用户设置的最低间隔进行 tick(而不按照每帧一次的频率进行)。
销毁对象
对象不被引擎引用后,垃圾回收系统将自动进行对象销毁。这意味着 UPROPERTY 指针、引擎容器或智能指针类实例(如 TArrayUObject*</code> 或 TWeakPtrUObject*</code>)不会指向它。垃圾回收器运行时,寻找到的未引用对象将被删除。此外,函数 MarkPendingKill()</code> 可在对象上直接调用,此函数将把指向对象的所有指针设为 NULL,并从全局搜索中移除对象。对象将在下一次垃圾回收过程中被完全删除。
回复

使用道具 举报

0

主题

824

帖子

2721

积分

vip会员

Rank: 1

积分
2721
发表于 2016-7-2 19:23:17 来自手机 | 显示全部楼层
看看价格支持下
回复 支持 反对

使用道具 举报

0

主题

855

帖子

2811

积分

vip会员

Rank: 1

积分
2811
发表于 2016-7-3 22:55:45 | 显示全部楼层
学习了,感谢分享
回复 支持 反对

使用道具 举报

0

主题

99

帖子

2048

积分

禁止发言

积分
2048
发表于 2016-7-4 03:30:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

828

帖子

2712

积分

vip会员

Rank: 1

积分
2712
发表于 2016-7-4 13:45:05 | 显示全部楼层
O(∩_∩)O哈哈~,谢谢分享哟
回复 支持 反对

使用道具 举报

0

主题

876

帖子

2834

积分

vip会员

Rank: 1

积分
2834
发表于 2016-7-4 13:45:08 | 显示全部楼层
这个样子会打消我们的积极性的
回复 支持 反对

使用道具 举报

0

主题

926

帖子

3111

积分

vip会员

Rank: 1

积分
3111
发表于 2016-7-10 01:13:20 来自手机 | 显示全部楼层
感谢楼主的大爱无私
回复 支持 反对

使用道具 举报

0

主题

866

帖子

2867

积分

vip会员

Rank: 1

积分
2867
发表于 2016-7-15 03:31:32 来自手机 | 显示全部楼层
看看是什么东西
回复 支持 反对

使用道具 举报

0

主题

867

帖子

2873

积分

vip会员

Rank: 1

积分
2873
发表于 2016-7-20 11:38:10 来自手机 | 显示全部楼层
谢谢版主分享,现在又看到它了,我就不能放弃,
回复 支持 反对

使用道具 举报

0

主题

888

帖子

2891

积分

vip会员

Rank: 1

积分
2891
发表于 2016-7-21 07:17:50 来自手机 | 显示全部楼层
下来看看,多谢楼主分享了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部