【Unreal】官方文档随笔-笔记七(不定时更新)

该篇学习一些简单的额外知识可用作知识储备,会进行不定时更新

目录

Actor生命周期 

设置游戏模式

Game Mode 和 Game State

Game Mode

AGameModeBase

AGameMode

设置 Game Mode

Game State

GamePlay框架快速参考

用户界面(User Interfaces)和HUD

Slate UI框架

框架类关系

开发者文件夹与源码管理

开发者文件夹

源码管理

内容浏览器中的集合

高级搜索语法

自定义虚幻引擎

插件安装位置

使用项目和模版

创建自定义模版

Project Setting

关卡

管理多关卡

世界设置

世界分区设置和世界分区

虚拟现实

人工智能

资产和内容包

自动重新导入

替换引用工具

类查看器

全局资产选取器

属性矩阵

Actor和几何体

变换Actor

 Actor分组

Actor对齐

合并 Actor

Actor参考

Kill Z体积

施加伤害体积

文本渲染Actor

目标点Actor

3D文本Actor

贴花Actor

玩家出生点

体积Actor

物理组件

破碎

目前官方文档初步学习进度


Actor生命周期 

UE5 Actor生命周期_哔哩哔哩_bilibili

【Unreal】官方文档随笔-笔记七(不定时更新)_第1张图片

  • 将所有的Actor复制到一个新的场景中,后调用 PostDuplicate 代表复制完成。最后调用 InitializeActorsForPlay 来进行Actor的初始化操作(接口等)
  • 将磁盘中的资源读到内存中,完成后调用 PostLoad (该接口可重写)。最后调用InitializeActorsForPlay 来进行Actor的初始化操作
    • 在加载对象后立即执行所需的任何特定于对象的清理。这不会被新创建的对象调用,默认情况下总是在游戏线程上执行
  • 准备播放Actor——各个组件的初始化:预初始化-初始化-Post初始化
    • PreInitialize Components:预初始化。初始化一些准备工作,例如配表
    • InitializeComponents:初始化。例如 注册、序列化
    • PosInitializeComponents:Pos初始化。初始化结束
  • BeginPlay:调用所有的 BeginPlay——开始GamePlay的逻辑
  • SpawnActor:均使用World生成,当World销毁Actor也会销毁。当生成的Actor中有需要渲染的组件将可以被渲染出来
  • PostSpawnInitiate:初始化结束,可自定义
  • ExecuteConstruction:执行构造。例如组件的创建
  • PostActorConstruction:构造完成。可自定义
  • 进行初始化:预初始化-初始化-Post初始化

左边是Class直接进行反序列化即可。Class中记录角色具体信息,Spawn是划一片内存将Class的信息塞到Spawn(对象)中

  • 执行BeginPlay→执行Tick
  • Actor的删除模式最终汇总到EndPlay
    • 将所有删除的角色标记为 RF_PendingKill
    • 如果希望删除也可直接将Actor标记为RF_PendingKill,GC在下一次释放
  • 保证没有关联后进行移除(World)
  • 最后进行删除工作调用 BeginDestroy
    • BeginDestroy
    • IsReadyForFinishDestroy
    • FinishDestroy:可重写

附上生命周期官方文档 Actor生命周期

设置游戏模式

定义游戏的一组规则。这些规则包括游戏启动时玩家将生成的默认Pawn。你需要设置这些规则才能生成你已创建的玩家角色。

Game Mode 和 Game State

游戏中的基础规则构成了 GameMode。在最基础的层面上,规则包括

  • 出现的玩家和观众数量,以及允许的玩家和观众最大数量
  • 玩家进入游戏的方式,可包含选择生成地点和其他生成/重生行为的规则
  • 游戏是否可以暂停,以及如何处理游戏暂停
  • 关卡之间的过渡,包括游戏是否以动画模式开场

当游戏中发生与规则相关的事件并需要与所有玩家进行追踪和分享时,这些信息便会通过Game State 进行存储和同步。这些信息包括

  • 游戏已运行的时间(包括本地玩家加入前的运行时间)
  • 每个个体玩家加入游戏的时间和玩家的当前状态
  • 当前 Game Mode 的基类
  • 游戏是否已开始

Game Mode

虽然某些基本原则(如进行游戏所需要的玩家数量,或玩家加入游戏的方法)在许多类型的游戏中都很常见,但根据你所开发的特定游戏,可能存在无限个变化。不管这些规则是什么,Game Modes 都是用来定义和执行这些规则的。目前有两个常用的游戏模式基类。

AGameModeBase

所有 Game Mode 均为 AGameModeBase 的子类。而 AGameModeBase 包含大量可覆盖的基础功能。部分常见函数包括

函数/事件(Function/Event) 目的(Purpose)
InitGame

