Post

UE5 学习笔记 1 - 入门篇

UE5 学习笔记 1 - 入门篇

参考视频: https://www.bilibili.com/video/BV1Za4y1s7ti

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 - 缩放物体

画面右上角设置拖动、旋转、缩放 grid 拖动、旋转、缩放对齐网格

0.3 快速定位目标

  1. 在镜头中定位目标:在右侧大纲中选择目标,按下 F 双击右侧大纲中的目标
  2. 在内容浏览器中定位目标:选择目标,按下 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 面板停靠到左侧:添加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 人物进入范围内显示文字,人物离开范围后切换文字

  1. 新建父类为 Actor 的蓝图
  2. Components 选项卡 - Add - Box Collision:添加碰撞体,检测是否有物体进入 Box 范围内
  3. Details 选项卡 - Transform/Shape:调整碰撞体的位置/大小
  4. Components 选项卡 - Add - Text Render:添加文字渲染器,显示初始文字
  5. Details 选项卡 - Text:调整文字内容
  6. Compile:左上角编译蓝图
  7. Save:左上角保存蓝图

在关卡中放置蓝图,蓝图的位置会显示文字

  1. 选中 Box Collision - Details 选项卡 - Events - On Component Begin Overlap 右键 Box Collision - Add Event - Add OnComponentBeginOverlap
  2. 将 Components 选项卡中的 TextRender 拖入 Event Graph 中
  3. 拖动 Text Render 蓝色节点 - Place a new node - Set Text
  4. 连接 On Component Begin Overlap 和 Set Text 的白色箭头(表示程序的执行方向)
  5. 右键 Set Text 的 value - Promote to Variable
  6. 编译(编译之后才能设置默认值)
  7. 选中 Value 节点 - Details 选项卡 - Default Value - Value:设置默认值
  8. 保存

现在人物进入 Box 范围内时,文字会变成 Value 的值

同理,设置 On Component End Overlap 事件后,当人物离开 Box 范围内时,文字会变成 Value 的值

DEMO2 人物接触球体后,球体会产生火焰

  1. 新建父类为 Actor 的蓝图
  2. Components 选项卡 - Add - Sphere:添加球体
  3. Details 选项卡 - Materials:选择材质
  4. Components 选项卡 - Add - Cascade Particle System Component:添加粒子系统
  5. Details 选项卡 - Particles - Template:选择粒子效果
  6. Details 选项卡 - Rendering - Visible - 取消勾选:初始状态不显示粒子效果
  7. 创建 Collision ,设置 On Component Begin Overlap 和 On Component End Overlap 事件,使用 Set Visibility 节点:设置粒子效果的可见性

3 玩家角色编辑

3.0 修改游戏模式

  1. Window 菜单 - 勾选 World Settings
  2. World Settings 选项卡 - Game Mode - GameMode Override:选择游戏模式
  3. 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 给玩家角色添加手电筒

  1. 选中角色 - Ctrl + E - Components 选项卡 - Add - Spot Light:添加聚光灯
  2. 调整聚光灯的位置、角度、亮度等参数

4 外部模型

4.0 导入模型

  1. Content Browser 选项卡 - Add - Import to /Game:导入模型
  2. 勾选 Build Nanite
  3. 勾选 Combine Meshes
  4. 点击 Import

4.1 设置模型碰撞

  1. 选中模型 - Ctrl + E - 左上角 Show 显示按钮 - 勾选 Simple Collision:显示模型碰撞体积
  2. Collision 下拉菜单 - Auto Convex Collision:自动生成碰撞体积
  3. 右下角 Convex Decomposition 选项卡设置参数(数值越大越精确) - 点击 Apply

5 地形

5.0 创建地形

  1. 左上角下拉菜单 模式选择菜单 从 Selection Mode 切换到 Landscape Mode Shift + 2
  2. 在 Landscape 选项卡中设置 Material 、Location 、Section Size 、Section Per Component 等参数
  3. 点击 Create

5.1 造山

Resolution 单位:米

  1. 进入 Landscape Mode
  2. 点击 Sculpt ,使用下面的工具编辑地形(默认升高,Shift 降低)

5.2 造海

  1. 在 Place Actors 选项卡中选择 Geometry - 拖动 Box 到场景中
  2. 选中 Box - Details 选项卡 - Brush Settings 设置 Box 长宽高
  3. … - Details 选项卡 - Transform 设置 Box 位置
  4. 通过上述两步操作,使 Box 能够覆盖地形中的海洋部分
  5. Details 选项卡 - Brush Settings - Advanced - Create Static Mesh:将 Box 转换为静态网格体
  6. 储存到 _<项目名>/Meshes 文件夹中,命名为 SM_Ocean
  7. 选中 SM_Ocean - Details 选项卡 - Materials - 选择一个 Ocean 材质

5.3 添加植被

  1. Shift + 3 - 进入 Foliage Mode 从左上角下拉菜单中选择
  2. 点击 +Foliage 按钮 Foliage按钮 将植被静态网格体添加到候选区域
  3. 勾选候选区域的植被,画笔中就会包含所选植被
  4. 使用画笔在地形中绘制(按 Shift 擦除植被)

设置植被密度:单选/多选候选区域中的植被 - 点亮 Details 按钮 Details按钮 - 下方 Painting - Density / 1Kuu - 调整数值

设置植被大小:… - Painting - Scale X - 调整模型的随机缩放范围

6 视觉效果

使用环境光照混合器:Window - Env. Light Mixer

Ctrl + L - 调整太阳光角度

6.0 指数级高度雾

  1. Place Actors 选项卡 - Visual Effects - Exponential Height Fog - 拖拽到场景中
  2. 选中 Exponential Height Fog - Details 选项卡 - Exponential Height Fog Component - Fog Density:设置雾的浓度
  3. … - Exponential Height Fog Component - Fog Height Falloff:设置雾的衰减速度
  4. … - Details 选项卡 - Volumetric Fog - Volumetric Fog:体积雾开关(影响光的散射)

6.1 体积光

体积光(丁达尔效应)的打开方法:

  1. 选中 Directional Light - Details 选项卡 - Light Shafts - Light Shaft Occlusion:光束遮挡开关
  2. … - Light Shafts - Occlusion Mask Darkness:光束遮挡强度

6.2 天光

  1. 选中 Sky Light - Details 选项卡 - Light - Intensity Scale:设置天光亮度

6.3 后期处理体积(后期盒)

进入后期处理体积的摄像机会应用后期处理体积的参数

  1. Place Actors 选项卡 - Visual Effects - Post Process Volume - 拖拽到场景中
  2. 选择 Post Process Volume - Details 选项卡 - Post Process Volume Settings - Infinite Extent (Unbound):全局作用域开关
  3. … - Details 选项卡 - Lens - Bloom - Intensity:调整光照强度
  4. … - Details 选项卡 - Exposure - Exposure Compensation:调整曝光补偿
  5. … - Details 选项卡 - Lens - Chromatic Aberration - Intensity:调整色差强度(中毒效果)
  6. … - Details 选项卡 - Lens - Dirt Mask:镜头污渍
  7. … - Details 选项卡 - Lens - Lens Flares - Intensity:镜头光晕强度
  8. … - Details 选项卡 - Lens - Image Effects - Vignette Intensity:镜头暗角强度
  9. … - Details 选项卡 - Color Grading:调色
    • Temperature 色温
    • Global 全局
    • Shadows 阴影
    • Midtones 中间色
    • Highlights 高光
    • Misc 杂项

7 粒子系统

