UE4 架构初识(一)

news2024/11/25 14:42:30

UE引擎学习

一、基础框架

  1. UObject:

    ​ UE创世,万物皆UObject,接着有Actor。UObject提供的元数据、反射生成、GC垃圾回收、序列化、编辑器可见,Class Default Object等,UE可以构建一个Object运行的世界。
    在这里插入图片描述

  2. Actor:

    脱胎自Object的Actor也多了一些本事:Replication(网络复制),Spawn(生生死死),Tick(有了心跳)。
    Actor无疑是UE中最重要的角色之一,组织庞大,最常见的有StaticMeshActor, CameraActor和 PlayerStartActor等。Actor之间还可以互相“嵌套”,拥有相对的“父子”关系。
    请添加图片描述

  3. Component

    ActorComponent下面最重要的一个Component就非SceneComponent莫属了。SceneComponent提供了两大能力:一是Transform,二是SceneComponent的互相嵌套。

请添加图片描述

  1. Level

    Cocos2dx会认为游戏世界是由Scene组成的,Scene再由一个个Layer层叠表现,然后再有一个Director来导演整个游戏。Unity觉得世界也是由Scene组成的,然后一个Application来扮演上帝来LoadLevel,后来换成了SceneManager。 而UE中把这种拆分叫做关卡(Level),由一个或多个Level组成一个World。UE便给每一个Level也都默认配了一个书记官(Info),他一一记录着本Level的各种规则属性,在UE需要的时候便负责相告。Level直接相关的一位书记官:AWorldSettings。虽然名字叫做WorldSettings,但其实只是跟Level相关。

请添加图片描述

  1. World

    UE里每个World支持一个PersistentLevel和多个其他Leve。Persistent的意思是一开始就加载进World,Streaming是后续动态加载的意思。Levels里保存有所有的当前已经加载的Level,StreamingLevels保存整个World的Levels配置列表。PersistentLevel和CurrentLevel只是个快速引用。在编辑器里编辑的时候,CurrentLevel可以指向其他Level,但运行时CurrentLevel只能是指向PersistentLevel。
    请添加图片描述

  2. WorldContext

​ 首先World就不是只有一种类型,比如编辑器本身就也是一个World,里面显示的游戏场景也是一个World,这两个World互相协作构成了我们的编辑体验。然后点播放的时候,引擎又可以生成新的类型World来让我们测试。而UE用来管理和跟踪这些World的工具就是WorldContext:
请添加图片描述
7. #### GameInstance

GameInstance里会保存着当前的WorldConext和其他整个游戏的信息。
请添加图片描述

  1. Engine

UEngine分化出了两个子类:UGameEngine和UEditorEngine。众所周知,UE的编辑器也是UE用自己的引擎渲染出来的,采用的也是Slate那套UI框架。好处有很多,比如跨平台比较统一,UI框架可以复用一套控件库,Dogfood等等,所以本质上来说,UE的编辑器其实也是个游戏!UE会在不同模式下根据编译环境而采用不同的具体Engine类,而在基类UEngine里通过一个WorldList保存了所有的World。

  • Standalone Game:会使用UGameEngine来创建出唯一的一个GameWorld,因为也只有一个,所以为了方便起见,就直接保存了GameInstance指针。
  • 而对于编辑器来说,EditorWorld其实只是用来预览,所以并不拥有OwningGameInstance,而PlayWorld里的OwningGameInstance才是间接保存了GameInstance.

GEngine可以说是一切开始的地方了。翻看引擎源码,到处也可以看见从GEngine->出来的引用。
请添加图片描述

  1. GamePlayStatics

UE为了我们的使用方便,也在Engine层次为我们提供了便利操作蓝图函数库。
请添加图片描述

  1. 总结

GEngine仿佛就是一棵大树的根,当我们拎起它的时候,也会带出整个游戏世界的各个对象。但目前这些对象:Object->Actor+Component->Level->World->WorldContext->GameInstance->Engine,确实已经足够表达UE游戏世界的各个部分。

参考链接:https://www.zhihu.com/people/fjz13/posts?page=2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/459977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

问题解决 | Failed to initialize NVML: Driver/library version mismatch

问题描述: Ubuntu20.04服务器上,一个docker容器正在训练模型,打开另外一个docker容器时,出现以下错误 Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to st…

数字设计小思 - 谈谈Latch:组合与时序逻辑的桥梁

前言 本系列整理数字系统设计的相关知识体系架构,为了方便后续自己查阅与求职准备。对于FPGA和ASIC设计中,避免使用Latch(锁存器)一直是个绕不开的话题,本文结合网上的文章,并根据示例介绍如何在实际设计中…

学习如何通过构建一个简单的JavaScript颜色游戏来操作DOM