InitGame 事件在其他脚本(包括 PreInitializeComponents)之前调用,并且被 AGameModeBase用来初始化参数并生成它的助手类

“这是在任何Actor运行'preinitializecomponents '之前调用的,包括Game Mode实例本身。”

PreLogin 接受或拒绝试图加入服务器的玩家。如果将ErrorMessage设置为非空字符串,则导致Login函数失败。PreLogin在Login之前被调用,并且在Login被调用之前可能会经过很长一段时间,特别是当加入玩家需要下载游戏内容时
PostLogin 成功登录后调用。这是第一个可以安全地在PlayerController上调用复制函数的地方。OnPostLogin可以在Blueprint中实现,以添加额外的逻辑
HandleStartingNewPlayer 在 PostLogin 后或无缝游历后调用,可在蓝图中覆盖,修改新玩家身上发生的事件。它将默认创建一个玩家 pawn。
RestartPlayer 调用开始生成一个玩家 pawn。如需要指定 Pawn 生成的地点,还可使用 RestartPlayerAtPlayerStart 和 RestartPlayerAtTransform 函数。OnRestartPlayer 可在蓝图中实现,在此函数完成后添加逻辑。
SpawnDefaultPawnAtTransform 这实际生成玩家 Pawn,可在蓝图中覆盖
Logout 玩家离开游戏或被摧毁时调用。可实现 OnLogout 执行蓝图逻辑

Game Mode 不会复制到加入多人游戏的远程客户端;它只存在于服务器上,因此本地客户端可看到之前使用过的留存 Game Mode 类(或蓝图);但无法访问实际的实例并检查其变量,确定游戏进程中已发生哪些变化。如玩家确实需要更新与当前 Game Mode 相关的信息,可将信息保存在一个 AGameStateBase Actor 上,轻松保持同步。AGameStateBase Actor 随 Game Mode 而创建,之后被复制到所有远程客户端。

AGameMode

AGameMode 是 AGameModeBase 的子类,拥有一些额外的功能支持多人游戏和旧行为。所有新建项目默认使用 AGameModeBase。如果需要此额外行为,可切换到从 AGameMode 进行继承。如从 AGameMode 进行继承,也可从 AGameState 继承游戏状态(其支持比赛状态机)。

AGameMode 包含一个跟踪比赛状态或整体游戏流程的状态机。可使用 GetMatchState 或 HasMatchStartedIsMatchInProgress 和 HasMatchEnded 之类的封装器查询当前的状态。以下是可能的比赛状态:

  • EnteringMap 是初始状态。Actor 尚未进行 tick,世界场景尚未完整初始化。内容完整加载后将过渡到下个状态
  • WaitingToStart 是下个状态,进入时将调用 HandleMatchIsWaitingToStart。Actor 正在进行 tick,但玩家尚未生成。如 ReadyToStartMatch 返回 true 或 StartMatch 被调用,它将过渡到下个状态

  • InProgress 是游戏主体所发生的状态。进入此状态时将调用 HandleMatchHasStarted,然后在所有 Actor 上调用 BeginPlay。此时,正常游戏进程已在进行中。ReadyToEndMatch 返回 true 或调用 EndMatch 时比赛将过渡到下个状态。

  • WaitingPostMatch 是倒数第二个状态,进入时将调用 HandleMatchHasEnded。Actor 仍在 tick,但新玩家无法加入。地图转换开始时它将过渡到下个状态

  • LeavingMap 是正常流程中的最后一个状态,进入时将调用 HandleLeavingMap。转换到新地图时比赛将保持在此状态中,进入新地图时将过渡回到 EnteringMap

  • Aborted 是失败状态,调用 AbortMatch 可开始此状态。出现无法恢复的错误时将进行此设置

游戏状态将固定为 InProgress,因为这是调用 BeginPlay、actor 开始 tick 的状态。然而,个体游戏可能覆盖这些状态的行为,用更复杂的规则构建一个多人游戏,如在一款多人射击游戏中等待其他玩家加入时允许玩家在关卡中自由飞行。

设置 Game Mode

  • 设置 DefaultEngine.ini 文件的 /Script/EngineSettings.GameMapsSettings 部分的 GlobalDefaultGameMode 输入将设置项目中所有地图的默认游戏模式
  • 在编辑器中 World Settings 标签下设置 GameMode Override 即可覆盖个体地图的项目设置
  • URL 可被传到可执行文件,强制游戏加载时带特定选项。使用 game 选项设置游戏模式。查看 命令行参数中的详细内容
  • 可在 DefaultEngine.ini 文件的 /Script/Engine.WorldSettings/ 部分中设置地图前缀(和 URL 法的别名)。这些前缀设置所有拥有特定前缀的地图的默认游戏模式
  • 请查阅 设置 Game Mode 文档中设置 Game Mode 的范例。但是蓝图版本,具体等后边进项目的时候再具体学习了。