DEMO4 创建悬浮发光微粒

  1. 创建 Niagara 发射器
    1. FXs 文件夹中 - 右键 - FX - Niagara Emitter
    2. New emitter - next
    3. 搜索 Hanging Particulates - 选中 - Finish
    4. 将文件命名为 NE_<文件名>
    5. 双击文件进入编辑界面
    6. Details 选项卡 - Emitter Properties - Emitter - Sim Target - 改为 GPUCompute Sim
    7. … - Emitter - Calculate Bounds Mode - 改为 Fixed
    8. Details 选项卡 - Emitter Update - Spawn Rate - SpawnRate:修改粒子数量
    9. Details 选项卡 - Particle Spawn - Shape Location - Shape - Box Size:修改粒子生成范围
    10. Details 选项卡 - Particle Spawn - Initialize Particle - Point Attributes - Color:修改粒子颜色( RGB 数值大于 1 时,粒子自发光;小于等于 1 时粒子反射光)
  2. 创建 Niagara 系统
    1. FXs 文件夹中 - 右键 - Niagara System
    2. New system from selected emitter(s) - next
    3. Asset Type Filtering - 选择 Parent Emitters - 选择刚才创建的 Niagara 发射器 - 点击右下角绿色加号 - Finish
    4. 将文件命名为 NS_<文件名> 并保存
  3. 将 Niagara 系统拖入场景中

注意:

  • 只有 Niagara 系统可以放入场景中,Niagara 发射器不可以
  • Niagara 发射器必须放在 Niagara 系统中才能生效
  • Niagara 系统中可以放多个 Niagara 发射器

8 声音

8.0 导入音频

Audio 文件夹中右键 - Import to … - 选择音频文件 - 命名为 AUDIO_<音频名>

8.1 声音设置

  1. 双击音频文件 - Details 选项卡 - Sound - Looping:循环播放开关
  2. 选中场景中的音频喇叭 - Details 选项卡 - Sound - Volume Multiplier:调整音量大小

p.s. G - 开关场景图标

8.2 设置声音距离衰减

  1. 选中场景中的音频喇叭 - Details 选项卡 - Attenuation - 勾选 Allow Spatialization:允许空间化
  2. … - Attenuation - 勾选 Override Attenuation
  3. … - Details 选项卡 - Attenuation (Volume) - Inner Radius:设置可以听到不衰减声音的半径
  4. … - Details 选项卡 - Attenuation (Volume) - Falloff Distance:设置声音衰减的半径

9 材质

9.0 创建材质

Materials 文件夹中右键 - Material - 命名为 M_<材质名>

9.1 导入纹理

Textures 文件夹中右键 - Import to … - 选择纹理图片 - 命名为 T_<纹理名>

9.2 编辑材质

  1. 双击材质文件进入编辑界面
  2. 右键想要设置的参数 - Promote to Parameter
  3. Details 选项卡 - Material - Blend Mode:设置混合模式
  4. 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 贴花材质

贴花材质类似于游戏中的喷漆,它不是覆盖模型整体,而是在模型的某个特定位置应用贴花

  1. 双击材质进入编辑界面
  2. Details 选项卡 - Material - Material Domain - Deferred Decal 延迟贴花
  3. … - Material - Blend Mode - Translucent
  4. 将 Texture Sample 节点的 A 通道连接至 Opacity :隐藏纹理白色背景

设置指定模型不接受贴花:选中目标模型 - Details 选项卡 - Rendering - Advanced - Receives Decals

蓝图模型不接受贴花:选中蓝图模型 - Ctrl + E - Components 选项卡 - 选中 Mesh - Details 选项卡 - Rendering - Advanced - Receives Decals

9.4 法线贴图的制作

  1. 用 Photoshop 打开纹理图
  2. 滤镜 - 3D - 生成法线图…

10 过场动画

10.0 添加过场动画

左上角过场动画按钮 过场动画按钮 - Add Level Sequence - 将过场动画序列保存到 Cinematics 文件夹中 - 命名为 SEQ_<过场动画名>

10.1 编辑序列

Space - 播放/暂停

Ctrl + 鼠标滚轮 - 缩放时间轴

