虚幻4C++编程入门深入了解

2023-05-16

这部分我们将讨论基础构建块以及它们之间相互关联的方式。在此我们将了解虚幻引擎如何使用
继承和合成构建自定义游戏性功能。

游戏性类:对象、Actor 和组件

多数游戏性类派生自 4 个主要类型。它们是

UObject、AActor、UActorComponent 和 UStruct

以下部分会对这些构建块进行一一说明。当然,您还可以创建并非派生自这些类的类型,但其无法采用引擎中内置的功能。UObject 层级树之外创建的类的典型用法有:整合第三方库、封装操作系统特定功能等。

虚幻对象(UObject)

虚幻引擎中的基础构建块被称作 UObject。此类结合 UClass 提供引擎中最重要的若干基础服务:

**属性和方法反射
属性序列化
垃圾回收
按命名查找 UObject
可配置属性数值
属性和方法网络支持**

派生自 UObject 的每个类拥有一个为其创建的单例 UClass,此对象包含关于类实例的所有元数据。UObject 和 UClass 是游戏性对象在其生命期中执行所有操作的根源。区分 UClass 和 UObject 的最佳方式:UClass 描述 UObject 实例的组成、可用于序列化的属性、网络等。多数的游戏性开发不会直接从 UObject 进行派生,而从 AActor 和 UActorComponent 进行派生。编写游戏性代码无需了解 UClass/UObject 的工作细节。但了解这些系统的存在也会有所帮助。

AActor

AActor 是作为游戏体验一部分的对象。AActor 将被设计师放置在关卡中,或通过游戏性系统在运行时创建。所有可放入关卡的对象均延展自此类。范例有 AStaticMeshActor、ACameraActor 和 APointLight actor。AActor 派生自 UObject,因此可使用上一部分列出的所有标准功能。可通过游戏性代码(C++ 或蓝图)显式销毁 AActor。拥有关卡从内存被卸载后,通过标准垃圾回收机制进行销毁。AActor 负责游戏对象的高级行为。AActor 还是可进行网络复制的基类。在网络复制中,AActor 还可分布 UActorComponent 的信息。UActorComponent 为需要网络支持的 AActor 所拥有。

AActor 拥有其自身的行为(通过继承的特殊化),但它们仍作为 UActorComponent 层级的容器(通过合成的特殊化)。这通过 AActor 的 RootComponent 成员完成。此成员包含一个单一 UActorComponent,而这个组件又可依次包含其他组件。在 AActor 可被放入关卡之前,它必须包含至少一个 USceneComponent。此组件包含此 AActor 的平移、旋转和尺寸。

AActor 拥有一系列事件,可在生命周期中进行调用。以下列表是说明生命周期的简化事件集。

**BeginPlay - 对象首次出现在游戏进程中时调用
Tick - 每帧调用一次,在一段时间内执行操作
EndPlay - 对象离开游戏进程时调用**

在 Actor 中查看关于 AActor 的详细讨论。

运行时生命周期

之前我们讨论了 AActor 生命周期的一个子集。对于放置在关卡中的 actor 而言,通过想象便可轻松理解生命周期:actor 加载,出现,随后关卡被卸载,actor 被销毁。运行时创建和销毁的过程是怎样的?虚幻引擎在运行时生成调用 AActor 的创建。较之于在游戏中创建一个普通对象,actor 的生成稍显复杂。原因是 AActor 需要通过各种运行时系统进行注册,以满足所有需要。需要设置 actor 的初始位置和旋转。物理可能需要知晓这些信息。负责告知 actor 进行 tick 的管理器需要知晓这些信息。诸如此类。因此,我们拥有一个用于 actor 生成的方法 - UWorld::SpawnActor()。一旦 actor 成功生成后,它的 BeginPlay() 方法将被调用,下一帧将出现 Tick()

一旦 actor 的生命期完结,即可调用 Destroy() 将其销毁。在此过程中将调用 EndPlay(),在此可设置自定义销毁逻辑。控制 actor 存在时长的另一个选项是使用寿命成员。可在对象的构建函数中设置时间段,或通过运行时的其他代码进行设置。时间量耗尽后,actor 将自动调用 Destroy()。

