
观众老爷们大家好 我是邪修KING 欢迎来到我的TA->UE游戏引擎博客---入门篇! C++!高门槛!精选学习! 系列衔接:上一篇我们完成了 UE 基础面板认知、基础几何体创建、属性修改、材质赋予 4 个核心操作,搭建出了静态 3D 场景。本篇我们将解锁 UE 的核心能力 ------ 让场景物体产生可交互的动态效果,同时结合 C++ 面向对象知识,拆解蓝图的底层逻辑,非常适合有 C/C++ 基础的 UE 新手入门。
前置准备
1.沿用你上一篇博客的 UE 项目,场景中保留已赋予材质的基础几何体(以立方体为例)
2.已熟悉 UE 主界面核心面板,掌握 C++ 类与对象、继承、成员变量 / 函数等基础语法
3.引擎版本:UE5.0+(本篇操作全版本通用,无版本兼容问题)
一、核心概念前置:用 C++ 知识快速看懂 UE 术语
很多新手学 UE 会被陌生术语劝退,但只要你有 C++ 基础,就能一秒对应底层逻辑,这也是我们科班生学 UE 的核心优势:
| UE术语 | 对应C++概念 | 核心说明 |
|---|---|---|
| Actor | 类的实例化对象 | UE 场景中所有可放置、可拥有行为的物体,都是 Actor。你上一篇拖入的立方体,本质是StaticMeshActor(静态网格体 Actor),继承自AActor基类,和 C++ 子类继承父类的逻辑完全一致 |
| 蓝图类 | C++ 的类定义 | 蓝图是 UE 的可视化脚本系统,一个蓝图类就是一个 C++ 类的可视化封装,蓝图节点对应 C++ 的函数、变量、流程控制,最终都会编译成 C++ 代码执行 |
| 蓝图事件 | C++ 的回调函数 / 事件驱动 | 比如事件Tick对应每帧执行的循环函数,事件BeginPlay对应类的初始化函数,按键点击事件对应 C++ 的按键回调,核心都是「触发条件→执行对应逻辑」 |
| 蓝图变量 | C++ 的类成员变量 | 蓝图中创建的变量,就是类的成员变量,可编辑实例属性对应 C++ 的UPROPERTY(EditAnywhere)宏,可在编辑器中直接修改,无需重编译代码 |
二、分步实操:3 个核心交互效果,从静态到动态
实操 1:给几何体创建蓝图类,为逻辑编写做准备
我们上一篇直接在场景中修改的立方体,只是一个孤立的实例,无法为其编写通用逻辑 ------ 就像 C++ 中,我们不能只给单个对象新增函数,需要先定义类,再实例化对象。
**1.**选中场景中已赋予材质的立方体,右键 → 转为蓝图类
**2.**选择项目中的蓝图保存路径,命名为BP_CubeTest,点击创建
**3.**双击打开蓝图类,进入蓝图编辑器,核心关注 3 个面板:
--->视口:预览蓝图对应的物体,和主编辑器视口逻辑一致
--->事件图表:编写蓝图逻辑的核心区域,对应 C++ 的代码文件
--->我的蓝图:管理蓝图的变量、函数、事件,对应 C++ 类的成员定义区
实操 2:实现自动旋转效果,理解蓝图执行流程
这是最简单的入门逻辑,无需输入绑定,运行后自动执行,帮你快速理解蓝图的执行逻辑和 C++ 的对应关系。
1.在事件图表空白处右键,搜索事件 Tick,拖入图表中
原理说明:事件Tick是 UE 的帧更新事件,游戏每一帧都会执行该事件下的所有逻辑,对应 C++ 中重写的Tick函数,和 C++ 的 while 循环每帧执行一次逻辑完全一致。
2.空白处右键,搜索添加本地旋转 ,拖入图表中
原理说明:该节点对应AActor类的AddActorLocalRotation方法,作用是给物体自身坐标系添加旋转,C++ 中可直接调用该 API。节点默认目标为Self,对应 C++ 的this指针,指代当前蓝图类对应的 Actor 本身。
3.节点参数设置:在旋转参数中,给 Z 轴(Yaw)赋值1.0,其余轴保持 0
关键知识点:节点会自动乘以DeltaTime(每帧时间间隔),保证不同帧率下旋转速度完全一致,这是 UE 开发的核心规范,新手最容易忽略这个点导致效果异常。
4.逻辑连线:将事件Tick的白色执行引脚(左侧箭头),和添加本地旋转的白色执行引脚连起来
原理说明:蓝图中的白色引脚是执行流程线,对应 C++ 代码的执行顺序,连线的先后就是代码执行的先后,和 C++ 的顺序执行逻辑完全一致。
5.点击蓝图编辑器上方的编译→保存,回到主场景,点击播放按钮,即可看到立方体匀速自动旋转!
对应C++代码实现(底层逻辑完全一致)
cpp
// 头文件声明
#pragma once
#include "GameFramework/Actor.h"
#include "BP_CubeTest.generated.h"
UCLASS()
class YOUR_PROJECT_API ABP_CubeTest : public AActor
{
GENERATED_BODY()
public:
ABP_CubeTest();
// 重写Tick函数,对应蓝图的事件Tick
virtual void Tick(float DeltaTime) override;
protected:
// 重写初始化函数,对应蓝图的事件BeginPlay
virtual void BeginPlay() override;
};
// 源文件实现
#include "BP_CubeTest.h"
ABP_CubeTest::ABP_CubeTest()
{
PrimaryActorTick.bCanEverTick = true; // 开启Tick,对应蓝图启用Tick事件
}
void ABP_CubeTest::BeginPlay()
{
Super::BeginPlay();
}
void ABP_CubeTest::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// 对应蓝图的添加本地旋转节点,每帧给Z轴添加1度旋转
AddActorLocalRotation(FRotator(0.0f, 1.0f * DeltaTime, 0.0f));
}
实操 3:键盘控制物体移动,实现核心交互
这是 UE 交互的核心基础,我们将通过 UE 输入系统,实现 WASD 键控制立方体前后左右上下移动,完美衔接你学过的 C++ 事件驱动编程知识。
步骤 1:配置项目输入映射
1.点击顶部菜单栏 编辑→项目设置 ,在左侧列表找到 引擎→输入
2.在轴映射分类下,点击 + 号,添加 4 个轴映射,绑定对应按键:
| 轴映射名称 | 绑定按键 | 缩放值 | 作用 |
|---|---|---|---|
| MoveForward | W | 1.0 | 向前移动 |
| MoveForward | S | -1.0 | 向后移动 |
| MoveRight | D | 1.0 | 向右移动 |
| MoveRight | A | -1.0 | 向左移动 |
| MoveUp | Space | 1.0 | 向上移动 |
| MoveUp | Ctrl | -1.0 | 向下移动 |
3.关闭项目设置窗口,配置会自动保存
原理说明:轴映射对应 C++ 的浮点值输入,范围为 - 1~1。按下对应按键时,返回设置的缩放值,松开按键返回 0,专门用于处理移动、旋转这类连续变化的操作。
步骤 2:蓝图实现移动逻辑
1.回到BP_CubeTest蓝图的事件图表,右键搜索我们刚创建的MoveForward轴事件,拖入图表中
原理说明:该轴事件每帧都会执行,会返回当前的轴值(按下 W 返回 1,按下 S 返回 - 1,松开返回 0),对应 C++ 中绑定的输入回调函数。
2.创建移动速度成员变量:在左侧「我的蓝图」→「变量」中,点击 + 号,命名为MoveSpeed,类型选择浮点型
-->细节面板中,设置默认值为500.0(可根据需求调整)
-->勾选「可编辑实例」,对应 C++ 的public成员变量,可在场景中直接修改数值,无需进入蓝图
3.右键搜索获取 Actor 向前向量 ,拖入图表中,对应 C++ 的GetActorForwardVector()方法,作用是获取物体自身向前的方向向量,保证移动方向跟随物体朝向,而非固定世界坐标系。
4.右键搜索乘 节点,创建 2 个乘法节点:
· 第一个乘法节点:将「获取 Actor 向前向量」的输出值,与「MoveForward 轴事件」的轴值相乘
· 第二个乘法节点:将第一个乘法的结果,与MoveSpeed变量、DeltaTime相乘(保证不同帧率下移动速度一致)
5.右键搜索添加 Actor 世界偏移 ,拖入图表中,对应 C++ 的AddActorWorldOffset()方法,作用是给物体在世界坐标系中添加位置偏移,实现移动。
6.逻辑连线:
将「MoveForward 轴事件」的执行引脚,与「添加 Actor 世界偏移」的执行引脚相连
将第二个乘法节点的最终结果,连入「添加 Actor 世界偏移」的Delta Location 参数
7.按照完全相同的逻辑,完成MoveRight(对应获取 Actor 向右向量)、MoveUp(对应获取 Actor 向上向量)的移动逻辑
8.点击编译→保存 ,回到主场景,点击播放,按下 WASD、空格、Ctrl 键,即可自由控制立方体移动!
注意新手容易踩得的坑!!!
· 移动方向错误:检查是否用了「本地向量」而非「世界向量」,或轴映射的缩放值设置反了
· 按键无反应:检查项目设置的轴映射名称,与蓝图中轴事件名称是否完全一致(大小写敏感),蓝图是否完成编译
· 移动速度忽快忽慢:检查是否乘以了DeltaTime,这是新手最常见的错误
实操 4:鼠标点击触发材质变色,衔接上一篇材质知识
上一篇我们学会了在编辑器中给物体赋予材质,本篇我们实现运行时交互:鼠标点击立方体,随机切换材质颜色,彻底打通「逻辑→材质」的联动。
1.打开上一篇给立方体创建的材质,进入材质编辑器:
-->空白处右键,添加Vector3 参数 ,命名为BaseColor(名称必须记牢,大小写敏感)
-->设置默认值为你原本的材质颜色,将该参数节点连入「基础颜色」输入引脚
-->点击保存,关闭材质编辑器
原理说明:材质参数对应 C++ 类的成员变量,可在运行时通过代码 / 蓝图动态修改,只有参数化的材质属性,才能在运行时实时变更。
2.回到BP_CubeTest蓝图的事件图表,右键搜索Actor 点击事件 ,拖入图表中,该事件会在鼠标点击该 Actor 时触发,对应 C++ 的OnClicked委托。
3.右键搜索创建动态材质实例 ,拖入图表中:
-->「目标」参数:选择立方体对应的静态网格体组件(默认是StaticMeshComponent0)
-->「材质槽索引」:保持 0(我们的立方体只有 1 个材质槽)
-->将「Actor 点击事件」的执行引脚,与该节点的执行引脚相连
原理说明:只有动态材质实例,才能在运行时修改参数,静态材质仅能在编辑器中修改,对应 C++ 的UMaterialInstanceDynamic类。
4.右键搜索随机 RGB ,拖入图表中,用于生成随机颜色;再搜索设置向量参数值 ,拖入图表中。
5.逻辑连线:
-->将「创建动态材质实例」的执行引脚,与「设置向量参数值」的执行引脚相连
-->将「创建动态材质实例」的返回值,连入「设置向量参数值」的「目标」参数
-->「参数名称」填写我们在材质中创建的BaseColor(必须完全一致)
-->将「随机 RGB」的输出值,连入「设置向量参数值」的「值」参数
6.点击编译→保存,回到主场景,点击播放,鼠标点击立方体,即可看到立方体每次点击都会随机切换颜色!

四、本篇总结
本篇我们从静态场景进阶到动态交互,完成了 3 个核心效果的开发,核心收获有 3 点:
1.彻底搞懂了 UE 的 Actor 核心概念,用 C++ 面向对象知识,打通了蓝图与 C++ 的底层逻辑对应关系,打破了「蓝图和 C++ 是两个东西」的误区。
2.掌握了蓝图的基础开发流程:事件触发→节点逻辑→效果实现,理解了 UE 事件驱动的开发思想。
3.实现了自动旋转、键盘控制移动、鼠标点击变色 3 个可交互效果,完成了从「看场景」到「玩场景」的跨越。
下一篇预告:我们将学习 UE 的碰撞系统与触发事件,实现物体碰撞检测、触发区域交互(比如走进区域自动开门、物体碰撞销毁),同时深入讲解蓝图的函数封装与代码复用,继续完善我们的 UE 入门系列。
声明!虚幻内容过于复杂,图片大约20多张,这里整理过后,只要配置结合vs2022的对应版本,操作基本没问题!
结合参考配置!

【UE5教程-运行UE5的最佳配置参考】 https://www.bilibili.com/video/BV1sb421b7LL/?share_source=copy_web\&vd_source=fd04669a3f0f6a74eab6813325ed25d8