轨道右侧的相机按钮 相机锁定(上锁) :将视角锁定到该相机(再点一次解锁 相机锁定(解锁)

  1. 在 Sequecer 选项卡中点击 创建相机按钮 创建相机
  2. Cine Camera Actor - CameraComponent - Current Focal Length:调整焦距
  3. 选中 Cine Camera Actor - 按 S:设置关键帧

10.2 多机位剪辑

  1. 点击 创建相机按钮 创建第二个相机
  2. 调整相应参数
  3. 设置关键帧
  4. 在 Camera Cuts 轨道点击 + - 选择第二个相机 - 在轨道中调整两个相机的时间轴
  5. 点击 Camera Cuts 轨道的摄像机图标
  6. Space 进行预览

10.3 场景内物体的动画

  1. 选中目标物体 - 按 S - 自动创建 InstanceFoliageActor 轨道,并创建关键帧
  2. 单击关键帧 - InstanceFoliageActor - Transform - 设置相应属性

10.4 场景内灯光的动画

  1. 在 Outliner 选项卡中将灯光拖入 Sequencer 选项卡中
  2. 选中 Light Source - 按 S - 自动创建 Transform 轨道,并创建关键帧
  3. 继续调节参数并创建关键帧

10.5 过场动画设置

  1. 在 Outliner 选项卡中选择过场动画 - Details 选项卡 - Playback - Auto Play:自动播放
  2. … - Playback - Play Rate:播放速度
  3. … - Playback - Start Offset:开始播放的时间

10.6 场景内人物的动画

10.6.0 录制人物动作

  1. Window - Cinematics - Take Recorder 镜头试拍录制器
  2. 在 Take Recorder 选项卡中 - +Source 按钮 - From Actor - 选择目标人物
  3. 运行场景
  4. 点击 Take Recorder 选项卡中的红色按钮开始录制
  5. 倒计时结束后开始录制
  6. 操控人物移动
  7. Shift + F1 释放鼠标
  8. 点击 Take Recorder 选项卡中的停止按钮结束录制 Esc 直接结束

录制结果储存在 /All/Game/Cinematics/Takes/ 文件夹中

10.6.1 将人物动作添加到过场动画中

  1. 双击过场动画序列打开 Sequencer 选项卡
  2. 将录制结果 Subscenes 文件夹中的序列文件拖入过场动画轨道中
  • 注意:拖入的文件一定位于 Subscenes 文件夹中

添加人物自带摄像机的镜头:在 Camera Cuts 轨道点击 + - 选择子序列 - 选择人物蓝图

10.7 改变序列某一部分的播放速度

  1. 在 Sequencer 选项卡中点击 +Track - Time Dilation Track 时间膨胀轨道
  2. 添加关键帧并调整播放速度

10.8 转场效果

  1. 在 Sequencer 选项卡中点击 +Track - Fade Track 渐变轨道
  2. 添加关键帧并调整参数( 1 - 全黑,0 - 全亮)

10.9 添加音频

  1. 在 Sequencer 选项卡中点击 +Track - Audio Track 音频轨道
  2. Audio - Pitch 音调
  3. Audio - Volume 音量

10.10 将过场动画导出为视频

  1. 在 Sequencer 选项卡左上角点击 渲染为视频
  2. 常用设置项
    • Image Output Format
    • Audio Output Format
    • Resolution
    • Output Directory
  3. 点击 Capture Movie

11 角色编辑再探(续 3 玩家角色编辑

  • 蓝图修改之后记得编译、保存

11.0 替换角色的骨骼网格体

  1. 将 Skeletal Mesh 骨骼网格体 和 Skeleton 骨骼 添加到 Characters/<角色名>/Meshes 文件夹中
  2. 右键 1 中添加的 Skeletal Mesh - Skeleton - Assign Skeleton - 选择 1 中添加的 Skeleton - Accept
  3. 双击目标角色的蓝图 选中角色按 Ctrl + E - Components 选项卡 - 选中 Mesh
  4. Details 选项卡 - Mesh - Skeletal Mesh Asset - 选择骨骼网格体
  5. 编译、保存

11.1 重定向角色的动画蓝图

源角色动画 -> 目标角色动画

参考视频: https://www.bilibili.com/video/BV1wZ4y117EG

  • 重定向 Animation Blueprint 动画蓝图 时,相关的 Animation Sequence 动画序列 也会一起重定向

11.1.0 创建 IK 绑定

  1. Characters/<目标角色名>/Rigs 文件夹中右键 - Animation - Retargeting - IK Rig IK 绑定 - 命名为 IK_<目标角色名>_Rig
  2. 双击文件 - Details 选项卡 - Preview Mesh - Preview Skeletal Mesh - 选择目标角色的 Skeletal Mesh - 保存
  3. 双击打开源角色的 IK Rig 文件
  4. 在目标角色的 Hierarchy 选项卡中 - 右键与源角色对应的 Retarget Root 骨骼 - Set Retarget Root
  5. 对比两个文件的 IK Retargeting 选项卡
  6. 在目标角色的 IK Retargeting 选项卡中 - + Add New Chain - 添加与源角色相同的 Chain Name - 按正确的顺序指定对应的 Start Bone 和 End Bone
    • 在 Hierarchy 选项卡中选中多个骨骼,再点击 + Add New Chain 效率更高
  7. 保存关闭

11.1.1 创建 IK 重定向器

  1. Characters/<目标角色名>/Rigs 文件夹中右键 - Animation - Retargeting - IK Retargeter IK 重定向器 - 命名为 IK_<目标角色名>_Retargeter
  2. 双击文件进入编辑器
  3. Details 选项卡 - Source - Source KIRig Asset - 选择源角色的 IK Rig
  4. … - Source - Source Preview Mesh - 选择正确的源角色网格体
  5. Details 选项卡 - Target - Target KIRig Asset - 选择目标角色的 IK Rig
  6. … - Target - Target Preview Mesh - 选择正确的目标角色网格体
  7. Details 选项卡 - Preview Settings - 调节 Target Mesh Offset 和 Target Mesh Scale 使目标角色的模型与源角色的模型重合
  8. 在右下角 Asset Browser 中双击 Animation Sequence (绿色文件)可以预览动作(窗口左上角 调节速率按钮 可以调节播放速率)
  9. 左上角模式切换按钮 模式切换按钮
    • Run Retargeter 动作预览模式 :用于预览动作动画
    • Edit Retarget Pose 编辑目标角色的姿势:用于调整目标角色的姿势,使其与源角色的姿势一致(需要先在左侧选中骨骼,然后在窗口中进行调整)
    • Show Retarget Pose 显示目标角色的姿势
  10. 使用 Edit Retarget Pose 模式调整目标角色的姿势与源角色一致
  11. 使用 Run Retargeter 模式预览动作
  12. 保存关闭

11.1.2 重定向动画蓝图

  1. Characters/<目标角色名> 文件夹中新建 Animations 文件夹
  2. 右键源角色的 Animation Blueprint 动画蓝图 - Retarget Animation Assets - Duplicate and Retarget Animation Assets/Blueprints
  3. IK Retargeter 选择 11.1.1 中创建的 IK 重定向器 IK_<目标角色名>_Retargeter
  4. Folder - Change … - 选择 Characters/<目标角色名>/Animations 文件夹
  5. Rename New Assets 根据需要设定重命名规则
  6. 勾选 Remap Referenced Assets
  7. 点击 Retarget

11.1.3 应用重定向的动画蓝图

  1. 双击目标角色的蓝图 选中角色按 Ctrl + E - Components 选项卡 - 选中 Mesh
  2. Details 选项卡 - Animation - Anim Class - 选择重定向生成的动画蓝图
  3. 编译保存

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 人物出生时打印字符串

  1. 拖动 Event BeginPlay 节点的白色箭头至空白区域
  2. 搜索 Print String 并添加节点
  3. 节点下拉菜单中可以进一步设置属性
    • In String:设置要打印的字符串
    • Print to Screen:是否在屏幕上打印
    • Print to Log:是否在日志中打印
    • Text Color:打印字符串的颜色
    • Duration:打印持续时间

DEMO6 在事件发生时显示鼠标指针

  1. 在 Event Graph 选项卡空白处右键 - 取消勾选右上角 Context Sensitive 情景关联 - 搜索 Set Show Mouse Cursor - 添加节点
  2. 勾选 Context Sensitive - 搜索 Get Player Controller (带有 Player Index 属性) - 添加节点
  3. 将 Get Player Controller 节点的 Return Value 连接至 Set Show Mouse Cursor 节点的 Target
  4. 连接白色执行流至事件节点后

11.3 帧生成事件

Event Tick 事件节点在每帧生成后触发,并用 Delta Seconds 输出帧生成时间

DEMO7 记录人物存活时间

  1. 进入人物蓝图 - Event Graph 选项卡
  2. My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量 LifeSeconds - 类型设置为 Float
  3. 将变量拖动到 Event Graph 选项卡中
    • Get <变量名> :获取变量的值
    • Set <变量名> :设置变量的值
  4. 添加 Add 节点(Utilities - Operators)
  5. Float 转 String 的节点是自动添加的

输出人物存活时间

11.4 鼠标输入事件

DEMO8 鼠标滚轮控制相机距离

  1. 进入人物蓝图 - Event Graph 选项卡
  2. 添加 Mouse Wheel Axis 节点:获得鼠标滚轮的滚动量
  3. 从 Components 选项卡中将 CameraBoom 拖入 Event Graph 选项卡中
  4. 拖动 Camera Boom 的蓝色输出端口 - 添加 Set Target Arm Length 节点
  5. 拖动 Camera Boom 的蓝色输出端口 - 添加 Get Target Arm Length 节点
  6. 逻辑:Axis Value * 系数 + Target Arm Length = Target Arm Length
  7. 添加 Clamp (Float) 节点:限制相机距离的最大值和最小值

滚轮调整相机距离

11.5 设置按键映射

DEMO9 为角色添加超级跳技能

Shift + Space - 超级跳

DEMO9-0 创建 Input Action 输入操作 和 Input Mapping Context 输入映射上下文
  1. Input 文件夹中新建 Actions 文件夹
  2. Actions 文件夹中右键 - Input - Input Action - 命名为 IA_<动作名>IA_Walk
  3. 不进行任何修改 - 保存
  4. Actions 文件夹中右键 - Input - Input Action - 命名为 IA_<动作名>IA_SuperJump
  5. 双击文件进入编辑界面 - Details 选项卡 - Action - Triggers - +
  6. Index[0] - Chorded Action 弦操作
  7. 点击 Index[0] 左侧下拉菜单 - Chord Action - 选择 IA_Walk
  8. 保存关闭
  9. Input 文件夹中右键 - Input - Input Mapping Context - 命名为 IMC_<文件名>IMC_Player
  10. 双击文件进入编辑界面 - Details 选项卡 - Mappings - Mappings - +
  11. 选择 IA_Walk - 下拉菜单 - 点击键盘 - 按 Shift
  12. … - Mappings - +
  13. 选择 IA_SuperJump - 下拉菜单 - 点击键盘 - 按 Space
  14. 保存关闭
  • Triggers 设定的 Chorded Action 弦操作 也可以在 Input Mapping Context 中设定,二选一即可
DEMO9-1 在角色蓝图中添加映射上下文
  1. 在角色蓝图中添加 Add Mapping Context 节点(关闭 Context Sensitive)
  2. 将白色执行流箭头连接至 Event BeginPlay 执行流之后
  3. Target 连接至 Enhanced Input Local Player Subsystem 节点的输出端口
  4. Mapping Context 选择上一步创建的 Input Mapping Context 文件

添加映射上下文

DEMO9-2 设置动作节点触发的程序
  1. 添加 IA_SuperJump 节点(Enhanced Action Events) - 展开下拉菜单
  2. 添加 Jump 和 Stop Jumping 节点
  3. 将 Components 选项卡中的 Character Movement 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Jump Z Velocity 节点
  4. 按下图所示逻辑连接节点

超级跳

DEMO9-3 为超级跳添加冷却时间
  1. 添加 Do Once 节点、Delay 节点
  2. 添加 Add Custom Event… 节点 - 命名为 SuperJump_CD_Finish
  3. 添加 Super Jump CD Finish 节点(Call Function)
  4. My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量 CD_SuperJump - 类型设置为 Float
  5. 将 CD_SuperJump 拖入 Event Graph 选项卡中 - Get CD_SuperJump
  6. 按下图所示逻辑连接节点 超级跳冷却
  7. 编译 - 选中 CD_SuperJump 变量 - Details 选项卡 - Default Value:设置冷却时间
  8. 编译保存
DEMO9-4 为超级跳添加音效
  1. 添加 Play Sound 2D 节点 - Sound 选择执行音频文件
  2. 将节点连接至 Jump 节点之后

跳跃音效

DEMO9-5 为超级跳添加特效
  1. 添加 Spawn Emitter Attached 节点 - Emitter Template 选择粒子发射器
  2. 将 Components 选项卡中的 Mesh 拖入 Event Graph 选项卡中 - 将蓝色输出端口与 Spawn Emitter Attached 节点的 Attach to Component 连接

跳跃特效

  • 为解决延迟问题,把音效和特效节点移动到跳跃节点之前执行
DEMO9-6 超级跳总览

超级跳总览

11.6 设置角色多段跳

角色蓝图 - Components 选项卡 - 选中最顶层的 Self - Details 选项卡 - Character - Jump Max Count

11.7 创建可以拾取的物品

DEMO10 拾取物品后角色解锁二段跳

  1. Blueprint 文件夹中右键 - Blueprint Class - Actor - 命名为 BP_<物品名>
  2. 进入蓝图编辑页面 - Components 选项卡 - + Add 按钮 - Static Mesh
  3. 选中 Static Mesh - + Add - Sphere Collision
  4. 将 Sphere Collision 与 Static Mesh 重合
  5. 选中 Static Mesh - Details 选项卡 - Static Mesh - Static Mesh - 选择物品模型
  6. 选中 Sphere Collision - Details 选项卡 - Events - On Component Begin Overlap - +
  7. 在蓝图中添加 Get Player Character 节点 - 拖动蓝色输出端口 - 添加 Set Jump Max Count 节点
  8. 添加 Destroy Actor 节点
  9. 如下图所示连接节点

拾取物品

  • 如果想添加音效/特效,就在 Destroy Actor 节点之前添加

11.8 为物品添加漂浮效果

  1. 在物品蓝图中添加 Add Timeline… 节点 - 命名为 Timeline_Floating
  2. 双击时间轴节点进入编辑界面
  3. + Track - Add Float Track - 命名为 alpha
  4. 在轨道上右键 - Add key to - 添加三个关键帧,并设置:
    • 第 0 秒的值为 0.0
    • 第 1 秒的值为 1.0
    • 第 2 秒的值为 0.0
  5. 打开前三个按钮 时间轴设置
    • Use Last Keyframe 使用最后一个关键帧
    • AutoPlay 自动播放
    • Loop 循环
  6. 从 Components 选项卡中将 Static Mesh 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Location 节点
  7. 添加 Lerp (Vector) 节点 - 设置插值范围 A 和 B
  8. 如下图所示连接节点

漂浮效果

11.9 给人物添加第二个技能 —— 释放粒子(第一个技能

DEMO11 为角色添加照明技能

Q - 释放萤火

DEMO11-0 创建 Input Action 输入操作 并更新 Input Mapping Context 输入映射上下文
  1. Input/Actions 文件夹中右键 - Input - Input Action - 命名为 IA_<动作名>IA_Skill01
  2. 不进行任何修改 - 保存
  3. 双击 Input 文件夹中的 IMC_Player 文件 - Details 选项卡 - Mappings - Mappings - +
  4. 选择 IA_Skill01 - 下拉菜单 - 点击键盘 - 按 Q
  5. 保存关闭
DEMO11-1 创建萤火粒子特效
  1. FXs 文件夹中右键 - Niagara System
  2. New system from selected emitter(s) - next
  3. Asset Type Filtering - 选择 Templates - 搜索 Omnidirectional Burst (Niagara 自带资产)并选择 - 点击右下角绿色加号 - Finish
  4. 将文件命名为 NS_<文件名> 并保存(NS_Fireflies
  5. 双击文件进入编辑界面 - 取消勾选节点中的 Gravity Force:粒子不受重力影响
  6. 选中节点中的 Add Velocity From Point - Details 选项卡 - Add Velocity - Velocity Speed - Minimum/Maximum - 设置为 50/100:设置粒子扩散范围
  7. 点击节点中的 Initialize Particle - Details 选项卡 - Initialize Particle - Point Attributes - Lifetime Mode - 设置为 Direct Set:粒子持续时间固定
  8. … - Point Attributes - Lifetime - 设置为 10.0:粒子持续时间为 10 秒
  9. … - Initialize Particle - Sprite Attributes - Sprite Size Mode - 设置为 Random Uniform:粒子大小服从均匀分布
  10. … - Sprite Attributes - Uniform Sprite Size Min/Max - 设置为 0.5/1.0:设置粒子大小
  11. 点击节点中 Particle Update 右侧的 + - 添加 Curl Noise Force 条目
  12. 选中 Curl Noise Force - Details 选项卡 - Curl Noise Force - Noise Strength - 设置为 200.0:设置粒子做不规则运动的强度
  13. 将节点中 Drag 条目拖动到 Curl Noise Force 条目下方
  14. 选中节点中的 Drag - Details 选项卡 - Drag - Drag - 设置为 2.0:设置粒子阻力,减慢不规则运动的速度
  15. 选中节点中的 Scale Color - Details 选项卡 - Scale Color - Scale RGB - 设置 RGB 的值大于 1 :使粒子自发光
  16. 点击节点中 Render 右侧的 + - 添加 Light Renderer 条目
  17. 选中 Light Renderer - Details 选项卡 - Light Renderer - Light Rendering - Radius Scale - 设置为 200.0:设置粒子光照范围
  18. … - Light Rendering - Color Add - RGB:设置光照颜色(大于 1 自发光)
DEMO11-2 在角色动画蓝图中创建动画状态机
  1. 在角色蓝图中 - Components 选项卡选中最顶层 Self - Details 选项卡 - Mesh - Skeletal Mesh Asset - 双击右侧的骨骼网格体
  2. 右上角的四个按钮 四个按钮 分别对应与角色蓝图绑定的 骨骼骨骼网格体动画序列动画蓝图 编辑窗口
  3. 点击第四个按钮进入动画蓝图编辑界面
  4. 左下角 My Blueprint 选项卡 - ANIMATION GRAPHS - AnimGraph - 双击 Default 进入动画状态机编辑界面
  5. 右键空白区域 - Add State - 命名为 CastFireflies
  6. Idle/Run 状态拖拽箭头指向 CastFireflies 状态
  7. CastFireflies 状态拖拽箭头指向 Idle/Run 状态(aka. 创建双向箭头)
  8. 编辑 CastFireflies 状态:
    1. 双击 CastFireflies 状态
    2. 右键空白区域 - 搜索 <动画序列名字> - 添加 Play '<动画序列名字>' 节点(Play TutorialCharacter_InteractQuick)
    3. 将两个节点连在一起
      状态
  9. My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量 IsCastingFireflies - 类型设置为 Boolean
  10. 编辑 Idle/Run -> CastFireflies 规则:
    1. 双击 Idle/Run -> CastFireflies 箭头
    2. 右键空白区域 - 添加 Get Is Casting Fireflies 节点
    3. 将两个节点连在一起
      规则1
  11. 编辑 CastFireflies -> Idle/Run 规则:
    1. 双击 CastFireflies -> Idle/Run 箭头
    2. 右键空白区域 - 添加 Get Is Casting Fireflies 节点
    3. 添加 NOT Boolean 节点
    4. 如图所示连接节点
      规则2
  12. 编译保存
DEMO11-3 在角色蓝图中添加萤火技能
  1. 在角色蓝图中,将 Components 选项卡中的 Mesh 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Anim Instance 节点 - 拖动 Return Value 蓝色端口 - 添加 Cast To <角色动画蓝图文件名>Cast To TutorialCharacter_AnimBP)节点 - 将该节点连接至 Event BeginPlay 事件执行流之后
    实例化动画蓝图
  2. 右键 Cast To TutorialCharacter_AnimBP 节点的 As Tutorial Character Anim BP 输出端口 - Promote to Variable - 命名为 Tutorial Character Anim BP
    • 在 My Blueprint 选项卡 - VARIABLES 中可以命名该变量
    • 选中 SET 节点 - Details 选项卡 - Variable - Variable Name 也可以命名该变量
      获取动画蓝图变量
  3. 右键空白区域 - 添加 IA_Skill01 节点(Enhanced Action Events)
  4. 将 Tutorial Character Anim BP 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Is Casting Fireflies 节点 - 设置为 True
  5. 添加 Spawn System Attached 节点(Niagara)
    1. System Template 选择 NS_Fireflies
    2. 将 Components 选项卡中的 Mesh 拖到 Attach to Component 输入端口
    3. Attach Point Name 输入角色骨骼的名字(hand_r
    4. 勾选 Auto Destroy
  6. 用第 4 步的方法添加 Set Is Casting Fireflies 节点 - 设置为 False
  7. 添加 Delay 节点(Flow Control)至第 4 步的 Set Is Casting Fireflies 节点和第 5 步的 Spawn System Attached 节点之间,设置适当的延迟时间,使粒子效果等到动画播放到抬手的时候才出现
  8. 如下图所示连接节点
    萤火技能
  • 可以在两个 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 的方法

  1. 在状态机中创建一个新状态 CastRadialForce ,并将其与 Idle/Run 状态双向连接
  2. 编辑 CastRadialForce 状态,添加动画序列 TutorialCharacter_CrouchIdle
  3. 添加 Boolean 变量 IsCastingRadialForce
  4. 编辑 Idle/Run -> CastRadialForce 规则:
    Get Is Casting Radial Force -- Can Enter Transition
  5. 编辑 CastRadialForce -> Idle/Run 规则:
    Get Is Casting Radial Force -- NOT -- Can Enter Transition
  6. 编译保存
DEMO12-2 在角色蓝图中添加击退技能
  • 注意:下面的步骤建立在 DEMO11-3 前两步 —— 实例化角色动画蓝图 的基础上
  1. 右键空白区域 - 添加 IA_Skill02 节点(Enhanced Action Events)
  2. 添加技能冷却时间功能(参照 DEMO9-3
    1. 添加 Float 变量 CD_RadialForce
    2. 添加 Do Once 节点、Delay 节点
    3. 添加名为 RadialForce_CD_Finish 的 Custom Event 节点
  3. 添加径向力组件
    1. Components 选项卡 - + Add - Radial Force
    2. 选中 Radial Force - Details 选项卡 - Radial Force Component - Radius - 设置为 800.0:设置径向力的作用范围
    3. … - Details 选项卡 - Impulse - Impulse Strength - 设置为 1000.0:设置径向力冲量的强度
    4. … - Details 选项卡 - Force - Force Strength - 设置为 500000.0:设置径向力的大小
    5. … - Details 选项卡 - Activation - Auto Activate - 取消勾选:径向力通过按键触发
  4. 从 Components 选项卡中将 Radial Force 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Active 节点 - 将 New Active 设置为 True
  5. 重复上一步,将 New Active 设置为 False
  6. 将 Tutorial Character Anim BP 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Is Casting Radial Force 节点 - 设置为 True
  7. 重复上一步,并设置为 False
  8. 添加 Play Sound 2D 节点 - 选择技能音效
  9. 添加 Spawn System at Location 节点(Niagara)
    1. System Template 选择技能特效
    2. 右键 Location - Split Struct Pin
    3. 添加 Get Actor Location 节点 - 右键 Return Value - Split Struct Pin
    4. 连接对应的坐标端口
    5. 在 Z 坐标中间添加 Subtract 节点,设置合适的值,使特效在角色脚下生成
  10. 添加 Radial Force CD Finish 节点(Call Function)
  11. 如图所示连接节点
    径向力1
    径向力2
DEMO12-3 在技能释放时添加摄像机抖动
  1. Blueprint 文件夹中右键 - Blueprint Class - 展开 ALL CLASSES - 选中 LegacyCameraShake 旧版摄像机晃动 - Select - 命名为 CameraShake_RadialForce
  2. 双击进入编辑界面 - Details 选项卡 - Oscillation ,设置下列参数的 Amplitude 振幅 和 Frequency 频率
    • Rot Oscillation
      • Pitch
      • Yaw
      • Row
    • Loc Oscillation
      • X
      • Y
      • Z
    • FOV Oscillation
  3. Details 选项卡 - Oscillation - Oscillation Duration - 设置为 0.5:设置晃动持续时间
  4. 编译保存
  5. DEMO12-2 编写的蓝图程序中,在 Spawn System at Location 节点和 Delay 节点之间添加 Start Legacy Camera Shake 节点
    1. 添加 Get Player Camera Manager 节点,将蓝色输出端口连接至 Player Camera Manager 端口
    2. Shake Class 选择第 1 步创建的 CameraShake_RadialForce
  6. 如图所示连接节点
    摄像机晃动

11.11 为蓝图中的变量分类

  1. 在角色蓝图中 - My Blueprint 选项卡 - VARIABLES
  2. 选中变量 - Details 选项卡 - Variable - Category
  3. Default 改为 <一级类名>|<二级类名>,如:
    1. CD_SuperJump 变量的 Category: Skill|SuperJump
    2. CD_RadialForce 变量的 Category: Skill|RadialForce

12 场景编辑

12.0 阻挡体积(空气墙)

Place Actors 选项卡 - Volumes - Blocking Volume

12.1 角色掉落到地图外时返回地图

  1. Place Actors 选项卡 - 搜索 Target Point - 将 Target Point 拖到场景中角色传送的目标位置
  2. Outliner 选项卡 - 将 Target Point 重命名为 TP_Return
  3. Blueprint 文件夹中右键 - Blueprint Class - 选择 Actor - 命名为 BP_Return
  4. 双击进入编辑界面 - Components 选项卡 - + Add - Box Collision
  5. 选中 Box Collision - Details 选项卡 - Shape - Box Extent - 设置长、宽足以覆盖整个地图
  6. My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量 TargetPoint - 类型设置为 Object Types - Target Point - Object Reference - 点击右边的眼睛 闭眼私有变量 ,将其设置为公有变量 睁眼公有变量 ,这样 TargetPoint 变量可以在场景界面中设置
  7. 选中 Box Collision - Details 选项卡 - Events - On Component Begin Overlap - +
  8. 拖动 On Component Begin Overlap 节点的 Other Actor 蓝色端口 - 添加 Cast To BP_<角色名>Character 节点(该节点上面的流程箭头表示转换成功的执行流,下面的流程箭头表示转换失败的执行流)
  9. 拖动 Cast To 节点的 As BP <角色名> Character 蓝色端口 - 添加 Set Actor Location 节点
  10. My Blueprint 选项卡 - VARIABLES - 将 TargetPoint 变量拖到 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Actor Location 节点 - 将 Return Value 连接至 Set Actor Location 节点的 New Location
  11. 连接方式如下图所示
    掉落传送
  12. 编译保存
  13. 回到场景界面 - 选中 BP_Return - Details 选项卡 - Default - Target Point - 选择 TP_Return (第 6 步在此处起作用)

12.2 在场景中创建旋转的风扇

通过使用 Scene 场景组件 将多个组件组合在一起

  1. Blueprint 文件夹中右键 - Blueprint Class - 选择 Actor - 命名为 BP_Fan
  2. Ctrl + Space 打开内容浏览器
    • SM_Kit_Wall_Diagonal 拖入 Components 选项卡,作为扇叶
    • SM_Collectible_Common 拖入 Components 选项卡,作为风扇的中心
    • 以上资产在 虚幻学习工具包
  3. 调整静态网格体的位置和大小
  4. Components 选项卡 - + Add - Scene - 命名为 Fun :添加场景组件
  5. 将风扇的静态网格体拖入场景组件中
  6. Event Graph 选项卡 - 右键空白区域 - 添加 Add Timeline… 节点 - 命名为 Rotation
  7. 双击 Rotation 节点进入编辑界面
  8. + Track - Add Float Track - 命名为 Rotation
  9. 在 0 秒处添加值为 0.0 的关键帧,在 3 秒处添加值为 360.0 的关键帧,打开前三个按钮
  10. 从 Components 选项卡中将 Fun 场景组件拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Rotation 节点 - 右键 New Rotation 端口 - Split Struct Pin
  11. 将时间轴节点的 Rotation 端口连接至 Set Relative Rotation 节点的 New Rotation Y 端口

12.3 在场景中创建传送门

  1. Blueprint 文件夹中右键 - Blueprint Class - 选择 Actor - 命名为 BP_Portal
  2. Ctrl + Space 打开内容浏览器 - 将 SM_Kit_Wall_Diagonal 拖入 Components 选项卡(资产在 虚幻学习工具包 中)
  3. Components 选项卡 - + Add - Arrow - 调整方向指向传送门的前方
  4. Components 选项卡 - + Add - Box Collision - 覆盖传送门的后方
  5. My Blueprint 选项卡 - VARIABLES - 单击右侧加号 - 命名变量 TargetPoint - 类型设置为 Object Types - Target Point - Object Reference - 设置为公有变量
  6. Components 选项卡 - 右键 Box Collision - Add Event - On Component Begin Overlap
  7. 拖动 On Component Begin Overlap 节点的 Other Actor 蓝色端口 - 添加 Set Actor Location 节点
  8. 将 TargetPoint 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Actor Location 节点 - 将 Return Value 连接至 Set Actor Location 节点的 New Location
    传送门
  9. 在场景中放置传送门,再放置一个 Target Point 目标点
  10. 选中传送门 - Details 选项卡 - Default - Target Point - 选择相应的 Target Point

12.4 使用鼠标与场景内物体交互

DEMO13 单击鼠标拉动杠杆

DEMO13-0 设置杠杆动画
  1. Blueprint 文件夹中右键 - Blueprint Class - 选择 Actor - 命名为 BP_Lever
  2. SM_Player_Lever_BaseSM_Player_Lever_Handle 拖入 Components 选项卡
  3. 在 Event Graph 中添加 Add Timeline… 节点 - 双击进入编辑界面 - + Track - Add Float Track - 命名为 alpha
  4. + Track 按钮右边 Length 改为 0.5
  5. 添加 Lerp (Rotator) 节点 - 将 Timeline 节点的 Alpha 端口连接至 Lerp 节点的 Alpha 端口
    • 设置 A 端口 X 为 50.0
    • 设置 B 端口 X 为 -50.0
  6. 将 SM_Player_Lever_Handle 拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Rotation 节点 - 将 New Rotation 端口连接至 Lerp 节点的 Return Value 端口

杠杆动画

DEMO13-1 启用点击事件和触控事件
  1. 进入人物蓝图的 Event Graph 选项卡,找到 Event BeginPlay 事件执行流
  2. 拖动 Get Player Controller 节点的蓝色输出端口 - 添加 Set Enable Click Events 节点和 Set Enable Touch Events 节点 - 并设置为 True 启用点击事件和触控事件
DEMO13-2 为杠杆添加点击事件
  1. 回到 BP_Lever - Components 选项卡 - 右键 SM_Player_Lever_Handle - Add Event - On Clicked
  2. 添加 Flip Flop 节点(Flow Control)
  3. 如图所示连接节点,Flip Flop 节点控制每次鼠标点击的操作在 A B 执行流间切换 控制杠杆动画
DEMO13-3 人物进入范围内才能点击杠杆
  1. BP_Lever - Components 选项卡 - + Add - Box Collision - 将合体碰撞器放在杠杆的前方
  2. 为 Box Collision 添加 On Component Begin Overlap 事件和 On Component End Overlap 事件
  3. 添加 Gate 节点(Flow Control)
  4. 如图所示连接节点 人物进入范围内才能点击杠杆

DEMO14 使用杠杆控制门的开关

DEMO14-0 创建门和动画
  1. Blueprint 文件夹中右键 - Blueprint Class - 选择 Actor - 命名为 BP_Gate
  2. 将门的网格体拖入 Components 选项卡
  3. Event Graph 选项卡 - 右键空白区域 - 添加 Add Custom Event… 节点 - 命名为 OpenClose
  4. 同样的方法添加含有 (0.0, 0.0) -- (0.5, 1.0) 关键帧的时间轴节点
  5. 添加 Lerp 节点(Float)
  6. 将门网格体从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Location 节点
  7. 如图所示连接节点 门
DEMO14-1 在杠杆蓝图中编写控制门的程序
  1. BP_Lever 文件 - My Blueprint 选项卡 - VARIABLES - 添加名为 Gate 的变量 - 设置类型为 Object Types - BP Gate - Object Reference - 设置为公有变量
  2. 将 Gate 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Open 和 Close 节点(Call Function)
  3. 如图所示连接节点 杠杆控制门
DEMO14-2 在场景中指定杠杆要控制的门

选中场景中的杠杆 - Details 选项卡 - Default - Gate - 选择相应的门

DEMO15 使用鼠标点亮火焰

DEMO15-0 创建火焰台
  1. Blueprint 文件夹中右键 - Blueprint Class - 选择 Actor - 命名为 BP_Fireplace
  2. SM_Button_A_Ring 拖入 Components 选项卡作为火焰台底座(资产在 虚幻学习工具包 中)
  3. Components 选项卡 - + Add - Particle System Component (根据需求选择Niagara 或 Cascade) - 选中粒子系统组件 - Details 选项卡 - Particles - Template - 选择火焰特效(P_ky_fireBall
  4. Components 选项卡 - 拖动粒子系统组件附加到火焰台底座静态网格体
  5. Components 选项卡 - + Add - Point Light - 选中点光源 - Details 选项卡 - Light - 调整 Intensity 和 Light Color:点光源组件点亮周围,粒子特效自身不会点亮周围
  6. Components 选项卡 - 拖动点光源组件附加到粒子系统组件
  7. Components 选项卡 - + Add - Capsule Collision - 调整大小和位置,使其覆盖火焰台:使用胶囊触发器指定鼠标点击的有效区域
  8. Components 选项卡 - 拖动胶囊触发器附加到火焰台底座静态网格体

火焰台组件附属关系

DEMO15-1 为火焰台编写蓝图程序
  1. Components 选项卡 - 右键 Capsule Collision - Add Event - Add OnClicked
  2. Components 选项卡 - 选中 Particle System - Details 选项卡 - Rendering - 取消勾选 Visible
  3. Components 选项卡 - 选中 Point Light - Details 选项卡 - Rendering - 取消勾选 Visible
  4. Components 选项卡 - 选中 Capsule Collision - Details 选项卡 - Collision - Collision Presets - 选择 OverlapOnlyPawn:只有角色可以穿过胶囊,包括鼠标的其他物体不可以穿过,这样设置可以防止鼠标点击穿过胶囊触发器
  5. 将 Particle System 从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Visibility 节点 - New Visibility 设置为 True 并且 Propagate to Children 设置为 True
  6. 添加 Play Sound 2D 节点 - 添加点燃音效
  7. 添加 Flip Flop 节点实现点亮和熄灭的切换
  8. 如图所示连接节点 火焰台程序

12.5 子蓝图类(蓝图类的继承)

DEMO16 使杠杆能够控制除了门以外的其他物体

DEMO14 中的杠杆只能控制 BP_Gate 对象。现在要使用继承特性,使杠杆能够控制除了门以外的其他物体。

  1. 右键 DEMO14-1 中做好的杠杆 BP_Lever - Create Child Blueprint Class - 命名为 BP_Lever_Gate
  2. 重复上一步,命名为 BP_Lever_Fireplace
  3. 编辑父蓝图 BP_Lever
    1. 在父蓝图类 BP_Lever 的 Event Graph 选项卡中,删除 Gate 变量和 Open 、Close 节点;同时删除 My Blueprint 选项卡 - VARIABLES 中的 Gate 变量
    2. 右键 Event Graph 的空白区域 - 添加 Add Custom Event… 节点 - 命名为 OpenClose
    3. 在 Flip Flop 节点的 A B 执行流中分别添加 Open 和 Close 节点(Call Function)
    4. 其余保持不变
    5. 如图所示
      父蓝图
  4. 编辑子蓝图 BP_Lever_Gate
    1. 打开子蓝图类 BP_Lever_Gate - My Blueprint 选项卡 - VARIABLES - 添加名为 Gate 的变量 - 设置类型为 Object Types - BP Gate - Object Reference - 设置为公有变量
    2. 将 Gate 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Open 和 Close 节点(Call Function)
    3. My Blueprint 选项卡 - FUNCTIONS - 点击 + 左侧的 override 下拉菜单 - 选择 Open 和 Close:对父蓝图 BP_Lever 中的 Open 和 Close 事件进行重载
    4. 如图所示连接节点
      Gate子蓝图
  5. 重写火焰台程序 BP_Fireplace
    1. 添加名为 IsOn 的 Boolean 变量
    2. 添加 Branch 节点(Flow Control)
    3. Add Custom Event… - 添加 On 和 Off 自定义事件
    4. My Blueprint 选项卡 - GRAPHS - EventGraph - 将 On 和 Off 拖入 Event Graph 选项卡中 不好搜的函数直接从这里拖
    5. 如图所示连接节点
      重写火焰台程序
  6. 编辑子蓝图 BP_Lever_Fireplace
    1. 打开子蓝图类 BP_Lever_Fireplace - My Blueprint 选项卡 - VARIABLES - 添加名为 Fireplace 的变量 - 设置类型为 Object Types - BP Fireplace - Object Reference - 设置为公有变量
    2. 将 Fireplace 变量拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 On 和 Off 节点(Call Function)
    3. My Blueprint 选项卡 - FUNCTIONS - 点击 + 左侧的 override 下拉菜单 - 选择 Open 和 Close:对父蓝图 BP_Lever 中的 Open 和 Close 事件进行重载
    4. 如图所示连接节点
      Fireplace子蓝图
  7. 将原来控制门的杠杆 BP_Lever 替换为子蓝图杠杆 BP_Lever_Gate
    1. 在内容浏览器中选中 BP_Lever_Gate
    2. 右键场景 Outliner 选项卡中的 BP_Lever - Replace Selected Actors with - 勾选 Copy Properties - 选择 SELECTION 中的 BP_Lever_Gate
    3. 重新命名
    4. Details 选项卡 - Default - Gate - 选择相应的门

12.6 数组及其遍历

DEMO17 使用一个杠杆控制多个火焰台

  1. Ctrl 选中场景中的多个火焰台 - Details 选项卡 - Actor - Advanced - Tags - + - 添加名为 Fireplace_Island_B 的标签
  2. 进入 BP_Lever_Fireplace 的 Event Graph 选项卡
  3. My Blueprint 选项卡 - VARIABLES - 添加名为 Tag 的变量 - 设置类型为 Name - 设置为公有变量
  4. 删除 DEMO16 中创建的 Fireplace 变量
  5. 添加 Get All Actors Of Class with Tag 节点
    • Actor Class 选择 BP_Fireplace
    • 将 VARIABLES 中的 Tag 变量拖入 Tag 端口
  6. 拖动 Get All Actors Of Class with Tag 节点的 Out Actors - 添加 For Each Loop 节点
  7. 拖动 For Each Loop 节点的 Array Element - 添加 On 和 Off 节点(Call Function)
  8. 如图所示连接节点
    控制多个火焰台
  9. 选中场景中的杠杆 - Details 选项卡 - Default - Tag - 输入 Fireplace_Island_B

12.7 事件分发器

DEMO18 使用 BP_Lever 控制关卡全局事件的触发

DEMO18-0 创建事件分发器
  1. BP_Lever 的 My Blueprint 选项卡中 - EVENT DISPATCHERS - + - 命名为 OnLeverActivatedOnLeverDeactivated
  2. 拖动两个事件分发器到 Event Graph 选项卡 - 选择 Call
  3. 如图所示连接节点
    事件分发器

执行过程为:当 Open/Close 通过 Flip Flop 节点被调用时,事件 Open/Close 从红色节点开始执行,执行流通过 Call 节点转移至关卡蓝图中 OnLeverActivated/OnLeverDeactivated 事件的执行流中

DEMO18-1 在关卡蓝图中添加事件分发器
  1. BP_Lever 拖入关卡场景中
  2. 选中 BP_Lever - 菜单栏 Actor - Add Event - OnLeverActivated:在关卡蓝图中添加了 On Lever Activated 事件
  3. 选中 BP_Lever - 菜单栏 Actor - Add Event - OnLeverDeactivated:在关卡蓝图中添加了 On Lever Deactivated 事件
DEMO18-2 使用关卡蓝图中的事件分发器控制屋顶起飞
  1. 选中屋顶的全部网格体 - Details 选项卡 - Actor - Advanced - Tags - + - 添加名为 Roof 的标签
  2. 选中屋顶的全部网格体 - Details 选项卡 - Transform - Mobility - 改为 Movable
  3. 参照 DEMO17 添加 Get All Actors Of Class with Tag 节点和 For Each Loop 节点 - 将 Tag 改为 Roof
  4. 添加 Get Actor Location 节点、Set Actor Location 节点和 Add 节点
  5. 如图所示连接节点
    屋顶起飞

每次循环获得 Actor 的位置,将 Z 轴坐标 +/- 500 后设置为该 Actor 的新位置

12.8 创建按指定路径移动的物体

DEMO19 创建按指定路径漂浮的岛

  1. Blueprint 文件夹中右键 - Blueprint Class - 选择 Actor - 命名为 BP_FloatingIsland
  2. SM_FloatingIsland_M 静态网格体从内容浏览器拖入 Components 选项卡
  3. Components 选项卡 - + Add - Spline 样条曲线
  4. 选中 Spline - Details 选项卡 - Variable - 勾选 Editable when Inherited
  5. BP_FloatingIsland 拖入场景中,编辑白色的样条曲线设置运动轨迹
    • 编辑方法与钢笔工具相同
    • 添加锚点:右键样条曲线 - Add Spline Point Here 或者 选中最后一个锚点按住 Alt 拖动
  6. 进入 BP_FloatingIsland 的 Event Graph 选项卡
  7. 添加 Add Timeline… 节点 - 命名为 Floating - 创建 (0, 0) -- (10, 1) -- (20, 0) 关键帧 - 勾选 Use Last Keyframe 、AutoPlay 、Loop - 修改 Length 为 20(有关 Timeline 的编辑不再赘述)
  8. Spline 从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Spline Length 节点、Get Location at Distance Along Spline 节点
  9. 添加 Multiply 节点
  10. SM_FloatingIsland_M 从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Set Relative Location 节点
  11. 如图所示连接节点
    样条曲线
  • Get Location at Distance Along Spline 节点的作用是获得样条曲线上指定距离的空间位置坐标

12.9 关卡切换

  1. 复制 12.3 中完成的传送门 BP_Portal,将其重命名为 BP_LevelSwitch
  2. 进入 BP_LevelSwitch 的 Event Graph 选项卡,删除 On Component Begin Overlap 以外的全部节点
  3. 拖动 On Component Begin Overlap 节点的 Other Actor 蓝色端口 - 添加 Cast To BP_<角色名>Character 节点
  4. 添加 Open Level (by Name) 节点 - Level Name 设置为要切换到的关卡名(区分大小写)
  5. 如图所示连接节点
    关卡切换

12.10 关卡流送

  1. 菜单栏 Window - Levels
  2. Levels 选项卡 - 点击左上角 Levels 下拉菜单 - Create New… - 选择 Empty Level - Create - 保存至 Maps 文件夹 - 命名为 TutorialMap_East - Save
  3. Levels 选项卡 - 双击激活 TutorialMap_East 关卡
  4. 激活子关卡后搭建新场景,搭建完成后双击 Persistent Level 激活父关卡
  5. 在父关卡中 - Place Actors 选项卡 - Volumes - Level Streaming Volume 关卡流送体积 - 将其拖入场景中
  6. 选中关卡流送体积 - Details 选项卡 - Brush Settings - 调整大小和位置使其覆盖到一半父关卡和全部子关卡
  7. Levels 选项卡 - 激活子关卡 - 点击上方编辑详细信息按钮 编辑详细信息 - Level Streaming - Streaming Volumes - 点击右侧 + - 展开下拉菜单 - 选择父关卡中创建的关卡流送体积
  8. … - Level Streaming - Is Static - 勾选

13 构造脚本

构造脚本就是面向对象编程中的构造函数

  1. Blueprint 文件夹中右键 - Blueprint Class - 选择 Actor - 命名为 BP_Fence
  2. 双击进入编辑界面 - My Blueprint 选项卡 - FUNCTIONS - 双击 Construction Script - 进入构造脚本编辑界面
  3. 右键空白区域 - 添加 Add Static Mesh Component 节点 - 拖动 Return Value 蓝色端口 - 添加 Set Static Mesh 节点 - New Mesh 选择 SM_Fence_Var02(位于 Advanced Village Pack 中)
  4. 如图所示连接节点
    构造脚本

13.0 使用构造脚本创建一堆栅栏

  1. 前文的基础上,右键空白区域 - 添加 For Loop 节点(Flow Control)- First Index 设为 0 - Last Index 设为 9
  2. 拖动 Add Static Mesh Component 节点的 Return Value 端口 - 添加 Set Simulate Physics 节点 - 勾选 Simulate
  3. 如图所示连接节点
    循环构造脚本
  4. BP_Fence 拖入场景中
  5. 开始运行关卡时,会在 BP_Fence 所在位置生成 10 个栅栏
  6. 添加 Random Unit Vector 节点 - 拖动 Return Value 端口 - 添加 Multiply 节点 - 右键第二个端口 - To Float (double-precision)
  7. 添加 Random Float in Range 节点 - Min 设为 100.0 - Max 设为 400.0
  8. 右键 Add Static Mesh Component 节点的 Relative Transform 端口 - Split Struct Pin
  9. 如图所示连接节点
    在随机位置生成栅栏
  10. 现在栅栏会在随机位置生成

13.1 创建一排整齐的栅栏

  1. BP_Fence 重命名为 BP_FencesHeap
  2. 选中 BP_FencesHeap - 按 Ctrl + D 复制蓝图
  3. 将复制的蓝图重命名为 BP_FencesRow
  4. 进入 BP_FencesRow 的 Construction Script 选项卡
  5. 删除 Random Unit Vector 节点、Random Float in Range 节点、Multiply 节点和 Set Simulate Physics 节点
  6. 拖动 For Loop 节点的 Index 端口 - 添加 Multiply 节点 - 第二个端口的值设置为 340
  7. 右键 Add Static Mesh Component 节点的 Relative Transform Location 端口 - Split Struct Pin
  8. 将 Multiply 节点的输出连接至 Add Static Mesh Component 节点的 Relative Transform Location X 端口
  9. 如图所示连接节点
    创建一排整齐的栅栏
  10. My Blueprint 选项卡 - VARIABLES - 添加名为 FenceNum 的变量 - 设置类型为 Integer - 设置为公有变量
  11. 将 FenceNum 变量拖动到 For Loop 节点的 Last Index 端口
  12. 现在可以在场景中选中 BP_FencesRow - Details 选项卡 - Default - Fence Num 处设置栅栏的数量

13.2 创建一排样式不同的栅栏

  1. 选中 BP_FencesRow - Ctr + D - 重命名为 BP_VariedFencesRow
  2. 进入 BP_VariedFencesRow 的 Construction Script 选项卡
  3. My Blueprint 选项卡 - VARIABLES - 添加名为 VariedFences 的变量 - 设置类型为 Static Mesh - Object Reference
  4. 选中 VariedFences 变量 - Details 选项卡 - Variable - Variable Type - 点击第二个下拉菜单(蓝色) - 选择 Array
  5. 编译保存
  6. 选中 VariedFences 变量 - Details 选项卡 - Default Value - VariedFences - 点击四次 + - 分别选择 SM_Fence_Var01SM_Fence_Var02SM_Fence_Var03SM_Fence_Var04 (位于 Advanced Village Pack 中)
    • 也可以先添加一个,然后在右侧下拉菜单中选择 Duplicate ,然后选择第二个(选得更快)
  7. 将 VariedFences 变量拖动到 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get (a copy) 节点和 Length 节点
  8. 添加 Subtract 节点
  9. 添加 Random Integer in Range 节点 - Min 设为 0 - Max 连接至 Length 节点的输出端口减 1(否则数组越界)
  10. 如图所示连接节点
    创建一排样式不同的栅栏

13.3 使用样条曲线构造石墙

  1. Blueprint 文件夹中右键 - Blueprint Class - 选择 Actor - 命名为 BP_StoneWall
  2. 双击进入编辑界面 - Components 选项卡 - + Add - Spline(确保 Details 选项卡 - Variable - Editable when Inherited 已勾选)
  3. My Blueprint 选项卡 - VARIABLES - 添加名为 StoneNum 的变量 - 设置类型为 Integer - 设置为公有变量
  4. … - VARIABLES - 添加名为 StoneMeshes 的变量 - 设置类型为 Static Mesh - Object Reference
  5. 选中 StoneMeshes 变量 - Details 选项卡 - Variable - Variable Type - 点击第二个下拉菜单(蓝色) - 选择 Array
  6. 编译保存
  7. Ctrl + Space 打开内容浏览器 - 搜索 SM_Stone_Big_Var (位于 Advanced Village Pack 中) - 选中全部 - 拖入 StoneMeshes 变量的 Default Value - Stone Meshes 中(有蓝色高亮)
  8. 参照 13.2 拖动 StoneNum 变量和 StoneMeshes 变量到 Event Graph 选项卡中;添加 For Loop 节点、Add Static Mesh Component 节点、Set Static Mesh 节点、Length 节点、Get 节点、Random Integer in Range 节点以及相应的运算符
  9. 右键 Add Static Mesh Component 节点的 Relative Transform 端口 - Split Struct Pin
  10. 将 Spline 从 Components 选项卡中拖入 Event Graph 选项卡中 - 拖动蓝色输出端口 - 添加 Get Spline Length 节点和 Get Location at Distance Along Spline 节点
  11. 样条总长度 * (当前索引值 / 石头总数) = 石头所在位置的样条长度
  12. 按照上述逻辑连接节点
    使用样条曲线构造石墙
  13. 为石头添加随机旋转
    1. 添加 Random Float in Range 节点 - Min 设为 0.0 - Max 设为 360.0
    2. 右键 Add Static Mesh Component 节点的 Relative Transform Rotation 端口 - Split Struct Pin
    3. 将 Random Float in Range 节点的输出连接至 Add Static Mesh Component 节点的 Relative Transform Rotation Z 端口
    4. 如图
      为石头添加随机旋转
  14. 同理也可以为 Relative Transform Scale 端口随机赋值
  15. 编译保存
  16. BP_StoneWall 拖入场景中,先编辑好样条形状,然后在 Details 选项卡 - Default - Stone Num 处设置石头的数量
This post is licensed under CC BY 4.0 by the author.