如需了解 actor 生成的更多内容:
https://docs.unrealengine.com/latest/CHN/Programming/UnrealArchitecture/Actors/Spawning/index.html

UActorComponent

UActorComponent 拥有其自身行为,通常负责在多种类型 AActor 之间共享的功能,如提供可视网格体、粒子效果、摄像机透视和物理互动。通常为 AActor 指定的是与其在游戏中全局作用相关的高级目标,而 UActorComponent 通常执行的是支持这些高级目标的单个任务。组件也可附着到其他组件,或为 Actor 的根组件。组件只能附着到一个父组件或 Actor,但可被多个子组件附着。想象一个组件树。子组件拥有与其父组件或 Actor 相对的位置、旋转和尺寸。

使用 Actor 和组件的方法有多种,而理解 Actor - 组件关系的方式是 Actor 会提出问题“这是什么?”,而组件会回答“这由什么组成?”

**RootComponent - 这是在 AActor 组件树中拥有顶层组件的 AActor 成员
Ticking - 组件作为拥有 AActor Tick() 的部分被点击**

剖析第一人称角色

之前的几个部分叙述较多,展示较少。为展示 AActor 和其 UActorComponent 之间的关系,我们一来研究基于第一人称模板创建新项目时创建的蓝图。下图是 FirstPersonCharacter Actor 的 组件 树。RootComponent 为 CapsuleComponent。附着到 CapsuleComponent 的是 ArrowComponent、Mesh 组件和 FirstPersonCameraComponent。叶最多的组件是以 FirstPersonCameraComponent 为父项的 Mesh1P 组件,意味着第一人称网格体与第一人称摄像机相对。

这里写图片描述

视觉外观而言,组件 树与下图相似,可看到除 Mesh 组件外的所有组件均在 3D 空间中。

这里写图片描述

UStruct

使用 UStruct 时不必从任意特定类进行延展,只需要使用 USTRUCT() 标记结构体,编译工具将执行基础工作。和 UObject 不同,UStruct 不会被垃圾回收。如创建其动态实例,则必须自行管理其生命周期。UStruct 为纯旧式数据类型。它们拥有 UObject 反射支持,以便在虚幻编辑器、蓝图操作、序列化和网络通信中进行编辑。

讨论完游戏性类构建中使用的基础层级后,即可再次选择路径。可在 此处 阅读关于游戏性类的内容、使用 launcher 中带有更多信息的样本、或进一步深入研究构建游戏的 C++ 功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