Game State

Game State 负责启用客户端监控游戏状态。从概念上而言,Game State 应该管理所有已连接客户端已知的信息(特定于 Game Mode 但不特定于任何个体玩家)。它能够追踪游戏层面的属性,如已连接玩家的列表、夺旗游戏中的团队得分、开放世界游戏中已完成的任务,等等

Game State 并非追踪玩家特有内容(如夺旗比赛中特定玩家为团队获得的分数)的最佳之处,因为它们由 Player State 更清晰地处理。整体而言,GameState 应该追踪游戏进程中变化的属性。这些属性与所有人皆相关,且所有人可见。Game mode 只存在于服务器上,而 Game State 存在于服务器上且会被复制到所有客户端,保持所有已连接机器的游戏进程更新

函数或变量(Function or Variable) 使用(Use)
GetServerWorldTimeSeconds 这是 UWorld 函数 GetTimeSeconds 的服务器版本,将在客户端和服务器上同步,因此它是用于复制的可靠时间。
PlayerArray 这是所有 APlayerState 对象的阵列,对游戏中所有玩家执行操作时十分实用
HasBegunPlay 如果在游戏中的角色上调用了BeginPlay函数,则返回true。

AGameStateBase 通常在 C++ 或蓝图中延展,包含用于使游戏中玩家知晓当前情况的额外变量和函数。进行的特定修改通常基于 Game State 的配对 Game Mode。Game Mode 自身也可将其默认 Game State 类覆盖为派生自 AGameStateBase 的任意 C++ 类或蓝图。

GamePlay框架快速参考

用户界面(User Interfaces)和HUD

HUD指的是游戏期间在屏幕上覆盖的状态和信息。HUD的目的是 告知玩家当前游戏状态,即分数、生命值、游戏剩余时间等。 HUD通常是不可互动的,意味着玩家不能单击HUD的元素,因此 在HUD和用户界面难以分离的某些类型游戏中,这些元素会显示为灰色区域

用户界面 指的是菜单和其他互动元素。这些元素通常是在屏幕上覆盖绘制的, 就像HUD一样,但在某些情况下,它们会成为游戏世界本身的一部分, 在场景中的一个表面上渲染出来。最明显的UI示例是游戏启动时显示的主菜单, 或玩家暂停游戏时显示的暂停菜单。但是,游戏期间可能会显示其他UI。这些 可以用于显示游戏中不同角色之间的对话,或在更复杂的情况下,如RTS或RPG, 它们可能成为游戏本身不可或缺的一部分,让玩家可以选择武器、盔甲、建筑单位等等。

Slate UI框架

Slate 是一种自定义、平台无关的用户界面框架。

UMG 是作为Slate的封装每个UMG控件都有对应的Slate的控件,在调用函数UUserWidget::AddToViewport会将UMG控件树翻译为Slate控件树,对于UUserWidget会翻译成SObjectWidget,这样可以在绘制的Paint的流程中调到UMG这边的Tick

框架类关系

此流程图说明了这些Gameplay类是如何相互关联的。游戏由游戏模式和游戏状态组成。加入游戏的人类玩家与玩家控制器相关联。 这些玩家控制器允许玩家在游戏中拥有Pawn,这样他们就可以在关卡中拥有物理代表。玩家控制器还向玩家提供输入控制、抬头显示(HUD), 以及用于处理摄像机视图的玩家摄像机管理器

【Unreal】官方文档随笔-笔记七(不定时更新)_第2张图片 图片来源于官网

开发者文件夹与源码管理

开发者文件夹

在多人开发中使用,每位开发者都有自己的文件夹来管理自己的文件。

如果在 内容浏览器(Content Browser)中看不到"开发者(Developers)"文件夹则按照步骤

  1. 在 内容浏览器(Content Browser) 中,单击 设置(Settings)
  2. 在"设置(Settings)"菜单中,启用 显示开发者内容(Show Developer Content) 选项

在使用源码控制系统时,可配置UE引擎以查看其他开发者的文件夹中的资产。

  1. 在 内容浏览器(Content Browser) 中,单击 过滤器(Filters) 
  2. 在"过滤器(Filters)"菜单中,选择 其他过滤器(Other Filters)> 其他开发者(Other Developers)

为了确保不会意外打包已损坏或正在处理的资产,可从烘焙版本中排除"开发者(Developers)"文件夹。

  1. 在主菜单中,转到 编辑(Edit)> 项目设置(Project Settings),然后搜索 从不烘焙的目录(Directories to never cook) 数组
  2. 单击 添加(+)(Add (+)) 按钮向数组中添加新项目
  3. 单击  以打开项目中的文件夹列表
  4. 单击 开发者(Developers) 文件夹以将其选中

源码管理

源码管理(Source Control)软件用来管理代码、数据在一段时间内的状态。可用于协同开发。

