Unreal Engine 蓝图脚本入门

FreeGuideOnline 最新 2026-07-09

什么是蓝图?为什么它适合初学者?

蓝图(Blueprint)是Unreal Engine内置的一套可视化脚本系统。与传统编程语言一行行写代码不同,你通过拖拽和连接一个个节点来构建游戏逻辑。这些节点本身就封装了底层C++代码的功能,因此你无需深入代码即可实现复杂的交互、AI行为、UI控制等。

对于没有编程基础的美术、策划或爱好者,蓝图极大地降低了开发门槛。即使是有经验的程序员,也能利用蓝图快速原型化玩法,提升迭代速度。

认识蓝图编辑器界面

打开一个项目后,在内容浏览器中右键 -> 蓝图类,选择父类为Actor,命名为BP_InteractiveDoor,双击打开,你会看到蓝图编辑器。

编辑器核心区域分为:

组件面板(Components)

左侧列表显示组成该物体的各个部分。对于一个门Actor,可能包含:

  • Static Mesh Component:门的模型
  • Box Collision:用于检测玩家和门的碰撞

视口(Viewport)

中央区域可预览Actor的外观,你可以直接拖拽旋转视角。

我的蓝图(My Blueprint)

显示你自定义的变量函数事件分发器等。这里是管理蓝图自定义逻辑的枢纽。

事件图表(Event Graph)

这是蓝图真正发挥魔力的地方。 你会在空白画布上布置节点,并连成执行流和数据流,定义游戏逻辑。

你的第一个节点:了解 Event Graph

事件节点(红⾊)

事件节点是逻辑执行的起点。它们在被游戏引擎触发时开始运行。最常用的是Event BeginPlay:游戏开始时自动触发。

在事件图表中,你可能已经看到默认存在的两个根节点:

  • Event BeginPlay
  • Event ActorBeginOverlap

右边还有Event Tick,每帧调用,慎用以免影响性能。

节点、引脚与连线

  • 节点:代表一个操作、计算或数据。
  • 执行引脚:左侧进入,右侧出去,为白色的执行流连线,指向下一个要执行的节点。
  • 数据引脚:各种颜色的实心圆点,传递数值、布尔值、引用等。输入在左侧,输出在右侧。

按下鼠标右键不放,在空白处拖拽,可以弹出快捷菜单直接搜索所需功能。

变量:存储和修改数据

变量是存储临时或持久数据的容器。在“我的蓝图”面板点击 +变量 创建一个变量,命名为IsOpen,类型选择Boolean。编译蓝图后,右侧细节面板可设置默认值为False

变量的存取

  • 获取(Get):在图表中拖入变量,默认显示为获取节点,可读取当前值。
  • 设置(Set):按住Ctrl将变量拖入图表,创建设置节点,执行后将变量更新为新值。

变量可以是公开的(眼图标开启),这样在关卡中放置的实例就可以在细节面板中调整,实现数据驱动。

流程控制:让逻辑拥有判断能力

最常用的流程控制节点是Branch(分支)。按住B键点击图表放置,或右键搜索Branch

  • 输入执行引脚:执行
  • 输入数据引脚:Condition(布尔类型)
  • 输出执行引脚:TrueFalse

配合之前创建的IsOpen变量,我们可以这样设计:

  1. Event ActorBeginOverlap拖出白线,连接到Branch的执行
  2. IsOpen变量拖入图表(获取),连接到Branch的Condition
  3. True脚引出,执行开门逻辑(后面实现);从False脚引出,执行关门逻辑。

实际操作:制作一个交互门

我们来组合刚刚学到的概念,做一扇当玩家靠近时自动平滑打开的推拉门。

1. 准备组件

BP_InteractiveDoor的组件面板中添加:

  • Static Mesh:选择一个门模型(如/Engine/BasicShapes/Cube并缩放)
  • Box Collision:大小包裹住门及门前区域,作为触发范围

选中Box Collision,在细节面板中的事件下方,点击On Component Begin Overlap旁边的 +,会自动在事件图表中创建OnComponentBeginOverlap事件。同样再创建一个OnComponentEndOverlap事件(碰撞结束)。

2. 添加变量

  • IsOpen (Boolean) – 标记门开关状态
  • DoorRotation (Rotator) – 目标旋转值,假如我们想让门绕Z轴旋转90度

设置DoorRotation的默认值,例如(Pitch=0, Yaw=90, Roll=0)。编译保存。

3. 实现逻辑

OnComponentBeginOverlap开始:

  • 拖出连向 Branch,Condition 取反(因为当前开着,不应该再次打开):拖出IsOpen 变量获取,然后连到一个 Not Boolean 节点(右键搜NOT),输出连到Branch的Condition。
  • True分支:执行以下操作
    1. Set IsOpen = True(拖入变量后按Ctrl放置)
    2. 添加一个 Timeline 节点(用于平滑动画,蓝图入门必知)。双击Timeline,添加一个浮点型轨迹,命名为Alpha,设置关键帧:时间0.0 → 值0.0,时间1.0 → 值1.0。
    3. 回到图表,从Timeline的Update执行引脚连出,添加一个 Lerp (Rotator) 节点(插值旋转)。A引脚连接门的初始旋转(获取门的Relative Rotation),B引脚连接DoorRotation变量。Alpha引脚连接Timeline的Alpha输出。
    4. 将Lerp的结果连到一个 Set Relative Rotation 节点(目标为门本体Static Mesh组件,可通过拖入组件到图表生成引用)。
  • False分支:什么都不做,门已经打开。

OnComponentEndOverlap开始类似逻辑:

  • 用Branch检查IsOpen是否为True。
  • True时:设置IsOpen = False,然后反向播放时间轴(从Timeline节点拖出Reverse执行脚,或用同一个Timeline设置)让门平滑关闭。
  • 注意:时间轴需要指定播放方向,也可新建一个Timeline用倒放曲线。

提示:以上为精简版实现,真实项目中还需处理重叠对象数量(可用计数器)防止多个玩家同时触发导致逻辑混乱。但作为入门练习,这样已经能完整感受蓝图流程。

4. 编译与测试

点击左上角编译。将BP_InteractiveDoor拖入关卡,点击运行。玩家进入碰撞体时门会打开,离开时关闭。

常用快捷键与习惯养成

  • 右键拖拽按住B并点击:快速搜索节点
  • Ctrl+W:复制选中节点
  • C键:添加注释框,框选节点后按C,输入说明文字。良好的注释是蓝图工程最佳实践。
  • Q键:将选中节点直线对齐,保持图表整洁
  • 双击连线上某一点:快速添加可以转向的连线点,避免蜘蛛网

接下来学什么?

你已经掌握了蓝图核心的节点、变量、事件、流程控制和简单动画。建议继续探索:

  • 函数和宏:封装可复用逻辑,减少重复节点
  • 蓝图接口:让不同蓝图间方便通信
  • 数组与循环ForEachLoop 遍历多个对象
  • UI蓝图(UMG):制作游戏内菜单和HUD

蓝图是把游戏创意快速变为现实的强大工具。现在打开Unreal Engine,试着创建一个会旋转的金币、一盏可控制开关的灯,把抽象概念变成自己的肌肉记忆吧。