UE5 学习笔记 1 - 入门篇
0 入门
Ctrl + Space - 打开 Content Drawer 内容浏览器
G - 开关场景图标
文件目录结构:
- _<项目名>(下划线保证项目文件夹在第一个)
- Blueprints 蓝图
- Maps 关卡
- Materials 材质
- Meshes 网格体
- Textures 纹理
- FXs 粒子与特效
- Audio 音频
- Cinematics 过场动画
- Input 输入映射
- Characters 角色
- <角色名>
- Animations 动画
- Meshes 网格体
- Textures 纹理
- Materials 材质
- <角色名>
- Props 资产
- <资产名>
- Materials 材质
- Textures 纹理
- <资产名>
\` - 打开控制台
指令 | 说明 |
---|---|
culture=zh-Hans | 中文界面 |
culture=en | 英文界面 |
stat fps | 显示帧率 |
t.maxFPS <value> | 最大帧率为 <value> |
0.0 修改虚幻商城资产下载路径
设置 - 编辑保管库缓存位置
0.1 移动视角
按住 MOUSE2 - 进入移动视角模式
拖动鼠标 - 移动视角
滚动滚轮 - 调整相机移动速度 或 画面右上角
W A S D - 前后左右移动镜头
Q E - 上下移动镜头
Z C - 缩放镜头
松开 MOUSE2 - 退出移动视角模式
0.2 变换物体
Q - 选择物体
W - 平移物体
E - 旋转物体
R - 缩放物体
0.3 快速定位目标
- 在镜头中定位目标:在右侧大纲中选择目标,按下 F 或 双击右侧大纲中的目标
- 在内容浏览器中定位目标:选择目标,按下 Ctrl + B
0.4 测量尺寸
在非 Perspective 视图下,在场景中按 MOUSE3 拖动鼠标,可以测量尺寸
1 关卡编辑
1.0 修改默认关卡
Edit - Project Settings - Maps & Modes - Default Maps - Editor Startup Map
Edit - Project Settings - Maps & Modes - Default Maps - Game Default Map
1.1 放置 Actor
将放置 Actor 面板停靠到左侧: - Place Actors Panel
END - 快速将物体放至地面
Shift + 拖动物体 - 物体不动场景动(默认场景不动物体动)
Alt + 拖动物体 - 复制物体
V + 拖动物体 - 模型吸附
使用 MOUSE3 拖动坐标轴 - 临时改变坐标轴的位置
1.2 创建玩家出生点
方法一:Place Actors - Basic - Player Start
方法二:将 Character 类蓝图拖入场景中 - Details - Pawn - Auto Possess Player - Player 0
调整右下角摄像机预览大小:Edit - Editor Preferences - Level Editor - Viewports - Look and Feel - Camera Preview Size
1.3 打开 Actor 的物理引擎
选中物体 - Details - Physics - Simulate Physics
2 蓝图编辑
蓝图文件命名规范:BP_<蓝图名>
从场景中快速进入蓝图编辑:选中蓝图 - Ctrl + E
添加端口延长线:Event Graph 选项卡 - 右键空白区域 - Add Reroute Node…
DEMO1 人物进入范围内显示文字,人物离开范围后切换文字
- 新建父类为 Actor 的蓝图
- Components 选项卡 - Add - Box Collision:添加碰撞体,检测是否有物体进入 Box 范围内
- Details 选项卡 - Transform/Shape:调整碰撞体的位置/大小
- Components 选项卡 - Add - Text Render:添加文字渲染器,显示初始文字
- Details 选项卡 - Text:调整文字内容
- Compile:左上角编译蓝图
- Save:左上角保存蓝图
在关卡中放置蓝图,蓝图的位置会显示文字
- 选中 Box Collision - Details 选项卡 - Events - On Component Begin Overlap 或 右键 Box Collision - Add Event - Add OnComponentBeginOverlap
- 将 Components 选项卡中的 TextRender 拖入 Event Graph 中
- 拖动 Text Render 蓝色节点 - Place a new node - Set Text
- 连接 On Component Begin Overlap 和 Set Text 的白色箭头(表示程序的执行方向)
- 右键 Set Text 的 value - Promote to Variable
- 编译(编译之后才能设置默认值)
- 选中 Value 节点 - Details 选项卡 - Default Value - Value:设置默认值
- 保存
现在人物进入 Box 范围内时,文字会变成 Value 的值
同理,设置 On Component End Overlap 事件后,当人物离开 Box 范围内时,文字会变成 Value 的值
DEMO2 人物接触球体后,球体会产生火焰
- 新建父类为 Actor 的蓝图
- Components 选项卡 - Add - Sphere:添加球体
- Details 选项卡 - Materials:选择材质
- Components 选项卡 - Add - Cascade Particle System Component:添加粒子系统
- Details 选项卡 - Particles - Template:选择粒子效果
- Details 选项卡 - Rendering - Visible - 取消勾选:初始状态不显示粒子效果
- 创建 Collision ,设置 On Component Begin Overlap 和 On Component End Overlap 事件,使用 Set Visibility 节点:设置粒子效果的可见性
3 玩家角色编辑
3.0 修改游戏模式
- Window 菜单 - 勾选 World Settings
- World Settings 选项卡 - Game Mode - GameMode Override:选择游戏模式
- World Settings 选项卡 - Game Mode - Selected GameMode - Default Pawn Class:选择玩家角色
3.1 调整玩家角色身后的摄像机位置
选中角色 - Ctrl + E - Components 选项卡 - 选中 CameraBoom - Details 选项卡 - Camera - Target Arm Length:调整摄像机距离角色的距离
… - Details 选项卡 - Camera - Target Offset:调整摄像机的位置
… - Components 选项卡 - 选中 FollowCamera - 旋转摄像机,使其指向角色
3.2 调整玩家角色的运动
选中角色 - Ctrl + E - Components 选项卡 - 选中 Character Movement
Details 选项卡中的部分选项:
- Character Movement (General Settings)
- Gravity Scale:重力大小
- Character Movement: Walking
- Walkable Floor Angle:角色可以行走的最大角度
- Character Movement: Jumping / Falling
- Jump Z Velocity:角色跳跃时的速度
- Air Control:角色在空中时的控制能力
DEMO3 给玩家角色添加手电筒
- 选中角色 - Ctrl + E - Components 选项卡 - Add - Spot Light:添加聚光灯
- 调整聚光灯的位置、角度、亮度等参数
4 外部模型
4.0 导入模型
- Content Browser 选项卡 - Add - Import to /Game:导入模型
- 勾选 Build Nanite
- 勾选 Combine Meshes
- 点击 Import
4.1 设置模型碰撞
- 选中模型 - Ctrl + E - 左上角 Show - 勾选 Simple Collision:显示模型碰撞体积
- Collision 下拉菜单 - Auto Convex Collision:自动生成碰撞体积
- 右下角 Convex Decomposition 选项卡设置参数(数值越大越精确) - 点击 Apply
5 地形
5.0 创建地形
- 左上角下拉菜单 从 Selection Mode 切换到 Landscape Mode 或 Shift + 2
- 在 Landscape 选项卡中设置 Material 、Location 、Section Size 、Section Per Component 等参数
- 点击 Create
5.1 造山
Resolution 单位:米
- 进入 Landscape Mode
- 点击 Sculpt ,使用下面的工具编辑地形(默认升高,Shift 降低)
5.2 造海
- 在 Place Actors 选项卡中选择 Geometry - 拖动 Box 到场景中
- 选中 Box - Details 选项卡 - Brush Settings 设置 Box 长宽高
- … - Details 选项卡 - Transform 设置 Box 位置
- 通过上述两步操作,使 Box 能够覆盖地形中的海洋部分
- Details 选项卡 - Brush Settings - Advanced - Create Static Mesh:将 Box 转换为静态网格体
- 储存到
_<项目名>/Meshes
文件夹中,命名为SM_Ocean
- 选中 SM_Ocean - Details 选项卡 - Materials - 选择一个 Ocean 材质
5.3 添加植被
- Shift + 3 - 进入 Foliage Mode 或 从左上角下拉菜单中选择
- 点击
+Foliage
按钮 将植被静态网格体添加到候选区域 - 勾选候选区域的植被,画笔中就会包含所选植被
- 使用画笔在地形中绘制(按 Shift 擦除植被)
设置植被密度:单选/多选候选区域中的植被 - 点亮 Details 按钮 - 下方 Painting - Density / 1Kuu - 调整数值
设置植被大小:… - Painting - Scale X - 调整模型的随机缩放范围
6 视觉效果
使用环境光照混合器:Window - Env. Light Mixer
Ctrl + L - 调整太阳光角度
6.0 指数级高度雾
- Place Actors 选项卡 - Visual Effects - Exponential Height Fog - 拖拽到场景中
- 选中 Exponential Height Fog - Details 选项卡 - Exponential Height Fog Component - Fog Density:设置雾的浓度
- … - Exponential Height Fog Component - Fog Height Falloff:设置雾的衰减速度
- … - Details 选项卡 - Volumetric Fog - Volumetric Fog:体积雾开关(影响光的散射)
6.1 体积光
体积光(丁达尔效应)的打开方法:
- 选中 Directional Light - Details 选项卡 - Light Shafts - Light Shaft Occlusion:光束遮挡开关
- … - Light Shafts - Occlusion Mask Darkness:光束遮挡强度
6.2 天光
- 选中 Sky Light - Details 选项卡 - Light - Intensity Scale:设置天光亮度
6.3 后期处理体积(后期盒)
进入后期处理体积的摄像机会应用后期处理体积的参数
- Place Actors 选项卡 - Visual Effects - Post Process Volume - 拖拽到场景中
- 选择 Post Process Volume - Details 选项卡 - Post Process Volume Settings - Infinite Extent (Unbound):全局作用域开关
- … - Details 选项卡 - Lens - Bloom - Intensity:调整光照强度
- … - Details 选项卡 - Exposure - Exposure Compensation:调整曝光补偿
- … - Details 选项卡 - Lens - Chromatic Aberration - Intensity:调整色差强度(中毒效果)
- … - Details 选项卡 - Lens - Dirt Mask:镜头污渍
- … - Details 选项卡 - Lens - Lens Flares - Intensity:镜头光晕强度
- … - Details 选项卡 - Lens - Image Effects - Vignette Intensity:镜头暗角强度
- … - Details 选项卡 - Color Grading:调色
- Temperature 色温
- Global 全局
- Shadows 阴影
- Midtones 中间色
- Highlights 高光
- Misc 杂项
7 粒子系统
DEMO4 创建悬浮发光微粒
- 创建 Niagara 发射器
- 在
FXs
文件夹中 - 右键 - FX - Niagara Emitter - New emitter - next
- 搜索 Hanging Particulates - 选中 - Finish
- 将文件命名为
NE_<文件名>
- 双击文件进入编辑界面
- Details 选项卡 - Emitter Properties - Emitter - Sim Target - 改为 GPUCompute Sim
- … - Emitter - Calculate Bounds Mode - 改为 Fixed
- Details 选项卡 - Emitter Update - Spawn Rate - SpawnRate:修改粒子数量
- Details 选项卡 - Particle Spawn - Shape Location - Shape - Box Size:修改粒子生成范围
- Details 选项卡 - Particle Spawn - Initialize Particle - Point Attributes - Color:修改粒子颜色( RGB 数值大于 1 时,粒子自发光;小于等于 1 时粒子反射光)
- 在
- 创建 Niagara 系统
- 在
FXs
文件夹中 - 右键 - Niagara System - New system from selected emitter(s) - next
- Asset Type Filtering - 选择 Parent Emitters - 选择刚才创建的 Niagara 发射器 - 点击右下角绿色加号 - Finish
- 将文件命名为
NS_<文件名>
并保存
- 在
- 将 Niagara 系统拖入场景中
注意:
- 只有 Niagara 系统可以放入场景中,Niagara 发射器不可以
- Niagara 发射器必须放在 Niagara 系统中才能生效
- Niagara 系统中可以放多个 Niagara 发射器
8 声音
8.0 导入音频
在 Audio
文件夹中右键 - Import to … - 选择音频文件 - 命名为 AUDIO_<音频名>
8.1 声音设置
- 双击音频文件 - Details 选项卡 - Sound - Looping:循环播放开关
- 选中场景中的音频喇叭 - Details 选项卡 - Sound - Volume Multiplier:调整音量大小
p.s. G - 开关场景图标
8.2 设置声音距离衰减
- 选中场景中的音频喇叭 - Details 选项卡 - Attenuation - 勾选 Allow Spatialization:允许空间化
- … - Attenuation - 勾选 Override Attenuation
- … - Details 选项卡 - Attenuation (Volume) - Inner Radius:设置可以听到不衰减声音的半径
- … - Details 选项卡 - Attenuation (Volume) - Falloff Distance:设置声音衰减的半径
9 材质
9.0 创建材质
在 Materials
文件夹中右键 - Material - 命名为 M_<材质名>
9.1 导入纹理
在 Textures
文件夹中右键 - Import to … - 选择纹理图片 - 命名为 T_<纹理名>
9.2 编辑材质
- 双击材质文件进入编辑界面
- 右键想要设置的参数 - Promote to Parameter
- Details 选项卡 - Material - Blend Mode:设置混合模式
- Details 选项卡 - Material - Two Sided:在模型内部也应用材质
混合模式:
- Opaque 不透明
- Masked 已遮罩
- Translucent 半透明
材质属性:
材质属性 | 翻译 | 作用 | |
---|---|---|---|
Basic Color | 基础颜色 | ||
Metallic | 金属度 | 材质的金属质感 | |
Specular | 高光度 | 材质高光部分的强度 | |
Roughness | 粗糙度 | 材质表面的粗糙程度 | |
Anisotropy | 各向异性 | ||
Emissive Color | 自发光颜色 | RGB 的值大于 1 时自发光 | |
Opacity | 不透明度 | ||
Opacity Mask | 不透明蒙版 | ||
Normal | 法线贴图 | 指定物体表面的法线方向 | |
Tangent | 切线贴图 | ||
World Position Offset | 全局位置偏移 | ||
Subsurface Color | |||
Custom Data 0 | |||
Custom Data 1 | |||
Ambient Occlusion | 环境光遮蔽 | ||
Refraction | 折射 | ||
Pixel Depth Offset | 像素深度偏移 | ||
Shading Model | 着色模型 | ||
Surface Thickness | 表面厚度 | ||
Front Material | 前方材质 |
- 按住 1 单击空白区域 - 创建常标量节点
- 按住 2 单击空白区域 - 创建有 2 个分量的常向量节点
- 按住 3 单击空白区域 - 创建有 3 个分量的常向量节点
- 按住 M 单击空白区域 - 创建乘法节点
- 按住 T 单击空白区域 - 创建纹理采样节点
- 选中节点 - Details 选项卡 - Material Expression Texture Base - Texture:设置纹理
- 可连接至
- Basic Color :设置颜色贴图
- Normal :设置法线贴图
- 按住 U 单击空白区域 - 创建贴图空间节点
- 按住 Alt 单击接口 - 断开连接
- 按住 Ctrl 拖拽接口 - 更改连接位置
- C - 添加注释框
9.3 贴花材质
贴花材质类似于游戏中的喷漆,它不是覆盖模型整体,而是在模型的某个特定位置应用贴花
- 双击材质进入编辑界面
- Details 选项卡 - Material - Material Domain - Deferred Decal 延迟贴花
- … - Material - Blend Mode - Translucent
- 将 Texture Sample 节点的 A 通道连接至 Opacity :隐藏纹理白色背景
设置指定模型不接受贴花:选中目标模型 - Details 选项卡 - Rendering - Advanced - Receives Decals
蓝图模型不接受贴花:选中蓝图模型 - Ctrl + E - Components 选项卡 - 选中 Mesh - Details 选项卡 - Rendering - Advanced - Receives Decals
9.4 法线贴图的制作
- 用 Photoshop 打开纹理图
- 滤镜 - 3D - 生成法线图…
10 过场动画
10.0 添加过场动画
左上角过场动画按钮 - Add Level Sequence - 将过场动画序列保存到 Cinematics
文件夹中 - 命名为 SEQ_<过场动画名>
10.1 编辑序列
Space - 播放/暂停
Ctrl + 鼠标滚轮 - 缩放时间轴
- 在 Sequecer 选项卡中点击 创建相机
- Cine Camera Actor - CameraComponent - Current Focal Length:调整焦距
- 选中 Cine Camera Actor - 按 S:设置关键帧
10.2 多机位剪辑
- 点击 创建第二个相机
- 调整相应参数
- 设置关键帧
- 在 Camera Cuts 轨道点击
+
- 选择第二个相机 - 在轨道中调整两个相机的时间轴 - 点击 Camera Cuts 轨道的摄像机图标
- Space 进行预览
10.3 场景内物体的动画
- 选中目标物体 - 按 S - 自动创建 InstanceFoliageActor 轨道,并创建关键帧
- 单击关键帧 - InstanceFoliageActor - Transform - 设置相应属性
10.4 场景内灯光的动画
- 在 Outliner 选项卡中将灯光拖入 Sequencer 选项卡中
- 选中 Light Source - 按 S - 自动创建 Transform 轨道,并创建关键帧
- 继续调节参数并创建关键帧
10.5 过场动画设置
- 在 Outliner 选项卡中选择过场动画 - Details 选项卡 - Playback - Auto Play:自动播放
- … - Playback - Play Rate:播放速度
- … - Playback - Start Offset:开始播放的时间
10.6 场景内人物的动画
10.6.0 录制人物动作
- Window - Cinematics - Take Recorder 镜头试拍录制器
- 在 Take Recorder 选项卡中 -
+Source
按钮 - From Actor - 选择目标人物 - 运行场景
- 点击 Take Recorder 选项卡中的红色按钮开始录制
- 倒计时结束后开始录制
- 操控人物移动
- Shift + F1 释放鼠标
- 点击 Take Recorder 选项卡中的停止按钮结束录制 或 Esc 直接结束
录制结果储存在 /All/Game/Cinematics/Takes/
文件夹中
10.6.1 将人物动作添加到过场动画中
- 双击过场动画序列打开 Sequencer 选项卡
- 将录制结果
Subscenes
文件夹中的序列文件拖入过场动画轨道中
- 注意:拖入的文件一定位于 Subscenes 文件夹中
添加人物自带摄像机的镜头:在 Camera Cuts 轨道点击 +
- 选择子序列 - 选择人物蓝图
10.7 改变序列某一部分的播放速度
- 在 Sequencer 选项卡中点击
+Track
- Time Dilation Track 时间膨胀轨道 - 添加关键帧并调整播放速度
10.8 转场效果
- 在 Sequencer 选项卡中点击
+Track
- Fade Track 渐变轨道 - 添加关键帧并调整参数( 1 - 全黑,0 - 全亮)
10.9 添加音频
- 在 Sequencer 选项卡中点击
+Track
- Audio Track 音频轨道 - Audio - Pitch 音调
- Audio - Volume 音量
10.10 将过场动画导出为视频
- 在 Sequencer 选项卡左上角点击
- 常用设置项
- Image Output Format
- Audio Output Format
- Resolution
- Output Directory
- 点击 Capture Movie
11 角色编辑再探(续 3 玩家角色编辑)
- 蓝图修改之后记得编译、保存
11.0 替换角色的骨骼网格体
- 将 Skeletal Mesh 骨骼网格体 和 Skeleton 骨骼 添加到
Characters/<角色名>/Meshes
文件夹中 - 右键
1
中添加的 Skeletal Mesh - Skeleton - Assign Skeleton - 选择1
中添加的 Skeleton - Accept - 双击目标角色的蓝图 或 选中角色按 Ctrl + E - Components 选项卡 - 选中 Mesh
- Details 选项卡 - Mesh - Skeletal Mesh Asset - 选择骨骼网格体
- 编译、保存
11.1 重定向角色的动画蓝图
源角色动画 -> 目标角色动画
- 重定向 Animation Blueprint 动画蓝图 时,相关的 Animation Sequence 动画序列 也会一起重定向
11.1.0 创建 IK 绑定
- 在
Characters/<目标角色名>/Rigs
文件夹中右键 - Animation - Retargeting - IK Rig IK 绑定 - 命名为IK_<目标角色名>_Rig
- 双击文件 - Details 选项卡 - Preview Mesh - Preview Skeletal Mesh - 选择目标角色的 Skeletal Mesh - 保存
- 双击打开源角色的 IK Rig 文件
- 在目标角色的 Hierarchy 选项卡中 - 右键与源角色对应的 Retarget Root 骨骼 - Set Retarget Root
- 对比两个文件的 IK Retargeting 选项卡
- 在目标角色的 IK Retargeting 选项卡中 -
+ Add New Chain
- 添加与源角色相同的 Chain Name - 按正确的顺序指定对应的 Start Bone 和 End Bone- 在 Hierarchy 选项卡中选中多个骨骼,再点击
+ Add New Chain
效率更高
- 在 Hierarchy 选项卡中选中多个骨骼,再点击
- 保存关闭
11.1.1 创建 IK 重定向器
- 在
Characters/<目标角色名>/Rigs
文件夹中右键 - Animation - Retargeting - IK Retargeter IK 重定向器 - 命名为IK_<目标角色名>_Retargeter
- 双击文件进入编辑器
- Details 选项卡 - Source - Source KIRig Asset - 选择源角色的 IK Rig
- … - Source - Source Preview Mesh - 选择正确的源角色网格体
- Details 选项卡 - Target - Target KIRig Asset - 选择目标角色的 IK Rig
- … - Target - Target Preview Mesh - 选择正确的目标角色网格体
- Details 选项卡 - Preview Settings - 调节 Target Mesh Offset 和 Target Mesh Scale 使目标角色的模型与源角色的模型重合
- 在右下角 Asset Browser 中双击 Animation Sequence (绿色文件)可以预览动作(窗口左上角 可以调节播放速率)
- 左上角模式切换按钮
- Run Retargeter 动作预览模式 :用于预览动作动画
- Edit Retarget Pose 编辑目标角色的姿势:用于调整目标角色的姿势,使其与源角色的姿势一致(需要先在左侧选中骨骼,然后在窗口中进行调整)
- Show Retarget Pose 显示目标角色的姿势
- 使用 Edit Retarget Pose 模式调整目标角色的姿势与源角色一致
- 使用 Run Retargeter 模式预览动作
- 保存关闭
11.1.2 重定向动画蓝图
- 在
Characters/<目标角色名>
文件夹中新建Animations
文件夹 - 右键源角色的 Animation Blueprint 动画蓝图 - Retarget Animation Assets - Duplicate and Retarget Animation Assets/Blueprints
- IK Retargeter 选择 11.1.1 中创建的 IK 重定向器
IK_<目标角色名>_Retargeter
- Folder - Change … - 选择
Characters/<目标角色名>/Animations
文件夹 - Rename New Assets 根据需要设定重命名规则
- 勾选 Remap Referenced Assets
- 点击 Retarget
11.1.3 应用重定向的动画蓝图
- 双击目标角色的蓝图 或 选中角色按 Ctrl + E - Components 选项卡 - 选中 Mesh
- Details 选项卡 - Animation - Anim Class - 选择重定向生成的动画蓝图
- 编译保存
11.2 人物出生事件
选中角色 - Ctrl + E - Event Graph 选项卡(可以通过 My Blueprint 选项卡 - GRAPHS - 双击 EventGraph 进入) - 右键空白区域 - 搜索 Event BeginPlay - 单击添加节点
- 框选需要注释的节点,按 C 添加注释框
- 选中注释框 - Details 选项卡 - Show Bubble When Zoomed:在缩小时显示气泡注释
- … - Details 选项卡 - Move Mode
- Comment :只移动注释框
- Group Movement :注释框中的节点一起移动
DEMO5 人物出生时打印字符串
- 拖动 Event BeginPlay 节点的白色箭头至空白区域
- 搜索 Print String 并添加节点
- 节点下拉菜单中可以进一步设置属性
- In String:设置要打印的字符串
- Print to Screen:是否在屏幕上打印
- Print to Log:是否在日志中打印
- Text Color:打印字符串的颜色
- Duration:打印持续时间
DEMO6 在事件发生时显示鼠标指针
- 在 Event Graph 选项卡空白处右键 - 取消勾选右上角 Context Sensitive 情景关联 - 搜索 Set Show Mouse Cursor - 添加节点
- 勾选 Context Sensitive - 搜索 Get Player Controller (带有 Player Index 属性) - 添加节点
- 将 Get Player Controller 节点的 Return Value 连接至 Set Show Mouse Cursor 节点的 Target
- 连接白色执行流至事件节点后
11.3 帧生成事件
Event Tick 事件节点在每帧生成后触发,并用 Delta Seconds 输出帧生成时间
DEMO7 记录人物存活时间
- 进入人物蓝图 - Event Graph 选项卡
- My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量 LifeSeconds - 类型设置为 Float
- 将变量拖动到 Event Graph 选项卡中
- Get
<变量名>
:获取变量的值 - Set
<变量名>
:设置变量的值
- Get
- 添加 Add 节点(Utilities - Operators)
- Float 转 String 的节点是自动添加的
11.4 鼠标输入事件
DEMO8 鼠标滚轮控制相机距离
- 进入人物蓝图 - Event Graph 选项卡
- 添加 Mouse Wheel Axis 节点:获得鼠标滚轮的滚动量
- 从 Components 选项卡中将 CameraBoom 拖入 Event Graph 选项卡中
- 拖动 Camera Boom 的蓝色输出端口 - 添加 Set Target Arm Length 节点
- 拖动 Camera Boom 的蓝色输出端口 - 添加 Get Target Arm Length 节点
- 逻辑:
Axis Value
* 系数 +Target Arm Length
=Target Arm Length
- 添加 Clamp (Float) 节点:限制相机距离的最大值和最小值
11.5 设置按键映射
DEMO9 为角色添加超级跳技能
Shift + Space - 超级跳
DEMO9-0 创建 Input Action 输入操作 和 Input Mapping Context 输入映射上下文
- 在
Input
文件夹中新建Actions
文件夹 - 在
Actions
文件夹中右键 - Input - Input Action - 命名为IA_<动作名>
(IA_Walk
) - 不进行任何修改 - 保存
- 在
Actions
文件夹中右键 - Input - Input Action - 命名为IA_<动作名>
(IA_SuperJump
) - 双击文件进入编辑界面 - Details 选项卡 - Action - Triggers -
+
- Index[0] - Chorded Action 弦操作
- 点击 Index[0] 左侧下拉菜单 - Chord Action - 选择
IA_Walk
- 保存关闭
- 在
Input
文件夹中右键 - Input - Input Mapping Context - 命名为IMC_<文件名>
(IMC_Player
) - 双击文件进入编辑界面 - Details 选项卡 - Mappings - Mappings -
+
- 选择
IA_Walk
- 下拉菜单 - 点击键盘 - 按 Shift - … - Mappings -
+
- 选择
IA_SuperJump
- 下拉菜单 - 点击键盘 - 按 Space - 保存关闭
- Triggers 设定的 Chorded Action 弦操作 也可以在 Input Mapping Context 中设定,二选一即可
DEMO9-1 在角色蓝图中添加映射上下文
- 在角色蓝图中添加 Add Mapping Context 节点(关闭 Context Sensitive)
- 将白色执行流箭头连接至 Event BeginPlay 执行流之后
- Target 连接至 Enhanced Input Local Player Subsystem 节点的输出端口
- Mapping Context 选择上一步创建的 Input Mapping Context 文件
DEMO9-2 设置动作节点触发的程序
- 添加 IA_SuperJump 节点(Enhanced Action Events) - 展开下拉菜单
- 添加 Jump 和 Stop Jumping 节点
- 将 Components 选项卡中的 Character Movement 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Jump Z Velocity 节点
- 按下图所示逻辑连接节点
DEMO9-3 为超级跳添加冷却时间
- 添加 Do Once 节点、Delay 节点
- 添加 Add Custom Event… 节点 - 命名为
SuperJump_CD_Finish
- 添加 Super Jump CD Finish 节点(Call Function)
- My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量 CD_SuperJump - 类型设置为 Float
- 将 CD_SuperJump 拖入 Event Graph 选项卡中 - Get CD_SuperJump
- 按下图所示逻辑连接节点
- 编译 - 选中 CD_SuperJump 变量 - Details 选项卡 - Default Value:设置冷却时间
- 编译保存
DEMO9-4 为超级跳添加音效
- 添加 Play Sound 2D 节点 - Sound 选择执行音频文件
- 将节点连接至 Jump 节点之后
DEMO9-5 为超级跳添加特效
- 添加 Spawn Emitter Attached 节点 - Emitter Template 选择粒子发射器
- 将 Components 选项卡中的 Mesh 拖入 Event Graph 选项卡中 - 将蓝色输出端口与 Spawn Emitter Attached 节点的 Attach to Component 连接
- 为解决延迟问题,把音效和特效节点移动到跳跃节点之前执行
DEMO9-6 超级跳总览
11.6 设置角色多段跳
角色蓝图 - Components 选项卡 - 选中最顶层的 Self - Details 选项卡 - Character - Jump Max Count
11.7 创建可以拾取的物品
DEMO10 拾取物品后角色解锁二段跳
- 在
Blueprint
文件夹中右键 - Blueprint Class - Actor - 命名为BP_<物品名>
- 进入蓝图编辑页面 - Components 选项卡 -
+ Add
按钮 - Static Mesh - 选中 Static Mesh -
+ Add
- Sphere Collision - 将 Sphere Collision 与 Static Mesh 重合
- 选中 Static Mesh - Details 选项卡 - Static Mesh - Static Mesh - 选择物品模型
- 选中 Sphere Collision - Details 选项卡 - Events - On Component Begin Overlap -
+
- 在蓝图中添加 Get Player Character 节点 - 拖动蓝色输出端口 - 添加 Set Jump Max Count 节点
- 添加 Destroy Actor 节点
- 如下图所示连接节点
- 如果想添加音效/特效,就在 Destroy Actor 节点之前添加
11.8 为物品添加漂浮效果
- 在物品蓝图中添加 Add Timeline… 节点 - 命名为
Timeline_Floating
- 双击时间轴节点进入编辑界面
+ Track
- Add Float Track - 命名为alpha
- 在轨道上右键 - Add key to - 添加三个关键帧,并设置:
- 第 0 秒的值为 0.0
- 第 1 秒的值为 1.0
- 第 2 秒的值为 0.0
- 打开前三个按钮
- Use Last Keyframe 使用最后一个关键帧
- AutoPlay 自动播放
- Loop 循环
- 从 Components 选项卡中将 Static Mesh 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Location 节点
- 添加 Lerp (Vector) 节点 - 设置插值范围 A 和 B
- 如下图所示连接节点
11.9 给人物添加第二个技能 —— 释放粒子(第一个技能)
DEMO11 为角色添加照明技能
Q - 释放萤火
DEMO11-0 创建 Input Action 输入操作 并更新 Input Mapping Context 输入映射上下文
- 在
Input/Actions
文件夹中右键 - Input - Input Action - 命名为IA_<动作名>
(IA_Skill01
) - 不进行任何修改 - 保存
- 双击
Input
文件夹中的IMC_Player
文件 - Details 选项卡 - Mappings - Mappings -+
- 选择
IA_Skill01
- 下拉菜单 - 点击键盘 - 按 Q - 保存关闭
DEMO11-1 创建萤火粒子特效
- 在
FXs
文件夹中右键 - Niagara System - New system from selected emitter(s) - next
- Asset Type Filtering - 选择 Templates - 搜索 Omnidirectional Burst (Niagara 自带资产)并选择 - 点击右下角绿色加号 - Finish
- 将文件命名为
NS_<文件名>
并保存(NS_Fireflies
) - 双击文件进入编辑界面 - 取消勾选节点中的 Gravity Force:粒子不受重力影响
- 选中节点中的 Add Velocity From Point - Details 选项卡 - Add Velocity - Velocity Speed - Minimum/Maximum - 设置为 50/100:设置粒子扩散范围
- 点击节点中的 Initialize Particle - Details 选项卡 - Initialize Particle - Point Attributes - Lifetime Mode - 设置为 Direct Set:粒子持续时间固定
- … - Point Attributes - Lifetime - 设置为 10.0:粒子持续时间为 10 秒
- … - Initialize Particle - Sprite Attributes - Sprite Size Mode - 设置为 Random Uniform:粒子大小服从均匀分布
- … - Sprite Attributes - Uniform Sprite Size Min/Max - 设置为 0.5/1.0:设置粒子大小
- 点击节点中 Particle Update 右侧的
+
- 添加 Curl Noise Force 条目 - 选中 Curl Noise Force - Details 选项卡 - Curl Noise Force - Noise Strength - 设置为 200.0:设置粒子做不规则运动的强度
- 将节点中 Drag 条目拖动到 Curl Noise Force 条目下方
- 选中节点中的 Drag - Details 选项卡 - Drag - Drag - 设置为 2.0:设置粒子阻力,减慢不规则运动的速度
- 选中节点中的 Scale Color - Details 选项卡 - Scale Color - Scale RGB - 设置 RGB 的值大于 1 :使粒子自发光
- 点击节点中 Render 右侧的
+
- 添加 Light Renderer 条目 - 选中 Light Renderer - Details 选项卡 - Light Renderer - Light Rendering - Radius Scale - 设置为 200.0:设置粒子光照范围
- … - Light Rendering - Color Add - RGB:设置光照颜色(大于 1 自发光)
DEMO11-2 在角色动画蓝图中创建动画状态机
- 在角色蓝图中 - Components 选项卡选中最顶层 Self - Details 选项卡 - Mesh - Skeletal Mesh Asset - 双击右侧的骨骼网格体
- 右上角的四个按钮 分别对应与角色蓝图绑定的 骨骼、骨骼网格体、动画序列、动画蓝图 编辑窗口
- 点击第四个按钮进入动画蓝图编辑界面
- 左下角 My Blueprint 选项卡 - ANIMATION GRAPHS - AnimGraph - 双击 Default 进入动画状态机编辑界面
- 右键空白区域 - Add State - 命名为
CastFireflies
- 从
Idle/Run
状态拖拽箭头指向CastFireflies
状态 - 从
CastFireflies
状态拖拽箭头指向Idle/Run
状态(aka. 创建双向箭头) - 编辑
CastFireflies
状态: - My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量
IsCastingFireflies
- 类型设置为 Boolean - 编辑
Idle/Run -> CastFireflies
规则: - 编辑
CastFireflies -> Idle/Run
规则: - 编译保存
DEMO11-3 在角色蓝图中添加萤火技能
- 在角色蓝图中,将 Components 选项卡中的 Mesh 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Anim Instance 节点 - 拖动 Return Value 蓝色端口 - 添加
Cast To <角色动画蓝图文件名>
(Cast To TutorialCharacter_AnimBP
)节点 - 将该节点连接至 Event BeginPlay 事件执行流之后
- 右键 Cast To TutorialCharacter_AnimBP 节点的 As Tutorial Character Anim BP 输出端口 - Promote to Variable - 命名为
Tutorial Character Anim BP
- 右键空白区域 - 添加 IA_Skill01 节点(Enhanced Action Events)
- 将 Tutorial Character Anim BP 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Is Casting Fireflies 节点 - 设置为 True
- 添加 Spawn System Attached 节点(Niagara)
- System Template 选择 NS_Fireflies
- 将 Components 选项卡中的 Mesh 拖到 Attach to Component 输入端口
- Attach Point Name 输入角色骨骼的名字(
hand_r
) - 勾选 Auto Destroy
- 用第 4 步的方法添加 Set Is Casting Fireflies 节点 - 设置为 False
- 添加 Delay 节点(Flow Control)至第 4 步的 Set Is Casting Fireflies 节点和第 5 步的 Spawn System Attached 节点之间,设置适当的延迟时间,使粒子效果等到动画播放到抬手的时候才出现
- 如下图所示连接节点
- 可以在两个 Delay 节点中间添加释放音效的节点
- Set Is Casting Fireflies = True 和 Set Is Casting Fireflies = False 节点之间的延迟时间应该比动画播放时间略短(TutorialCharacter_InteractQuick 动画的 Sequence Length 为 1.2 秒,总延迟时间为 0.6 + 0.5 = 1.1 秒;少 0.1 秒防止动画复位抽风)
- IA_Skill01 节点的其他执行流箭头在节点下拉菜单中
11.10 为角色添加第三个技能 —— 径向力
DEMO12 为角色添加击退技能
F - 释放径向力
DEMO12-0 创建 Input Action 输入操作 并更新 Input Mapping Context 输入映射上下文
按照 DEMO11-0 的方法创建 IA_Skill02
并更新 IMC_Player
文件,将输入操作绑定到 F 键
DEMO12-1 在动画状态机中创建一个新状态
参照 DEMO11-2 的方法
- 在状态机中创建一个新状态
CastRadialForce
,并将其与Idle/Run
状态双向连接 - 编辑
CastRadialForce
状态,添加动画序列 TutorialCharacter_CrouchIdle - 添加 Boolean 变量
IsCastingRadialForce
- 编辑
Idle/Run -> CastRadialForce
规则:
Get Is Casting Radial Force -- Can Enter Transition
- 编辑
CastRadialForce -> Idle/Run
规则:
Get Is Casting Radial Force -- NOT -- Can Enter Transition
- 编译保存
DEMO12-2 在角色蓝图中添加击退技能
- 注意:下面的步骤建立在 DEMO11-3 前两步 —— 实例化角色动画蓝图 的基础上
- 右键空白区域 - 添加 IA_Skill02 节点(Enhanced Action Events)
- 添加技能冷却时间功能(参照 DEMO9-3)
- 添加 Float 变量 CD_RadialForce
- 添加 Do Once 节点、Delay 节点
- 添加名为 RadialForce_CD_Finish 的 Custom Event 节点
- 添加径向力组件
- Components 选项卡 -
+ Add
- Radial Force - 选中 Radial Force - Details 选项卡 - Radial Force Component - Radius - 设置为 800.0:设置径向力的作用范围
- … - Details 选项卡 - Impulse - Impulse Strength - 设置为 1000.0:设置径向力冲量的强度
- … - Details 选项卡 - Force - Force Strength - 设置为 500000.0:设置径向力的大小
- … - Details 选项卡 - Activation - Auto Activate - 取消勾选:径向力通过按键触发
- Components 选项卡 -
- 从 Components 选项卡中将 Radial Force 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Active 节点 - 将 New Active 设置为 True
- 重复上一步,将 New Active 设置为 False
- 将 Tutorial Character Anim BP 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Is Casting Radial Force 节点 - 设置为 True
- 重复上一步,并设置为 False
- 添加 Play Sound 2D 节点 - 选择技能音效
- 添加 Spawn System at Location 节点(Niagara)
- System Template 选择技能特效
- 右键 Location - Split Struct Pin
- 添加 Get Actor Location 节点 - 右键 Return Value - Split Struct Pin
- 连接对应的坐标端口
- 在 Z 坐标中间添加 Subtract 节点,设置合适的值,使特效在角色脚下生成
- 添加 Radial Force CD Finish 节点(Call Function)
- 如图所示连接节点
DEMO12-3 在技能释放时添加摄像机抖动
- 在
Blueprint
文件夹中右键 - Blueprint Class - 展开 ALL CLASSES - 选中 LegacyCameraShake 旧版摄像机晃动 - Select - 命名为CameraShake_RadialForce
- 双击进入编辑界面 - Details 选项卡 - Oscillation ,设置下列参数的 Amplitude 振幅 和 Frequency 频率
- Rot Oscillation
- Pitch
- Yaw
- Row
- Loc Oscillation
- X
- Y
- Z
- FOV Oscillation
- Rot Oscillation
- Details 选项卡 - Oscillation - Oscillation Duration - 设置为 0.5:设置晃动持续时间
- 编译保存
- 在 DEMO12-2 编写的蓝图程序中,在 Spawn System at Location 节点和 Delay 节点之间添加 Start Legacy Camera Shake 节点
- 添加 Get Player Camera Manager 节点,将蓝色输出端口连接至 Player Camera Manager 端口
- Shake Class 选择第 1 步创建的 CameraShake_RadialForce
- 如图所示连接节点
11.11 为蓝图中的变量分类
- 在角色蓝图中 - My Blueprint 选项卡 - VARIABLES
- 选中变量 - Details 选项卡 - Variable - Category
- 将
Default
改为<一级类名>|<二级类名>
,如:- CD_SuperJump 变量的 Category:
Skill|SuperJump
- CD_RadialForce 变量的 Category:
Skill|RadialForce
- CD_SuperJump 变量的 Category:
12 场景编辑
12.0 阻挡体积(空气墙)
Place Actors 选项卡 - Volumes - Blocking Volume
12.1 角色掉落到地图外时返回地图
- Place Actors 选项卡 - 搜索 Target Point - 将 Target Point 拖到场景中角色传送的目标位置
- Outliner 选项卡 - 将 Target Point 重命名为
TP_Return
- 在
Blueprint
文件夹中右键 - Blueprint Class - 选择 Actor - 命名为BP_Return
- 双击进入编辑界面 - Components 选项卡 -
+ Add
- Box Collision - 选中 Box Collision - Details 选项卡 - Shape - Box Extent - 设置长、宽足以覆盖整个地图
- My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量
TargetPoint
- 类型设置为Object Types - Target Point - Object Reference
- 点击右边的眼睛 ,将其设置为公有变量 ,这样TargetPoint
变量可以在场景界面中设置 - 选中 Box Collision - Details 选项卡 - Events - On Component Begin Overlap -
+
- 拖动 On Component Begin Overlap 节点的 Other Actor 蓝色端口 - 添加 Cast To
BP_<角色名>Character
节点(该节点上面的流程箭头表示转换成功的执行流,下面的流程箭头表示转换失败的执行流) - 拖动 Cast To 节点的 As BP
<角色名>
Character 蓝色端口 - 添加 Set Actor Location 节点 - My Blueprint 选项卡 - VARIABLES - 将 TargetPoint 变量拖到 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Actor Location 节点 - 将 Return Value 连接至 Set Actor Location 节点的 New Location
- 连接方式如下图所示
- 编译保存
- 回到场景界面 - 选中
BP_Return
- Details 选项卡 - Default - Target Point - 选择TP_Return
(第 6 步在此处起作用)
12.2 在场景中创建旋转的风扇
通过使用 Scene 场景组件 将多个组件组合在一起
- 在
Blueprint
文件夹中右键 - Blueprint Class - 选择 Actor - 命名为BP_Fan
- Ctrl + Space 打开内容浏览器
- 将
SM_Kit_Wall_Diagonal
拖入 Components 选项卡,作为扇叶 - 将
SM_Collectible_Common
拖入 Components 选项卡,作为风扇的中心 - 以上资产在 虚幻学习工具包 中
- 将
- 调整静态网格体的位置和大小
- Components 选项卡 -
+ Add
- Scene - 命名为Fun
:添加场景组件 - 将风扇的静态网格体拖入场景组件中
- Event Graph 选项卡 - 右键空白区域 - 添加 Add Timeline… 节点 - 命名为
Rotation
- 双击
Rotation
节点进入编辑界面 + Track
- Add Float Track - 命名为Rotation
- 在 0 秒处添加值为 0.0 的关键帧,在 3 秒处添加值为 360.0 的关键帧,打开前三个按钮
- 从 Components 选项卡中将 Fun 场景组件拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Rotation 节点 - 右键 New Rotation 端口 - Split Struct Pin
- 将时间轴节点的 Rotation 端口连接至 Set Relative Rotation 节点的 New Rotation Y 端口
12.3 在场景中创建传送门
- 在
Blueprint
文件夹中右键 - Blueprint Class - 选择 Actor - 命名为BP_Portal
- Ctrl + Space 打开内容浏览器 - 将
SM_Kit_Wall_Diagonal
拖入 Components 选项卡(资产在 虚幻学习工具包 中) - Components 选项卡 -
+ Add
- Arrow - 调整方向指向传送门的前方 - Components 选项卡 -
+ Add
- Box Collision - 覆盖传送门的后方 - My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量
TargetPoint
- 类型设置为Object Types - Target Point - Object Reference
- 设置为公有变量 - Components 选项卡 - 右键 Box Collision - Add Event - On Component Begin Overlap
- 拖动 On Component Begin Overlap 节点的 Other Actor 蓝色端口 - 添加 Set Actor Location 节点
- 将 TargetPoint 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Actor Location 节点 - 将 Return Value 连接至 Set Actor Location 节点的 New Location
- 在场景中放置传送门,再放置一个 Target Point 目标点
- 选中传送门 - Details 选项卡 - Default - Target Point - 选择相应的 Target Point
12.4 使用鼠标与场景内物体交互
DEMO13 单击鼠标拉动杠杆
DEMO13-0 设置杠杆动画
- 在
Blueprint
文件夹中右键 - Blueprint Class - 选择 Actor - 命名为BP_Lever
- 将
SM_Player_Lever_Base
和SM_Player_Lever_Handle
拖入 Components 选项卡 - 在 Event Graph 中添加 Add Timeline… 节点 - 双击进入编辑界面 -
+ Track
- Add Float Track - 命名为alpha
- 在 0 秒处添加值为 0.0 的关键帧
- 在 0.5 秒处添加值为 1.0 的关键帧
- 添加关键帧的方法
+ Track
按钮右边 Length 改为 0.5- 添加 Lerp (Rotator) 节点 - 将 Timeline 节点的 Alpha 端口连接至 Lerp 节点的 Alpha 端口
- 设置 A 端口 X 为 50.0
- 设置 B 端口 X 为 -50.0
- 将 SM_Player_Lever_Handle 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Rotation 节点 - 将 New Rotation 端口连接至 Lerp 节点的 Return Value 端口
DEMO13-1 启用点击事件和触控事件
- 进入人物蓝图的 Event Graph 选项卡,找到 Event BeginPlay 事件执行流
- 拖动 Get Player Controller 节点的蓝色输出端口 - 添加 Set Enable Click Events 节点和 Set Enable Touch Events 节点 - 并设置为 True
DEMO13-2 为杠杆添加点击事件
- 回到
BP_Lever
- Components 选项卡 - 右键 SM_Player_Lever_Handle - Add Event - On Clicked - 添加 Flip Flop 节点(Flow Control)
- 如图所示连接节点,Flip Flop 节点控制每次鼠标点击的操作在 A B 执行流间切换
DEMO13-3 人物进入范围内才能点击杠杆
BP_Lever
- Components 选项卡 -+ Add
- Box Collision - 将合体碰撞器放在杠杆的前方- 为 Box Collision 添加 On Component Begin Overlap 事件和 On Component End Overlap 事件
- 添加 Gate 节点(Flow Control)
- 如图所示连接节点
DEMO14 使用杠杆控制门的开关
DEMO14-0 创建门和动画
- 在
Blueprint
文件夹中右键 - Blueprint Class - 选择 Actor - 命名为BP_Gate
- 将门的网格体拖入 Components 选项卡
- Event Graph 选项卡 - 右键空白区域 - 添加 Add Custom Event… 节点 - 命名为
Open
和Close
- 用同样的方法添加含有
(0.0, 0.0) -- (0.5, 1.0)
关键帧的时间轴节点 - 添加 Lerp 节点(Float)
- 将门网格体从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Location 节点
- 如图所示连接节点
DEMO14-1 在杠杆蓝图中编写控制门的程序
BP_Lever
文件 - My Blueprint 选项卡 - VARIABLES - 添加名为 Gate 的变量 - 设置类型为Object Types - BP Gate - Object Reference
- 设置为公有变量- 将 Gate 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Open 和 Close 节点(Call Function)
- 如图所示连接节点
DEMO14-2 在场景中指定杠杆要控制的门
选中场景中的杠杆 - Details 选项卡 - Default - Gate - 选择相应的门
DEMO15 使用鼠标点亮火焰
DEMO15-0 创建火焰台
- 在
Blueprint
文件夹中右键 - Blueprint Class - 选择 Actor - 命名为BP_Fireplace
- 将
SM_Button_A_Ring
拖入 Components 选项卡作为火焰台底座(资产在 虚幻学习工具包 中) - Components 选项卡 -
+ Add
- Particle System Component (根据需求选择Niagara 或 Cascade) - 选中粒子系统组件 - Details 选项卡 - Particles - Template - 选择火焰特效(P_ky_fireBall
) - Components 选项卡 - 拖动粒子系统组件附加到火焰台底座静态网格体上
- Components 选项卡 -
+ Add
- Point Light - 选中点光源 - Details 选项卡 - Light - 调整 Intensity 和 Light Color:点光源组件点亮周围,粒子特效自身不会点亮周围 - Components 选项卡 - 拖动点光源组件附加到粒子系统组件上
- Components 选项卡 -
+ Add
- Capsule Collision - 调整大小和位置,使其覆盖火焰台:使用胶囊触发器指定鼠标点击的有效区域 - Components 选项卡 - 拖动胶囊触发器附加到火焰台底座静态网格体上
DEMO15-1 为火焰台编写蓝图程序
- Components 选项卡 - 右键 Capsule Collision - Add Event - Add OnClicked
- Components 选项卡 - 选中 Particle System - Details 选项卡 - Rendering - 取消勾选 Visible
- Components 选项卡 - 选中 Point Light - Details 选项卡 - Rendering - 取消勾选 Visible
- Components 选项卡 - 选中 Capsule Collision - Details 选项卡 - Collision - Collision Presets - 选择 OverlapOnlyPawn:只有角色可以穿过胶囊,包括鼠标的其他物体不可以穿过,这样设置可以防止鼠标点击穿过胶囊触发器
- 将 Particle System 从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Visibility 节点 - New Visibility 设置为 True 并且 Propagate to Children 设置为 True
- 添加 Play Sound 2D 节点 - 添加点燃音效
- 添加 Flip Flop 节点实现点亮和熄灭的切换
- 如图所示连接节点
12.5 子蓝图类(蓝图类的继承)
DEMO16 使杠杆能够控制除了门以外的其他物体
DEMO14 中的杠杆只能控制 BP_Gate
对象。现在要使用继承特性,使杠杆能够控制除了门以外的其他物体。
- 右键 DEMO14-1 中做好的杠杆
BP_Lever
- Create Child Blueprint Class - 命名为BP_Lever_Gate
- 重复上一步,命名为
BP_Lever_Fireplace
- 编辑父蓝图
BP_Lever
- 编辑子蓝图
BP_Lever_Gate
- 打开子蓝图类
BP_Lever_Gate
- My Blueprint 选项卡 - VARIABLES - 添加名为 Gate 的变量 - 设置类型为Object Types - BP Gate - Object Reference
- 设置为公有变量 - 将 Gate 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Open 和 Close 节点(Call Function)
- My Blueprint 选项卡 - FUNCTIONS - 点击
+
左侧的 override 下拉菜单 - 选择 Open 和 Close:对父蓝图BP_Lever
中的 Open 和 Close 事件进行重载 - 如图所示连接节点
- 打开子蓝图类
- 重写火焰台程序
BP_Fireplace
- 编辑子蓝图
BP_Lever_Fireplace
- 打开子蓝图类
BP_Lever_Fireplace
- My Blueprint 选项卡 - VARIABLES - 添加名为 Fireplace 的变量 - 设置类型为Object Types - BP Fireplace - Object Reference
- 设置为公有变量 - 将 Fireplace 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 On 和 Off 节点(Call Function)
- My Blueprint 选项卡 - FUNCTIONS - 点击
+
左侧的 override 下拉菜单 - 选择 Open 和 Close:对父蓝图BP_Lever
中的 Open 和 Close 事件进行重载 - 如图所示连接节点
- 打开子蓝图类
- 将原来控制门的杠杆
BP_Lever
替换为子蓝图杠杆BP_Lever_Gate
- 在内容浏览器中选中
BP_Lever_Gate
- 右键场景 或 Outliner 选项卡中的
BP_Lever
- Replace Selected Actors with - 勾选 Copy Properties - 选择 SELECTION 中的BP_Lever_Gate
- 重新命名
- Details 选项卡 - Default - Gate - 选择相应的门
- 在内容浏览器中选中
12.6 数组及其遍历
DEMO17 使用一个杠杆控制多个火焰台
- 按 Ctrl 选中场景中的多个火焰台 - Details 选项卡 - Actor - Advanced - Tags -
+
- 添加名为 Fireplace_Island_B 的标签 - 进入
BP_Lever_Fireplace
的 Event Graph 选项卡 - My Blueprint 选项卡 - VARIABLES - 添加名为 Tag 的变量 - 设置类型为 Name - 设置为公有变量
- 删除 DEMO16 中创建的 Fireplace 变量
- 添加 Get All Actors Of Class with Tag 节点
- Actor Class 选择
BP_Fireplace
- 将 VARIABLES 中的 Tag 变量拖入 Tag 端口
- Actor Class 选择
- 拖动 Get All Actors Of Class with Tag 节点的 Out Actors - 添加 For Each Loop 节点
- 拖动 For Each Loop 节点的 Array Element - 添加 On 和 Off 节点(Call Function)
- 如图所示连接节点
- 选中场景中的杠杆 - Details 选项卡 - Default - Tag - 输入 Fireplace_Island_B
12.7 事件分发器
DEMO18 使用 BP_Lever
控制关卡全局事件的触发
DEMO18-0 创建事件分发器
- 在
BP_Lever
的 My Blueprint 选项卡中 - EVENT DISPATCHERS -+
- 命名为OnLeverActivated
和OnLeverDeactivated
- 拖动两个事件分发器到 Event Graph 选项卡 - 选择 Call
- 如图所示连接节点
执行过程为:当 Open/Close 通过 Flip Flop 节点被调用时,事件 Open/Close 从红色节点开始执行,执行流通过 Call 节点转移至关卡蓝图中 OnLeverActivated/OnLeverDeactivated 事件的执行流中
DEMO18-1 在关卡蓝图中添加事件分发器
- 将
BP_Lever
拖入关卡场景中 - 选中
BP_Lever
- 菜单栏 Actor - Add Event - OnLeverActivated:在关卡蓝图中添加了 On Lever Activated 事件 - 选中
BP_Lever
- 菜单栏 Actor - Add Event - OnLeverDeactivated:在关卡蓝图中添加了 On Lever Deactivated 事件
DEMO18-2 使用关卡蓝图中的事件分发器控制屋顶起飞
- 选中屋顶的全部网格体 - Details 选项卡 - Actor - Advanced - Tags -
+
- 添加名为 Roof 的标签 - 选中屋顶的全部网格体 - Details 选项卡 - Transform - Mobility - 改为 Movable
- 参照 DEMO17 添加 Get All Actors Of Class with Tag 节点和 For Each Loop 节点 - 将 Tag 改为 Roof
- 添加 Get Actor Location 节点、Set Actor Location 节点和 Add 节点
- 如图所示连接节点
每次循环获得 Actor 的位置,将 Z 轴坐标 +/- 500 后设置为该 Actor 的新位置
12.8 创建按指定路径移动的物体
DEMO19 创建按指定路径漂浮的岛
- 在
Blueprint
文件夹中右键 - Blueprint Class - 选择 Actor - 命名为BP_FloatingIsland
- 将
SM_FloatingIsland_M
静态网格体从内容浏览器拖入 Components 选项卡 - Components 选项卡 -
+ Add
- Spline 样条曲线 - 选中 Spline - Details 选项卡 - Variable - 勾选 Editable when Inherited
- 将
BP_FloatingIsland
拖入场景中,编辑白色的样条曲线设置运动轨迹- 编辑方法与钢笔工具相同
- 添加锚点:右键样条曲线 - Add Spline Point Here 或者 选中最后一个锚点按住 Alt 拖动
- 进入
BP_FloatingIsland
的 Event Graph 选项卡 - 添加 Add Timeline… 节点 - 命名为
Floating
- 创建(0, 0) -- (10, 1) -- (20, 0)
关键帧 - 勾选 Use Last Keyframe 、AutoPlay 、Loop - 修改 Length 为 20(有关 Timeline 的编辑不再赘述) - 将
Spline
从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Spline Length 节点、Get Location at Distance Along Spline 节点 - 添加 Multiply 节点
- 将
SM_FloatingIsland_M
从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Location 节点 - 如图所示连接节点
- Get Location at Distance Along Spline 节点的作用是获得样条曲线上指定距离的空间位置坐标
12.9 关卡切换
- 复制 12.3 中完成的传送门
BP_Portal
,将其重命名为BP_LevelSwitch
- 进入
BP_LevelSwitch
的 Event Graph 选项卡,删除 On Component Begin Overlap 以外的全部节点 - 拖动 On Component Begin Overlap 节点的 Other Actor 蓝色端口 - 添加 Cast To
BP_<角色名>Character
节点 - 添加 Open Level (by Name) 节点 - Level Name 设置为要切换到的关卡名(区分大小写)
- 如图所示连接节点
12.10 关卡流送
- 菜单栏 Window - Levels
- Levels 选项卡 - 点击左上角
Levels
下拉菜单 - Create New… - 选择 Empty Level - Create - 保存至Maps
文件夹 - 命名为TutorialMap_East
- Save - Levels 选项卡 - 双击激活
TutorialMap_East
关卡 - 激活子关卡后搭建新场景,搭建完成后双击 Persistent Level 激活父关卡
- 在父关卡中 - Place Actors 选项卡 - Volumes - Level Streaming Volume 关卡流送体积 - 将其拖入场景中
- 选中关卡流送体积 - Details 选项卡 - Brush Settings - 调整大小和位置使其覆盖到一半父关卡和全部子关卡
- Levels 选项卡 - 激活子关卡 - 点击上方编辑详细信息按钮 - Level Streaming - Streaming Volumes - 点击右侧
+
- 展开下拉菜单 - 选择父关卡中创建的关卡流送体积 - … - Level Streaming - Is Static - 勾选
13 构造脚本
构造脚本就是面向对象编程中的构造函数
- 在
Blueprint
文件夹中右键 - Blueprint Class - 选择 Actor - 命名为BP_Fence
- 双击进入编辑界面 - My Blueprint 选项卡 - FUNCTIONS - 双击 Construction Script - 进入构造脚本编辑界面
- 右键空白区域 - 添加 Add Static Mesh Component 节点 - 拖动 Return Value 蓝色端口 - 添加 Set Static Mesh 节点 - New Mesh 选择
SM_Fence_Var02
(位于 Advanced Village Pack 中) - 如图所示连接节点
13.0 使用构造脚本创建一堆栅栏
- 在前文的基础上,右键空白区域 - 添加 For Loop 节点(Flow Control)- First Index 设为 0 - Last Index 设为 9
- 拖动 Add Static Mesh Component 节点的 Return Value 端口 - 添加 Set Simulate Physics 节点 - 勾选 Simulate
- 如图所示连接节点
- 将
BP_Fence
拖入场景中 - 开始运行关卡时,会在
BP_Fence
所在位置生成 10 个栅栏 - 添加 Random Unit Vector 节点 - 拖动 Return Value 端口 - 添加 Multiply 节点 - 右键第二个端口 - To Float (double-precision)
- 添加 Random Float in Range 节点 - Min 设为 100.0 - Max 设为 400.0
- 右键 Add Static Mesh Component 节点的 Relative Transform 端口 - Split Struct Pin
- 如图所示连接节点
- 现在栅栏会在随机位置生成
13.1 创建一排整齐的栅栏
- 将
BP_Fence
重命名为BP_FencesHeap
- 选中
BP_FencesHeap
- 按 Ctrl + D 复制蓝图 - 将复制的蓝图重命名为
BP_FencesRow
- 进入
BP_FencesRow
的 Construction Script 选项卡 - 删除 Random Unit Vector 节点、Random Float in Range 节点、Multiply 节点和 Set Simulate Physics 节点
- 拖动 For Loop 节点的 Index 端口 - 添加 Multiply 节点 - 第二个端口的值设置为 340
- 右键 Add Static Mesh Component 节点的 Relative Transform Location 端口 - Split Struct Pin
- 将 Multiply 节点的输出连接至 Add Static Mesh Component 节点的 Relative Transform Location X 端口
- 如图所示连接节点
- My Blueprint 选项卡 - VARIABLES - 添加名为 FenceNum 的变量 - 设置类型为 Integer - 设置为公有变量
- 将 FenceNum 变量拖动到 For Loop 节点的 Last Index 端口
- 现在可以在场景中选中
BP_FencesRow
- Details 选项卡 - Default - Fence Num 处设置栅栏的数量
13.2 创建一排样式不同的栅栏
- 选中
BP_FencesRow
- Ctr + D - 重命名为BP_VariedFencesRow
- 进入
BP_VariedFencesRow
的 Construction Script 选项卡 - My Blueprint 选项卡 - VARIABLES - 添加名为 VariedFences 的变量 - 设置类型为
Static Mesh - Object Reference
- 选中 VariedFences 变量 - Details 选项卡 - Variable - Variable Type - 点击第二个下拉菜单(蓝色) - 选择 Array
- 编译保存
- 选中 VariedFences 变量 - Details 选项卡 - Default Value - VariedFences - 点击四次
+
- 分别选择SM_Fence_Var01
、SM_Fence_Var02
、SM_Fence_Var03
和SM_Fence_Var04
(位于 Advanced Village Pack 中)- 也可以先添加一个,然后在右侧下拉菜单中选择 Duplicate ,然后选择第二个(选得更快)
- 将 VariedFences 变量拖动到 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get (a copy) 节点和 Length 节点
- 添加 Subtract 节点
- 添加 Random Integer in Range 节点 - Min 设为 0 - Max 连接至 Length 节点的输出端口减 1(否则数组越界)
- 如图所示连接节点
13.3 使用样条曲线构造石墙
- 在
Blueprint
文件夹中右键 - Blueprint Class - 选择 Actor - 命名为BP_StoneWall
- 双击进入编辑界面 - Components 选项卡 -
+ Add
- Spline(确保 Details 选项卡 - Variable - Editable when Inherited 已勾选) - My Blueprint 选项卡 - VARIABLES - 添加名为 StoneNum 的变量 - 设置类型为 Integer - 设置为公有变量
- … - VARIABLES - 添加名为 StoneMeshes 的变量 - 设置类型为
Static Mesh - Object Reference
- 选中 StoneMeshes 变量 - Details 选项卡 - Variable - Variable Type - 点击第二个下拉菜单(蓝色) - 选择 Array
- 编译保存
- Ctrl + Space 打开内容浏览器 - 搜索
SM_Stone_Big_Var
(位于 Advanced Village Pack 中) - 选中全部 - 拖入 StoneMeshes 变量的 Default Value - Stone Meshes 中(有蓝色高亮) - 参照 13.2 拖动 StoneNum 变量和 StoneMeshes 变量到 Event Graph 选项卡中;添加 For Loop 节点、Add Static Mesh Component 节点、Set Static Mesh 节点、Length 节点、Get 节点、Random Integer in Range 节点以及相应的运算符
- 右键 Add Static Mesh Component 节点的 Relative Transform 端口 - Split Struct Pin
- 将 Spline 从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Spline Length 节点和 Get Location at Distance Along Spline 节点
- 样条总长度 * (当前索引值 / 石头总数) = 石头所在位置的样条长度
- 按照上述逻辑连接节点
- 为石头添加随机旋转
- 同理也可以为 Relative Transform Scale 端口随机赋值
- 编译保存
- 将
BP_StoneWall
拖入场景中,先编辑好样条形状,然后在 Details 选项卡 - Default - Stone Num 处设置石头的数量