虚幻引擎默认支持Perforce和SVN

*这里先介绍源码管理的功能流程,具体使用会在后面的【建立开发流程】中再具体学习,内容包括:

  • 虚幻编辑器中的版本控制
  • 关卡快照
  • 使用Perforce版本控制软件
  • 使用SVN作为版本控制软件

这里就不做过多的介绍学习了

通过编辑(Edit)> 编辑器偏好设置(Editor Preferences)> 加载和保存(Loading & Saving)启用源码管理

项目(Item) 说明(Description)

资产修改时是否自动检出

(Automatically Checkout on Asset Modification)

选中后,它将自动检出所有发生过修改的资产

修改包时提示检出

(Prompt for Checkout on Package Modification)

选中后,当你改动某个由源码管理控制的安装包时,将出现一条提示,询问你是否希望检出(锁定)该包。

修改时添加新文件

(Add New Files when Modified)

在发生改动时向源码管理添加新的文件

使用全局设置

(Use Global Settings)

使用全局性的源码管理登录设置,而非单独设置每个项目。修改后需重新登录。

文本比对工具

(Tool for diffing text)

指定文本比对工具的路径

停用源码管理

只有在绝对确定不想要使用源码管理时,才使用此选项。停用源码管理将导致你的本地内容无法与源码管理系统同步,并且将无法检入更改。

  • 在关卡编辑器窗口的右上角,点击绿色双箭头图标( icon_SourceControl.png )。这将打开 源码管理登录(Source Control Login) 界面
  • 点击 脱离源码管理运行(Run Without Source Control) 按钮。关卡编辑器窗口中的绿色图标将变成一个带斜杠的红色圆圈( icon_CB_SourceControlOff.png ),指示没有使用源码管理

内容浏览器中的集合

集合 是一种将资产集整理成组的方式。与文件夹不同,集合不包含资产本身,而仅包含对这些资产的引用。实际上,这意味着一个资产可以属于多个集合。

  1. 点击集合(Collections)面板上的 添加(Add) (+) 按钮
  2. 选择集合 类型 
    类型(Type) 说明(Description)
    共享集合(Shared Collection) 共享集合对其他用户可见。此选项仅在你处理多用户项目时可用
    私人集合(Private Collection) 私人集合仅适用于被明确邀请查看集合的用户。此选项仅在你处理多用户项目时可用
    本地集合(Local Collection) 本地集合仅在你的本地机器上可用
  3. 输入新集合的名称,然后按 回车键(Enter) 

你可以右键点击集合(Collection),然后从出现的上下文菜单中选择 新增(New) ,并按照上述步骤1-3来创建子集合。

将资产添加进集合中

  • 点击资产选择它,然后将其拖到集合中
  • 右键点击资产。然后,从上下文菜单中,选择 管理集合(Manage Collections),然后点击你要添加资产的目标集合
    • 资产已经归属集合的名称旁边将有复选标记
  • 点击资产可以选择它,然后启用你要添加资产的目标集合旁边的复选标记
    • 如果资产已经是该集合的一部分,则该集合旁边的复选标记将已启用。在这种情况下,清除复选标记将从该集合中 删除 资产

如果你将资产添加到具有父集合的集合,则该资产也将添加到父集合

你可以使用以下方法之一从集合中删除资产:

  • 键点击资产。然后,从上下文菜单中,选择 管理集合(Manage Collections),然后点击你要从中删除资产的集合
  • 点击资产可以选择它,然后禁用你要从中删除资产的集合旁边的复选标记

如果你在集合中选择资产,并按 删除(Delete) ,你可以完全删除该资产。你将收到提示,确认这是你要执行的操作,但请记住,删除资产意味着它 完全 从你的项目中删除。要简单地从集合中删除资产,请始终使用上述方法之一即可。

请注意,由于集合是对实际资产的引用,因此删除你的集合不会删除集合中的资产。

高级搜索语法

在内容浏览器中的搜索栏中可以通过特殊的运算符进行高级搜索。

例如“键-值”对的方式,还可以通过使用 ANDOR 和 NOT 运算符,同时完成多个搜索运算。

具体的查看文档就行了,这边就不记录了,等用到的时候再看吧

自定义虚幻引擎

插件安装位置

  • Windows上的 C:\Program Files\Epic Games\UE_[version]\Engine\Plugins

  • macOS上的 /Users/Shared/Epic Games/UE_[version]/Engine/Plugins

使用项目和模版

创建自定义模版

在以下教程中,[ProjectName] 代表你的虚幻引擎项目名(比如MyProjectName.uproject )。这与 DefaultGame.ini 文件中的变量 ProjectName 不同(没有方括号)。

