Blueprint Visual Scripting
Blueprint Visual Scripting
学习官方文档的笔记,相当于人工翻译,但调整了学习路线,正在学习,边学边更,如有错误,非常感谢您能指正。
Basic Scripting
Variables
variables可以是一个值,也可以是一个在world里的Object或Actor的reference。
Variable Types
| Variable Type | Color | Example | Represents |
|---|---|---|---|
| Boolean | Maroon | ![]() |
True or false |
| Byte | Sherpa blue | 值域为0~255(unsigned char) | |
| Integer | Sea green | ![]() |
int32 |
| Integer64 | Moss green | int64 | |
| Float | Yellow green | ![]() |
float |
| Name | Mauve | FName | |
| String | Magenta | ![]() |
FString |
| Text | Pink | ![]() |
FText |
| Vector | Gold | ![]() |
保存三个数字,可以作为表示坐标的xyz (相当于向量),还可以保存颜色的RGB等 |
| Rotator | Cornflower blue | ![]() |
包含定义旋转角度的一组数 |
| Transform | Orange | ![]() |
一组由position,rotation,scale组合的数 |
| Object | Blue | ![]() |
蓝图对象,比如Lights, Actors, StaticMeshes, Cameras, and SoundCues |
Creating Variables
| Option | Description | |
|---|---|---|
| Variable Name | variable的名字 | |
| Variable Type | 设置variable的类型,并可以在这里选择是否为数组 | |
| Instance Editable | 决定该varialbe能否在蓝图实例上被公开编辑,等同于另一边MyBlueprint面板上的小眼睛,其实就是允不允许在viewport中点击actor后,在旁边的的细节面板里改动此值,不允许,就只能在蓝图这里改 | |
| Blueprint Read Only | 字面意思 | |
| Tooltip | ![]() |
可以在这里对该变量进行注释说明,效果如图 |
| Show 3D Widget | 仅对Vector和Transform类型开放,使之可以在viewport里直接使用工具变换 | |
| Expose on Spawn | ![]() |
就是你这个变量在A蓝图里,当B蓝图要生成A蓝图的Actor时,如使用SpawnActor节点,这个节点上就会出现这个变量,如图 |
| Private | ![]() |
是否为私有,derived蓝图无法进行修改,意思是在其他蓝图里使用这个蓝图是,这个蓝图里的这个变量无法被修改,如图就是黄框处将消失,但像上面这个Expose on Spawn图里的SpawnActor节点,其上的LIght Color不会消失,因为那是初始化,而非修改(初步判断是这样) |
| Expose to Cinematics | 是否向Sequencer or Matinee公开并允许它们修改,版本4.23后Matinee不再被使用 | |
| Category | 给该varaiable一个标签,允许Category通过该标签对其进行分类 | |
| Replication | 能否在网络work上进行复制 | |
| Config Variable | 允许config文件设置该variable,即从config文件里得知自己的初始值 | |
| Transient | 加载时不被序列化而是以0填充 | |
| SaveGame | 序列化以保存 | |
| Advanced Display | 在类默认窗口隐藏 | |
| Multi line | Be capable of displaying multiple lines. To add a new line while editing the variable, press Shift+Enter. Note: This option applies only to String and Text variables. | |
| Deprecated Deprecation Message | Be deprecated. Any nodes that reference the variable will produce a compiler warning indicating that it should be removed or replaced. (Optional) You can specify a message to include with the warning. For example: X is no longer supported. Please use Y instead.(待补充) |
Promoting to Variable
创建变量,这里放三张图就可以理解了。
Set and Get an Actor Reference
这个跟着走一遍就熟了。Flow
这个流程就是用蓝图定义一个BoxTrigger,指定的Actor如果走到它里面去,就会传送至多远外,相当于一个传送门。
Execution Flow
介绍蓝图执行流,就是每个蓝图节点都有的那个向右的白色三角箭头。
(注意之后介绍的节点上的pin(注脚),都是输出的值)
Events
Event节点是gameplay code所调用的起始节点,用来开启一个事件流程的启动节点。换一种说法就是,当gameplay code呼叫它之后,它作为EventGraph中一个事件的第一个节点就会响应,然后开启一个相应事件的执行流程。更直观一点,Event节点是红色的。一些基本的节点在下面就不介绍了。
Event Level Reset:
该节点只存在于关卡蓝图中,以及只在服务器上执行,若是单机游戏,那么线下客户端会被视为它视为那个服务器。相当于多人游戏的BeginPlay节点,不同点就是当player died,level不需要重新加载。
Event Actor Begin Overlap:
Overlap,重叠的意思,就很好理解了。当发生重叠的Actors同时具备下面两个条件,这个节点就会被响应执行:
- Actors的Collosion系统必须允许overlap
- Actors的
Generate Overlap Events需设置为true
| Item | Description |
|---|---|
| Output Pins | |
| Other Actor | 这里的撞击需要指定哪个Actor,其它Actors与具有该蓝图的Actor撞击不会响应该节点。(就和之前讲Variables最后一个小节里的跟着做一遍的相同,那里需要拿个像吸管的东西在ViewPort中指定一个Actor) |
Event Actor End Overlap:
(上图表示不再重叠后,指定的那个Actor会被销毁)
与上边的Event Actor End Overlap几乎完全相同,只有一点,就是响应是在那个指定的Actor不与具有该蓝图的Actor重叠的时候,即走出了重叠区域时会响应。
Event Hit:
相关的Actors发生撞击后,只要有一个相关的Actor的碰撞设置中Simulation Generates Hit Events为true,这个节点就会相应。
另外这里有一段需要注意的目前看不懂,贴这儿:If you are creating movement using Sweeps, you will get this event even if you don't have the flag selected. This occurs as long as the Sweep stops you from moving past the blocking object.
| Item | Description |
|---|---|
| Output Pins | |
| My Comp | PrimitiveComponent ,该蓝图的Actor所有的PrimitiveComponent |
| Other | Actor,碰撞中的另一个Actor |
| Other Comp | PrimitiveComponent ,碰撞中另一个Actor的PrimitiveComponent |
| Self Moved | Boolean,被撞时,对 Hit Normal 和 Hit Impact Normal 的方向进行调整,以表现出所受到的力 |
| Hit Location | Vector,两个Actor的碰撞接触点 |
| Hit Normal | Vector,撞击的方向 |
| Normal Impulse | Vector,撞击所产生的力 |
| Hit | Struct HitResult,一次撞击中所产生的所有数据,可以分解它获得单个数据 |
Event Any Damage:
(上图表示溺水后受到伤害)
此事件节点仅在服务器上执行。在单机游戏中,本地客户端即视为服务器。
此事件在Actor受到整体伤害(从四面八法来的伤害)时响应,如溺水,毒气,高温等。
| Item | Description |
|---|---|
| Output Pins | |
| Damage | Float ,传递给该Actor的伤害 |
| Damage Type | Object DamageType ,这个对象包含收到伤害时的其它附加信息 |
| Instigated By | Actor,负责间接造成伤害的Actor,如枪,手雷 |
| Damage Causer | Actor,负责直接造成伤害的Actor,如子弹,爆炸 |
Event Point Damage:(点伤害)
(上图表示收到伤害,Actor的生命值会减少,当Actor的头部收到伤害,生命值变为-1)
此事件节点仅在服务器上执行。在单机游戏中,本地客户端即视为服务器。
| Item | Description |
|---|---|
| Output Pins | |
| Damage | Float,传递给该Actor的总伤害 |
| Damage Type | Object DamageType,这个对象包含收到伤害时的其它附加信息 |
| Hit Location | Vector ,Actor收到伤害的位置 |
| Hit Normal | Vector ,碰撞的方向 |
| Hit Component | PrimitiveComponent,被撞击的Actor的PrimitiveComponent |
| Bone Name | Name ,被击中的部位名 |
| Shot from Direction | Vector,伤害来源的方向 |
| Instigated By | Actor,负责间接造成伤害的Actor,如枪,手雷 |
| Damage Causer | Actor,负责直接造成伤害的Actor,如子弹,爆炸 |
Event Radial Damage:(辐射伤害)
此事件节点仅在服务器上执行。在单机游戏中,本地客户端即视为服务器。
| Item | Description |
|---|---|
| Output Pins | |
| Damage Received | Float ,该事件中受到的伤害 |
| Damage Type | Object DamageType,这个对象包含收到伤害时的其它附加信息 |
| Origin | Vector,3D空间中伤害来源的位置,是位置不是方向 |
| Hit Info | Struct HitResult,一次撞击中所产生的所有数据,可以分解它获得单个数据 |
| Instigated By | Controller ,造成伤害的player或AI |
| Damage Causer | Actor ,直接造成伤害的Actor,如子弹,激光,角色的拳击 |
Event Actor Begin Cursor Over:
当可以使用鼠标的情况下,光标移动到该蓝图的Actor上,该事件就会响应。
Event Actor End Cursor Over:
当可以使用鼠标的情况下,光标从该蓝图的Actor上移开,该事件就会响应。
Event Begin Play:(略)
Event End Play:(略)
Event Tick:(略)
Event Receive Draw HUD:
该节点只存在于继承自HUD类的蓝图里。
允许用蓝图指挥绘制HUD,绘制HUD的节点需要此事件节点响应后再绘制。
两个out pin都很容易理解。
Custom Event
自定义事件,自定义在什么情况下会响应,从而做出一些事件,或在蓝图中一大堆节点里的任意地方调用,也可以在一个蓝图中创建,在另一个蓝图中调用。
在蓝图里右键搜AddCustomEvent可以直接创建,创建后长这个样。
<img src="https://docs.unrealengine.com/4.27/Images/ProgrammingAndScripting/Blueprints/UserGuide/Events/Custom/add_custom_event.webp" style="zoom: 67%;" /

细节面板长这样,新版本里Graph下还有KeyWord输入选项,用以快速搜索此节点。
很好理解,Replicates有关网络,暂时不管,CallInEditor勾选,即允许在别的蓝图里调用此事件蓝图,非关卡蓝图类(即自己创建的蓝图类)之间可以搜到彼此创建的自定义事件,但无法直接搜到关卡蓝图里的自定义事件,看到一个方法是调用ExecuteConsoleCommand节点,在Command注脚里填上ce [CustomEventName],就可以调用关卡里的自定义事件了。
主动调用它时,就长下面这样。

不像前面所说的那些事件节点在同一个蓝图里只能被调用一次,自定义的事件可以被多次调用,另外说一下,如果编译时自定义节点上出现Warnning或Error,先看看右键它并选择Refresh,或是到ContentBrowser里右键该蓝图类文件,点击Refresh,以Refresh所有节点,能解决的话,那原因基本上就是在自定义事件的设置里改动了参数。












浙公网安备 33010602011771号