学习如何通过构建一个简单的JavaScript颜色游戏来操作DOM 题目要求 我们将构建一个简单的颜色猜谜游戏。每次游戏启动时,都会选择一个随机的RGB颜色代码。根据游戏模式,我们将在屏幕上提供三个(简单)或六个(困难&…

基于 SpringBoot + Vue 的智能停车场项目。

一、开源项目简介 基于 SpringBoot Vue 的智能停车场项目。 智能停车场管理平台!科学计费 多种计费方案灵活切换,商场、小区、停车场等场景均适用!无人值守 云端控制实现无岗亭模式下的车辆自主进出,降低人工成本! …

Nacos,OpenFeign,Ribbon,loadBalance如何相互协调工作

1、SpringCloud规范 对于Nacos而言其作用在于服务注册发现和配置中心,对于Ribbon而言作用在于实现实例负载均衡,对于OpenFeign而言要通过rpc实现远程调用 2、Nacos实现服务注册发现 SpringCloud提供了ServiceRegistration接口,实现服务注册…

软件保护器:Themida 3.1.14 Crack

先进的Windows软件保护系统 版本:3.1 版本:3.1.4.0 日期:2022 年 11 月 10 日 概述 在创建应用程序时,Compiler 会将应用程序源代码编译成多个由机器语言代码构成的目标文件。然后将目标文件链接在一起以创建最终的可执行文件。 与…

【chapter29】【PyTorch】[交叉验证】

前言 前面讲了 Underfit , Overfit ,这里重点讲解一下如何检测 一 数据集划分 训练的时候,我们一般把数据集分成 训练集 和 验证集 每训练一轮或者几轮.validation 一次,看一下当前 验证集上的loss&acc 是否 提升.如果已经是最佳值,则提前结束训练,防止过拟合…

如何做好联络口译的译前准备工作?

我们知道,译前准备与口译质量有着紧密的联系。在联络口译中,对口译员的双语能力和知识储备有着十分高的要求,为了能够顺利完成口译任务,就必须进行译前准备。那么,如何做好译前准备工作?联络口译的译前准备…

强烈推荐这 6 款 API 测试工具,绝对有一款没听过

Postman: Postman 是一个流行的 API 开发和测试工具,提供了丰富的功能,包括请求构建、测试自动化、数据驱动等。用户可以通过 Postman 的界面轻松创建和测试 RESTful API。 Insomnia: Insomnia 是一款功能强大的开源 API 测试工具,支持多种协…

Windows 远程桌面提示没有远程桌面授权服务器可以提供许可证

可参考之前发布的一篇文章,帮助你远程登录:远程连接提示 由于没有远程桌面授权服务器提供许可证_计算机没有远程桌面客户端访问许可证_csdn_aspnet的博客-CSDN博客 虽然上述文章命令可以远程进入系统,但是每次都需要使用上述文章中的命令进入…

MySQL高级篇——索引的创建与设计原则

导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题 目录 一、索引的分类与使用 1.1 索引的分类 1.1.1. 普通索引 1.1.2. 唯一性索引 1.1.3. 主键索引(唯一非空) 1.1.4…

Jetson Orin MultiMedia 使用总结

1.Jetson Orin /Xavier 对于图片的输入以及输出处理有一套特定的API。代码存放在/usr/src/jetson_multimedia_api中。 2.其中最主要的几个头文件:缓存管理申请 nvbufsurface.h 缓存转换 nvbufsurftransform.h 显示 nvosd.h 以及显示模块。 3.YUV转RGB来分析一下各…

开发人员应考虑使用 Edge浏览器的 8 个理由

1.无限访问ChatGPT 这是正确的。您可以通过 Bing 访问 GPT-4。但与 2021 年后没有数据的 ChatGPT 不同,必应通过从自己的搜索引擎中提取最新数据来对其进行补偿。 首先,点击Edge 浏览器左上角的Bing 小图标 Bing 具有三个选项卡:Chat、Compo…

VMware虚拟机安装黑苹果10.15 || AMD R7 5800处理器

VMwar版本:16Pro 链接:https://pan.baidu.com/s/1qGHEynWSV4YS9WSNonxiuA?pwdazvh 提取码:azvh macOS链接,版本为Catalina 10.5。这个版本后,os安装包就过10G了,会特别卡。 链接:https://pan…

YOLOv1代码复现1:辅助功能实现

YOLOv1代码复现1:辅助功能实现 前言 ​ 在经历了Faster-RCNN代码解读的摧残后,下决心要搞点简单的,于是便有了本系列的博客。如果你苦于没有博客详细告诉你如何自己去实现YOLOv1,那么可以看看本系列的博客,也许可以帮助…

操作指南|如何创建x-chain DAO

DAO是一个去中心化组织,大体与任何其他组织一样,但它是由智能合约中编码的规则所管理,并使DApps等能够完全去中心化且自主运行。 📄 查看MoonbeamDocs 这与通常的分步教程不同,该推文旨在分享关于运行去中心化自治组…

delta.io 2.3.0 overwrite模式 overwriteSchema df覆盖table的表schema

初始化一张表 overwriteSchema 默认为false 图中注意事项: Note that the schema cant be overwritten when using replaceWhere. overwriteSchema 配置为true 可成功覆盖插入 overwriteSchema=true的配置项必须配置.mode("overwrite") 而不能是.mode("append…

( 栈和队列) 225. 用队列实现栈 ——【Leetcode每日一题】

❓225. 用队列实现栈 难度:简单 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入…

国云筑基“翼”气风发,天翼云以科技创新绘就数字中国蓝图

科技云报道原创。 全球新一轮技术革命方兴未艾,特别是以数字技术为核心的信息技术革命,正在实现群体突破和加快广泛深度应用。 从2017年的“促进数字经济加快成长”,到2019年的“壮大数字经济”,到2020年的“全面推进‘互联网&am…

从0搭建Vue3组件库(八):使用 release-it 实现自动管理发布组件库

使用 release-it 实现自动管理发布组件库 上一篇文章已经打包好我们的组件库了,而本篇文章将介绍如何发布一个组件库。当然本篇文章介绍的肯定不单单只是发布那么简单。 组件库发布 我们要发布的包名为打包后的 easyest,因此在 easyest 下执行pnpm init生成package.json {&…