要将已有的项目转换为模板:

  • 将 整个 项目文件夹复制到你的引擎安装目录的 Templates 文件夹啊。如果你从Epic Games启动器安装了虚幻引擎,那么 Templates 文件夹会位于:
    • Windows系统: C:\Program Files\Epic Games\UE_[version]\Templates
    • Mac: /Users/Shared/Epic Games/UE_[version]/Templates
  • 如果你从源代码编译了虚幻引擎,那么 Templates 文件夹会位于 [ForkLocation]\UE4\Templates 。

  • 打开 [ProjectName]\Config\DefaultGame.ini 文件 。然后添加或更新 ProjectName 变量。这是在创建新项目时显示在模板选择区域内的名称。例如:

 [/Script/EngineSettings.GeneralProjectSettings]
    ProjectID=E6468D0243A591234122E38F92DB28F4
    ProjectName=MyTestTemplate

注意 ProjectID 变量是为每一个项目生成的一个独特的ID。

  • 在你的虚幻引擎安装目录中,找到 Templates\TP_FirstPerson\Config\ 。将 TemplateDefs.ini 文件复制到 [ProjectName]\Config 文件夹

除了 TP_FirstPerson 以外,你还可以使用任何已有的模板文件夹,只要其中包含一个 TemplateDefs.ini 文件即可

  • 打开上一步复制的 TemplateDefs.ini 文件并且更新 LocalizedDisplayNames 和 LocalizedDescriptions 变量。一共有四组变量,每组对应一个虚幻引擎支持的语言:英文 (en)、韩文 (ko)、日文 (ja) 以及简体中文 (zh-Hans)

例如: 

    [/Script/GameProjectGeneration.TemplateProjectDefs]
    LocalizedDisplayNames=(Language="en",Text="My Test Template")
    LocalizedDescriptions=(Language="en",Text="This is a custom template that includes a first-person character and uses Blueprint.")
  • 当你创建新项目时,你的模板会在 TemplateDefs.ini 文件中定义的类别里出现。这由 Categories 变量所控制。不管变量名称是什么,一个模板只能分配 一个 类别。

    • Games - 游戏

    • ME - 电影、电视和现场活动

    • AEC - 建筑、工程和建造

    • MFG - 汽车、产品设计和生产

更多信息可以参考 [虚幻引擎安装目录]\UE_[版本]\Templates 文件夹下的 TemplateCategories.ini 文件。

  • 你可以在 [ProjectName]\Media 文件夹中添加一个图标和预览图。这些图片必须为PNG格式并且满足以下命名要求
    • 图标: [ProjectName].png
    • 预览图: [ProjectName]_Preview.png

Project Setting

这个项目设置就大概看看有个印象就行。

关卡

  • 点击 主菜单 中的 文件(File),然后点击 新建关卡(New Level)
  • 使用 Ctrl+N(Windows)或 Cmd+N(Mac)快捷键

以上会出现下个界面

【Unreal】官方文档随笔-笔记七(不定时更新)_第3张图片

我的这个版本(5.3.1)在 内容浏览器 中点击右键。然后,在 创建基本资产(Create Basic Asset) 下,选择 关卡(Level)貌似不会出现上边那个界面

  • 开放世界(Open World):一个包含示例内容的关卡,允许你使用世界分区来创建大型、可流送的开放世界
  • 空的开放世界(Empty Open World):一个使用世界分区的关卡,但不包含任何内容
  • 基本(Basic):一个包含地面、光照、大气和指数雾的关卡
  • 空关卡(Empty Level):一个没有任何内容的关卡

管理多关卡

关卡为非 Open Level 时(使用Basic)通过 Window → Levels 来打开关卡界面。

在主关卡中显示的子关卡的 Actor 为方便开发显示的Actor当运行时并不会显示,若显示可以通过关卡流送体积(Level Streaming Volume)、蓝图(Blueprint)或C++代码加载。

可用作多人开发(例如一个子关卡负责音效,一个子关卡负责特效)

可拆分子关卡:

  1. 选中要移到新关卡的Actor
  2. 在 关卡(Levels) 窗口中,单击 关卡(Levels) 下拉菜单,然后选择 使用选定Actor新建(Create New with Selected Actors) 以创建一个新子关卡
  3. 也可以将关卡中的 Actor 移动到指定关卡中

可通过设置Show → Advanced → Level Coloration 来区分关卡中的物体

【Unreal】官方文档随笔-笔记七(不定时更新)_第4张图片【Unreal】官方文档随笔-笔记七(不定时更新)_第5张图片

也可以通过右键子关卡更改流方式来显示指定关卡的Actor【Unreal】官方文档随笔-笔记七(不定时更新)_第6张图片

世界设置

世界分区设置和世界分区

世界分区(World Partition) 是新的数据管理和基于距离的关卡流送系统,可以为大型世界管理提供完整的解决方案。以前需要通过将单个持久关卡中的世界存储到网格单元格中,以便将大型关卡划分成子关卡,但现在的系统已经不需要如此操作,并且能够自动流送系统,从而根据与流送源的距离来加载和卸载这些单元格。