虚幻4C++编程入门深入了解 的相关文章

  • Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: No outputs for

    错误 xff1a Unable to determine application id com android tools idea run ApkProvisionException No outputs for the main art
  • 完善二叉树的右指针

    对于一个二叉树 xff0c 每个结点有三个指针 xff0c 除了左右子节点指针外还有一个指向右边的结点的指针 现在给定一个二叉树 xff0c 每个结点的右指针为空 xff0c 让你把每一层的结点都连起来 xff08 默认是完全二叉树 xff
  • 什么是AOSP?

    AOSP全名为Android Open Source Project xff0c 中文为安卓开源项目 xff0c 开源即开放源代码 Android是一个基于Linux xff0c 由Google主导的开源系统 严格意义上来说 xff0c A
  • 什么是APT攻击

    什么是APT攻击 APT攻击即高级可持续威胁攻击 也称为定向威胁攻击 xff0c 指某组织对特定对象展开的持续有效的攻击活动 APT是黑客以窃取核心资料为目的 xff0c 针对客户所发动的网络攻击和侵袭行为 xff0c 是一种蓄谋已久的 恶
  • CEO、COO、CFO、CTO、CMO是什么意思

    一 什么是CEO COO CFO CTO xff1f CEO总裁 CFO财务总监 CTO技术总监 COO运营总监 CEO Chief Executive officer 首席执行官 可以理解为是企业领导人和职业经理人两种身份的合一 xff0
  • POC测试是什么

    POC测试 xff0c 即Proof of Concept 可以理解为 xff1a 根据客户需求进行测试 是业界流行的针对客户具体应用的验证性测试 xff0c 根据用户对采用系统提出的性能要求和扩展需求的指标 xff0c 在选用服务器上进行
  • 开发环境、测试环境、生产环境

    生产环境 是可以对外开放 xff0c 已通过测试验证 xff0c 对外提供服务的环境 开发环境 程序员做开发的环境 xff0c 该环境已经部署好需要的开发工具和服务 测试环境 一般是从生产环境复制过来的环境 xff0c 用于要发布的服务 业
  • Yml的基本配置(服务器端口、日志、JPA、Druid、环境激活、thymeleaf、resource)

    springboot配置文件很强大 也丰富 xff0c 约定优于配置 xff0c 只需做少量的配置 xff0c 其它采用默认的就行 application properties xff08 传统 xff09 xff0c applicatio
  • 使用BitLocker实现磁盘加密、u盘加密、移动硬盘加密

    一 使用系统自带的工具BitLocker实现 Bitlocker是属于win7版本以后有的系统功能 Windows BitLocker驱动器加密通过加密Windows操作系统卷上存储的所有数据可以更好地保护计算机中的数据 BitLocker
  • k8s的dashboard无法正常访问

    本场景为使用google浏览器访问vmware搭建的虚拟机 建议使用google浏览器的无痕模式 网页提示信息Client sent an HTTP request to an HTTPS server 原因 xff1a 因为直接使用ip
  • k8s删除pod失败,一直处于deleted的界面

    我们在删除pod的时候出现以下情况 xff1a span class token comment 删除pod span span class token punctuation span root 64 master1 yaml span
  • journalctl命令

    journalctl简介 journalctl命令是Systemd的 个命令 xff0c 是用来管理查看日志信息的 因为日志的信息多 xff0c 复杂 xff0c journalctl命令用参数的方式来帮助用户更快地定位日志 注释 xff1
  • 如何在微信小程序里使用Lottie动画库

    先看效果图 xff1a 前言 xff1a 微信小程序的lottie动画库是按照lottie web动画库改造而来 参考lottie web xff1a https github com airbnb lottie web xff0c 以及官
  • mysql中grant all privileges on赋给用户远程权限

    mysql中grant all privileges on赋给用户远程权限 改表法 当你的帐号不允许从远程登陆 xff0c 只能在localhost连接时 这个时候只要在mysql服务器上 xff0c 更改 mysql 数据库里的 user
  • Shell之function函数的定义及调用

    文章目录 96 function 96 函数的定义及调用 96 function 96 函数的定义 96 function 96 函数的调用 位置传参 函数使用return返回值 位置传参 函数的调用 数组传参 function函数的定义及
  • springboot集成activeMQ实现Queue队列

    1 首先下载 activeMQ地址 xff1a https activemq apache org 下载完成以后 xff0c 进行启动 启动步骤很简单 xff0c 就tomcat差不多 这里要注意 xff0c 看你电脑是32位还是64位 x
  • Docker Desktop Vmmem内存占用过高问题解决方案

    Docker Desktop Vmmem内存占用过高问题解决方案 内存占用过高原因 主要原因是docker desktop的实现及基于wsl Windows子系统 相当于在Windows上同时开了一个虚拟机 如果不对wsl的资源进行限制 它
  • spring mvc 预习

    spring mvc 概述 Web 框架 xff0c 是目前最主流的 MVC 框架之一 Spring3 0 后全面超越 Struts2 xff0c 成为最优秀的 MVC 框架 Spring MVC 通过一套 MVC 注解 xff0c 让 P
  • windows server 2012 进程 出现大量桌面窗口管理器的 解决方法

    windows server 2012 进程 出现 桌面窗口管理器 打开运行 打Cmd xff0c 执行 taskkill f im winlogon exe t 记住 这个命令会让远程桌面黑屏 xff0c 不要着急 xff0c 远程按下C
  • 在线医疗系统(毕设)

    小白的成长之路从自己写毕设开始 从整个设计说明书中截取了一部分 相关技术 Springboot VUE MySQL数据库 Bootstrap AJAX 融云 shiro等总体设计 数据库相关表设计 数据库截图了一张图 详细设计与实现 系统整

随机推荐