如需详细了解世界分区以及如何配置其设置,请参考虚幻引擎5抢先体验版文档中的世界分区部分。

虚拟现实

使用 米级世界缩放(World to Meters) 变量来调整虚拟世界(VR)的大小规模。提高或降低此数字将会使用户感觉自己相对于周围的世界而言变得更大或更小了。此设置用虚幻单位(UU)来表示。在UE4中,1虚幻单位(UU)等于1厘米(cm)。

假设你的内容使用1虚幻单位 = 1厘米进行构建,将 米级世界缩放(World to Meters) 设置为 10 将会使世界看起来非常大,而将米级世界缩放设置为 1000 将使世界变得非常小。

如需详细了解如何缩放虚拟现实(VR)体验,请参阅VR世界规模。

如需了解在UE5中开发XR的一般性说明,请参阅XR开发。

人工智能

在此部分中,可以启用虚幻引擎4的人工智能(AI)系统。

如需详细了解此系统,请参阅人工智能。

  • 介绍了虚幻引擎中的AI系统——一种可用于在项目中创建高真实度AI实体的系统

资产和内容包

切勿直接在磁盘上移动、复制或删除资产,这可能会破坏项目中的功能并导致数据损坏或丢失。应始终通过虚幻编辑器管理 .uasset 文件。

如果你要将资产从一个项目移动到另一个项目,请参阅迁移资产页面了解如何执行此操作。

自动重新导入

编辑器偏好设置(Editor Preferences)> 加载与保存(Loading & Saving)> 自动重新导入(Auto Reimport)

自定义指定目录,排除通配符文件

替换引用工具

替换引用工具(Replace References Tool) 在编辑器中提供了一种将多个资产合并成单个资产的简单方法。

但是存在替换失败的情况

类查看器

工具(Tools)> 类查看器(Class Viewer)

全局资产选取器

过全局资产选取器,你可以快速找到资产树的任何文件夹中的资产。

全局资产选取器Ctrl-P)是编辑资产或将资产放入关卡的快速访问方法。

然后你 单击并拖动 资产,将它移到场景中,也可以 双击 资产来调出相关的编辑器。

属性矩阵

属性矩阵(Property Matrix) 允许对大量对象或Actor进行批量编辑 和值比对。它允许以表格形式列出一组对象的各种可配置属性, 并且表格可以按任意列排序。属性矩阵还提供标准的属性编辑器, 显示该表格视图中设置的当前选择的所有属性。

功能

优势

批量对象编辑

  • 一种更轻松的工作流程,用于为一组对象设置一系列可变值,同时又能够 将一组对象上的属性设置为同一个值。

  • 同时处理数千个对象。

  • 能够同时编辑多种对象类型。

批量细粒度对象比较

  • 一次对数千个对象的值排序。

  • 快速查找设置不正确的资产和Actor。

深度属性和数组支持

  • 可以对数组和结构体类型的属性执行所有上述操作。

  • 可以公开任意属性的列。

  • 甚至可以处理数组索引。

功能按钮

说明

键盘

Esc

退出当前单元格的编辑模式。某些单元格有复杂的编辑控件,它们的ESC键有自己的优先行为,因此用户可能需要多次按下ESC键。

Ctrl + C

复制

Ctrl + V

粘贴

Ctrl + A

全选

Home 或 Ctrl + 左箭头

将当前单元格移到当前行的第一个单元格处。

End 或 Ctrl + 右箭头

将当前单元格移到行的最后一个单元格处。

Ctrl + Home

将当前单元格移到表的第一个单元格处。

Ctrl + End

将当前单元格移到表的最后一个单元格处。

左箭头 或 Shift + Tab

将当前单元格移到当前行的前一个单元格处。

右箭头 或 Tab

将当前单元格移到当前行的下一个单元格处。

上箭头

将当前单元格移到列的上一个单元格处。

下箭头

将当前单元格移到列的下一个单元格处。

Ctrl + 上箭头

将当前单元格移到列的第一个单元格处。

Ctrl + 下箭头

将当前单元格移到列的最后一个单元格处。

Shift + 上箭头

将当前单元格移到当前列的上一个单元格,并将其所在行添加到现有选择范围。

Shift + 下箭头

将当前单元格移到当前列的下一个单元格,并将其所在行添加到现有选择范围。

Ctrl + Shift + 上箭头

将当前单元格移到当前列的第一个单元格,并选择期间的所有行。

Ctrl + Shift + 下箭头

将当前单元格移到当前列的最后一个单元格,并选择期间的所有行。

F2

当前单元格进入编辑模式。

鼠标控制

LMB单击 单元格

被单击的单元格变成当前单元格,该单元格所在的行变为新选择范围。

Ctrl + LMB单击 单元格

如果被单击的单元格不属于已经选中的行,则该单元格变为当前单元格,它所在的行添加到当前选择范围,否则会从选择范围中移除该单元格所在的行。

Shift + LMB单击 单元格

被单击的单元格变为当前单元格,原始当前单元格所在行和被单击单元格所在行之间的所有行将添加到现有选择范围。

LMB单击 当前单元格

当前单元格进入编辑模式。

LMB双击 单元格

单元格变为当前单元格,并进入编辑模式。

MMB单击 列标题

从表中移除该列。

MMB单击 "细节"(Details)面板中的属性

切换是否将被单击属性固定到表格中。

Actor和几何体

变换Actor

 Actor分组

一个Actor一次只能属于一个组。

可以通过选中需要分组的物体后按 [Ctrl + G] 的方式,也可通过右键物体的方式【Unreal】官方文档随笔-笔记七(不定时更新)_第7张图片

还可使用 [Ctrl + G] 键盘快捷方式将Actor重新分组。

通过 [Shift + G] 来取消分组

锁定(Lock):

  • 选择锁定组中的Actor,将选择整个组
  • 变换会影响组中的所有Actor

未锁定(Unlock)

  • 选择和变换属于该组的单个Actor
  • 从该组中删除Actor

枢轴点通过 [Alt + 鼠标中键] 的方式更改其位置,或者,中键点击并拖动 该组的变换控件中心处的球体来移动。

Actor对齐

快捷键 作用
V + LMB 吸附到最近的网格点
Alt + V + MMB 吸附坐标轴到最近的网格点
Ctrl + End 吸附到最近的参考网格
Shift + End 吸附到它下面的地板上

*这个对齐并没有说想象中的那样在对齐的同时进行旋转对齐

合并 Actor

在虚幻引擎中将两个或更多静态网格体Actor合并为单个Actor。这样可以减少绘制调用,有助于项目优化。

菜单栏 → Actor → Merge Actors

合并类型 介绍
合并(Merge)

在默认情况下,该方式会合并全部选中的静态网格体Actor,为每个材质创建一个网格体分段。可以指定要使用的 LOD 级别。绘制调用数量等于 材质 数量。这种方式保留UV。您也可以选择合并全部材质,这将为整个网格体烘焙单一材质。其结果是单一分段和单一绘制调用,但  保留UV。将针对每一分段进行遮挡剔除

简化(Simplify)

该合并方式将全部选中的静态网格体Actor合并成一个单一网格体,它被称为 代理网格体(Proxy Mesh)。它使用选定每个网格体的最少细节LOD,并根据设置简化网格体形状。顶点数量也会减少。其结果是单一绘制调用。它为整个网格体烘焙单一材质,且  保留UV。将针对整个网格体进行遮挡剔除

批量(Batch) 该方式将基于相同的静态网格体组件创建实例化静态网格体组件。它保留UV,且不影响遮挡剔除
近似(Approximate) 这是 虚幻引擎5 的新功能,与"简化(Simplify)"合并方式相似。两者区别在于"近似(Approximate)"可以处理更复杂的源网格体(例如Nanite网格体),而"简化(Simplify)"在简化或纹理烘焙步骤中都会失败

有关于 合并设置 这里就不介绍了详细的看官方文档就可以了

  • 网格体设置(Mesh Settings)
  • 材质设置(Material Settings)
  • 地形剔除(Landscape Culling)
  • 代理设置
  • 输出网格体过滤和简化设置
  • 网格体法线和切线设置
  • 网格体UV生成设置
  • 输出静态网格体设置
  • 材质烘焙设置
  • 调试输出设置
  • 等等

如果启用 替换源Actor(Replace Source Actors) 选项,在视口中选中的Actor会被移除,并替换为新合并的Actor。这不会从内容浏览器或项目文件夹中删除源Actor资产。

该选项对于本页描述的所有合并方法通用。

*该设置在窗口的最下方【Unreal】官方文档随笔-笔记七(不定时更新)_第8张图片

Actor参考

Kill Z体积

Kill Z体积Actor(Kill ZVolume Actor) 会在玩家角色进入体积或与之交互时将其干掉。

Kill Z体积Actor不同于 世界设置(World Settings) 面板中的"Kill Z"选项,后者会在玩家越过Z轴(垂直轴)上的特定点之后立即摧毁玩家

施加伤害体积

会对进入体积的玩家或对象逐渐造成伤害。例如,如果玩家站在火焰中,你可以设置施加伤害体积来对其生命值产生对应的伤害

请参阅伤害施加体积页面了解更多。

文本渲染Actor

提供了向关卡添加文本的简单方法。

目标点Actor

提供了世界中的一个泛型点,你可以从中生成项目。例如刷怪点。

3D文本Actor

可以使用Sequencer编辑器为3D文本对象制作动画,在虚幻编辑器中直接创建动态图形。

Sequencer是引擎中的过场动画编辑器,可与Composure合成系统结合使用。

下面会介绍在 Level Sequencer 中对3D文本Actor的简单使用

  • 启用 文本3D(Text 3D) 插件:编辑(Edit)> 插件(Plugins)
  • 放置 文本3D Actor
  • 我的工程在使用该插件并将其放置到后大世界后,地面上的网格会一直闪烁。闪的我眼睛直疼
  • 开启新工程后网格同样也是闪。
  • 没有测试空工程开启此插件后的打包情况

属性 说明
文本(Text) Shift+Enter
挤压(Extrude) 设置几何体的深度:即文字从前到后的厚度
斜面(Bevel) 设置沿着字幕边缘的斜面大小
斜面类型(Bevel Type) 设置边缘斜面的类型:用于锐利、平直斜面的线性或是用于圆形边缘的半圆形

半圆分段数

(Half Circle Segments)

设置创建半圆斜面所使用的分段数
正面材质(Front Material) 选择给字母正面表面着色的材质
斜面材质(Bevel Material) 选择给斜面表面着色的材质
挤压材质(Extrude Material) 选择给字母侧面着色的材质
背面材质(Back Material) 选择给字母背面着色的材质
字体(Font) 导入字体
水平对齐(Horizontal Alignment) 根据Actor在3D空间中的位置,将文本水平向左、居中或向右对齐
垂直对齐(Vertical Alignment) 根据Actor在3D空间中的位置,将文本在垂直方向上与控件的顶线、顶部、底部或中心对齐
字距调整(Kerning) 设置各个字符之间的额外空间
行距(Line Spacing) 设置各行之间的额外空间
字距(Word Spacing) 设置各个词之间的额外空间
最大宽度(Max Width) 设置文本的最大宽度
最大高度(Max Height) 设置文本的最大高度
按比例缩放(Scale Proportionally) 将字母的高度和宽度锁定为当前比例。一旦启用,对字幕的高度或宽度的任何改动都会同时影响到两者

创建3D文本Actor

【Unreal】官方文档随笔-笔记七(不定时更新)_第9张图片

添加名为 [Text3DCharacterTransform] 的组件,在该组件上便可以对字体进行编辑。【Unreal】官方文档随笔-笔记七(不定时更新)_第10张图片

添加场景序列【Unreal】官方文档随笔-笔记七(不定时更新)_第11张图片

在序列中找到3D的文本对象后对其进行设置【Unreal】官方文档随笔-笔记七(不定时更新)_第12张图片

  • 注意添加关键帧与相应动作

这里再简单提一嘴导入字体的事情。右边的 [simkai_Font]是将字体拖进来后自动生成的,左边[MyFontTest]是通过在 [Content Browser] 中Add→User Interface→Font创建出来的。【Unreal】官方文档随笔-笔记七(不定时更新)_第13张图片

 【Unreal】官方文档随笔-笔记七(不定时更新)_第14张图片

贴花Actor

在定义贴花材质的时候注意下面这两个属性就可以了

  • Material Domain:改为Deferred Decal
  • Blend Mode:改为Translucent

【Unreal】官方文档随笔-笔记七(不定时更新)_第15张图片

玩家出生点
  • 放置玩家出生点
  • 无玩家出生点时,玩家将在世界场景中0,0,0点出生
  • 在编辑器视口中 单击右键,选择 Play From Here(从此处开始)
体积Actor

在关卡中指定区域的行为和特征

  • 对体积内的玩家或其他Actor造成伤害
  • 作为碰撞表面,阻止特定Actor进入体积
  • 当Actor进入体积时,对环境做出某种改变(例如,打开门)
  • 更改关卡中的照明或可视性
  • 音频体积 - 一种区域性音频播放功能

物理组件

破碎

选中需要破碎的Actor,选择 Fracture Mode

【Unreal】官方文档随笔-笔记七(不定时更新)_第16张图片 

New →  选择一种破碎方式 → Fracture → 将破碎颜色关掉

【Unreal】官方文档随笔-笔记七(不定时更新)_第17张图片

在Content Browser → All 中搜索Bomb添加到场景中,运行便会看到破碎

【Unreal】官方文档随笔-笔记七(不定时更新)_第18张图片

【Unreal】官方文档随笔-笔记七(不定时更新)_第19张图片

 上方黄色的为剔除厂:

  • 将该剔除厂放置到场景中
  • 在破碎物体中搜索 [initialization Fields]来添加该剔除厂

 

目前官方文档初步学习进度

学习的初步学习进度到:编程和脚本编写

之后会在项目与文档间切换着来,此篇将视为随时更新类随笔文档。

你可能感兴趣的:(Unreal,引擎学习,学习,笔记,unreal,engine,5)