UE4蓝图实战:从零构建交互式开关门系统

【虚幻引擎】UE4初学者系列教程(蓝图篇)-全中文新手入门教程(含谌嘉诚课程笔记,含蓝图节点详细介绍,即时更新中~) 在虚幻4引擎里蓝图是一种可视化蓝图编程工具,这个词在大家学习这门课程之前应该就有听说。 阅读详情

1. 蓝图入门:可视化编程的“积木”世界

如果你刚接触虚幻引擎4(UE4),看到“蓝图”两个字可能会有点懵。别担心,你可以把它想象成一个超级强大的“可视化积木”系统。我们程序员写代码,是用一行行英文单词和符号来指挥电脑。而蓝图呢,就是把那些复杂的代码逻辑,变成了一个个看得见、摸得着的彩色“节点”和“连线”。你不需要记住任何编程语法,只需要像搭乐高一样,把不同的功能节点用线连起来,就能创造出游戏里的各种交互和行为。我刚开始用的时候也觉得不可思议,但上手试了两次之后,发现这简直是给策划和美术同学,甚至是编程新手打开了一扇新世界的大门。

蓝图系统之所以强大,是因为它背后其实是一套完整的、面向对象的编程思想。你在蓝图中创建的每一个“类蓝图”,都相当于定义了一种新的“物品模板”。比如,我们这次要做的“门”,就是一个类蓝图。你在这个模板里设计好这扇门怎么开、怎么关、用什么动画。然后,你可以把这个模板拖到游戏场景里,想放几扇就放几扇,每一扇都是独立的,互不干扰。这就像你用模具做饼干,模具(类蓝图)决定了饼干的形状和花纹,而烤出来的每一块饼干(对象实例)都是可以独立食用的。理解这一点非常重要,它是我们后续所有工作的基础。

在开始动手做门之前,我们得先搞清楚蓝图编辑器里那些花花绿绿的节点都是干嘛的。最常见的有几种:事件节点(比如游戏开始、玩家按下一个键、两个物体撞在一起)、函数节点(执行某个具体操作,比如让物体移动或旋转)、变量节点(用来存储信息,比如门现在是开着的还是关着的)。我们的所有逻辑,就是通过响应“事件”,然后执行一系列“函数”,并可能改变一些“变量”的值来实现的。听起来是不是比直接面对黑底白字的代码要亲切多了?接下来,我们就用这堆“积木”,从零开始搭一扇能交互的门。

2. 场景搭建与碰撞基础:让门“真实”存在

首先,我们得有一扇门。打开UE4,创建一个新的“第三人称”模板项目。在内容浏览器里,你可以找到很多现成的模型,或者从网上下载一个门的静态网格体(Static Mesh)导入进来。我建议初学者先用引擎自带的或一些简单的几何体代替,比如用两个长方体拼成一扇门,这样能更专注于逻辑本身。把门的模型拖到场景里,调整好大小和位置。这时候你运行游戏,控制角色走过去,会发现一个尴尬的事情——你直接穿门而过了!这是因为模型默认只有“样子”,没有“体积”。

在虚幻引擎里,物体之间要能发生“接触”、“阻挡”或者“重叠”这类交互,全靠一个叫“碰撞”(Collision)的东西。我们需要给门的模型添加碰撞体。选中场景里的门模型,在细节(Details)面板里,找到“碰撞”(Collision)部分。最简单的方法是点击“碰撞”(Collision)下拉菜单,选择“添加简单碰撞”或“添加盒体简化碰撞”。UE4会自动根据模型的形状生成一个大概的碰撞体积,比如一个盒子或者一个胶囊体,把模型包在里面。对于门这种方方正正的物体,盒体碰撞(Box Collision)就非常合适。

不过,自动生成的碰撞盒大小可能不太精确。这时候你可以进入模型的编辑模式(双击模型或在细节面板点击“编辑静态网格体”),在碰撞体编辑视图中手动调整这个绿色线框盒子的大小和位置,让它严丝合缝地包裹住你的门。这里有个小技巧:调整时如果觉得移动或缩放不精细,可以按住键盘上的“Ctrl”键再进行拖动,你会发现移动的步长变小了,能进行更精确的微调。确保碰撞体完全包裹住门的可视模型,这样角色走到门前才会被实实在在地挡住,感觉门是“真实”存在的。这是所有物理交互的第一步,也是很多新手容易忽略,导致后续逻辑失灵的关键点。

3. 触发器的奥秘:如何告诉门“有人来了”

现在门有体积了,角色撞不上去了。但我们想要的是角色接近门时,门自动打开,而不是撞上去。这就需要用到“触发器”(Trigger)。触发器是一种特殊的碰撞体,它本身不可见,也不会阻挡物体,但它能检测是否有其他物体进入或离开它的范围,并触发相应的事件。你可以把它想象成一个隐形的感应区域。

我们在门的旁边放置一个触发器。在组件面板,点击“添加组件”(Add Component),搜索“Box Collision”,并重命名为“OpenTrigger”之类的名字以便识别。把这个盒体触发器组件添加到门的蓝图根组件下(注意,是作为门的子组件,而不是独立放在场景里。这一点后面会解释为什么重要)。然后,在视口里调整这个绿色线框盒子的大小和位置,让它覆盖住门前一小块区域,大概就是角色站过去准备开门的位置。

这个触发器就是门的“眼睛”或“感应器”。当角色(或其他你指定的物体)走进这个区域时,触发器就会说:“喂,有人来了!”并产生一个“开始重叠”(Begin Overlap)事件。当角色离开这个区域时,它又会说:“人走了。”并产生一个“结束重叠”(End Overlap)事件。我们的开门和关门逻辑,就将绑定在这两个事件上。通过这种方式,我们实现了无需直接碰撞(推门)的间接交互,体验更加自然,也是游戏中实现各种区域触发、机关触发的标准做法。我刚开始做的时候,总把触发器的碰撞预设(Collision Preset)设错,导致它要么什么都检测不到,要么把角色弹开,这块需要留意一下,通常设为“OverlapAll”或自定义仅与角色通道重叠即可。

4. 核心蓝图逻辑:让门动起来

好了,舞台搭好,演员就位,现在该写“剧本”了。在内容浏览器中右键,选择“蓝图类”(Blueprint Class),然后选择“Actor”作为父类,命名为“BP_Door”。双击打开这个蓝图类,我们将在它的“事件图表”(Event Graph)里编写所有逻辑。

首先,我们需要响应触发器的事件。在组件面板选中我们之前添加的“OpenTrigger”盒体碰撞组件,然后在右侧细节面板的事件部分,点击“开始重叠”(On Component Begin Overlap)和“结束重叠”(On Component End Overlap)后面的那个小加号。这会在事件图表中自动创建两个事件节点。这两个节点就是我们的逻辑起点:当有东西进入触发器时,执行“开始重叠”后面连着的所有操作;当有东西离开时,执行“结束重叠”后面的操作。

接下来,我们要让门旋转来实现开关。在蓝图图表中右键,搜索“Add Actor Local Rotation”(添加Actor本地旋转)。这个节点可以改变蓝图Actor自身的旋转角度。我们把它连在“开始重叠”事件后面。但是,直接旋转一个固定角度(比如Y轴旋转90度)会显得非常生硬,门会“瞬移”到打开状态,毫无动画感。为了让动作平滑,我们需要引入一个强大的工具——时间轴(Timeline)。

时间轴可以理解为一个控制动画进度和数值变化的曲线编辑器。在图表中右键搜索“Timeline”添加一个时间轴节点。双击它打开编辑窗口,点击“添加浮点轨道”(Add Float Track),我们可以创建一条控制旋转角度的轨道。在轨道上,我们至少需要两个关键帧:在时间0.0秒时,值为0.0(门初始关闭状态);在时间1.0秒时,值为90.0(门打开到90度)。这样,时间轴在1秒内,会输出从0到90的连续变化值。

然后,回到主图表,将时间轴的“更新”(Update)引脚输出的浮点值,连接到“添加Actor本地旋转”节点的“旋转”(Delta Rotation)输入上。但是要注意,“添加Actor本地旋转”需要的是一个旋转量增量,而时间轴输出的是目标角度。所以我们需要一个转换:用当前帧时间轴输出的角度值,减去上一帧的角度值,得到这一帧应该旋转的增量。更简单的做法是,使用“设置Actor相对旋转”(Set Actor Relative Rotation)节点,直接将门的旋转设置成时间轴输出的角度值对应的旋转器。为了让旋转更自然,你还可以在时间轴里右键点击曲线,将插值模式从线性(Linear)改为例如“Cubic Interp”(立方插值),这样门的运动会带有缓入缓出的效果,就像真实的门一样有惯性。

现在,把“开始重叠”事件连接到时间轴的“播放”(Play)引脚,把“结束重叠”事件连接到时间轴的“反向播放”(Reverse)引脚。运行游戏,当你走进触发器区域,门应该平滑地打开;离开区域,门又平滑地关上。一个基础的自动门就完成了!

5. 进阶交互:按键控制与状态管理

自动门虽然方便,但很多时候我们想要更主动的控制,比如按“E”键开门。这需要我们引入玩家输入和状态判断。首先,我们不能让角色一进入触发器就自动开门了。所以,先修改一下逻辑:当“开始重叠”事件触发时,我们并不直接播放时间轴,而是设置一个标志,比如一个布尔(Boolean)变量,命名为“bPlayerIsNear”,并将其设为“True”,表示玩家在附近。同样,“结束重叠”时将其设为“False”。

然后,我们需要响应按键输入。在事件图表中右键,搜索“E”键(取决于你的输入设置),会出现类似“InputAction E”或“Key E”的事件节点。把这个按键事件拖进来。当按下E键时,我们首先要判断“bPlayerIsNear”是否为True(玩家是否在门前)。这需要一个分支(Branch)节点。如果为真,我们才执行开门或关门动作。

但这里有个新问题:按一次E开门,再按一次E应该关门。也就是说,门自己需要记住当前是开是关的状态。我们再创建一个布尔变量,命名为“bDoorIsOpen”,默认值为False(关)。当按下E键且玩家在附近时,我们进入分支判断:如果“bDoorIsOpen”为False(门关着),我们就播放时间轴开门,并将“bDoorIsOpen”设为True;如果“bDoorIsOpen”为True(门开着),我们就反向播放时间轴关门,并将“bDoorIsOpen”设为False。

这个“判断-执行-改变状态”的逻辑非常经典。为了让蓝图更简洁,这里可以介绍一个实用节点:FlipFlop。FlipFlop节点有一个输入执行引脚和两个输出执行引脚(A和B)。每次它被执行时,会交替从A和B输出。我们可以把按下E键后的执行线连到FlipFlop的输入,然后把A输出连接到“播放时间轴并设置门为开”的逻辑,B输出连接到“反向播放时间轴并设置门为关”的逻辑。这样就不需要再用分支和变量来手动管理开关状态了,FlipFlop帮我们记住了上一次执行的是哪一边。你可以两种方法都试试,看看哪种更符合你的思维习惯。我在实际项目中,简单的两种状态切换喜欢用FlipFlop,逻辑更清晰;如果状态多于两种,或者有更复杂的条件判断,还是会用变量加分支的方式,灵活性更高。

6. 优化与扩展:从一扇门到整个游戏

当我们做好一扇完美的门之后,你可能会想,我的游戏里有几十扇门,难道要一个个重复这些步骤吗?当然不用!这就是使用“类蓝图”的巨大优势。我们创建的“BP_Door”就是一个模板。你只需要在内容浏览器里找到它,然后拖到场景中,想放多少扇就放多少扇。每一扇都是独立的实例,它们都有自己的触发器、自己的时间轴、自己的开关状态。你在一扇门前按E,绝不会影响到另一扇门。这就是面向对象编程中“实例化”的威力。

基于这个基础,我们可以做很多有趣的扩展。比如双开门:创建两个门的模型,作为同一个蓝图Actor的两个子组件。在旋转逻辑里,让一扇门绕其左侧轴顺时针旋转,另一扇门绕其右侧轴逆时针旋转,使用同一个时间轴驱动,就能实现优雅的双开动画。

再比如上锁的门:我们可以在按键判断之前,再加一层分支。创建一个布尔变量“bHasKey”,默认False。只有当“bHasKey”为True时,按下E键的开门逻辑才会真正执行。那么“bHasKey”怎么变成True呢?这就需要另一个交互:拾取钥匙。你可以创建一个“BP_Key”蓝图类,当角色与它重叠时,触发一个事件,设置角色身上某个变量(或者用游戏实例GameInstance存储)的“bHasKey”为True,然后销毁钥匙模型。这样,你就完成了一个简单的解谜元素。

更高级一点,我们可以根据角色相对于门的位置,决定门朝哪个方向开。这需要一点向量运算。当触发开门时,获取角色的位置和门的位置,计算向量差,再与门的正方向向量进行点积运算。根据点积结果的正负,可以判断角色在门的哪一侧,从而决定旋转角度是正90度还是负90度。这个功能能让交互更加真实合理。

所有这些扩展,其核心思想都是一样的:事件驱动、状态管理、组件复用。蓝图将这些概念可视化,让你能直观地搭建出复杂的游戏逻辑。踩过几次坑之后,我最大的体会是,一定要把蓝图整理得干净整洁,多用“序列”(Sequence)节点来组织同一事件下的多个并行操作,给重要的变量和节点写上注释。一个混乱的蓝图图表,过一周你自己都看不懂。当你掌握了这些基础,你会发现,不仅仅是开关门,游戏里的拾取物品、开启机关、对话系统、敌人AI,其底层逻辑都是相通的。用蓝图这套“积木”,你已经有能力去搭建一个真正可玩的世界了。

UE4-蓝图(可视化编程)学习 此时我们运行游戏,会发现我们的角色可以穿过我们门的模型,说明我们没有给门添加碰撞。在调整大小时,我们会遇到一个问题,就是我们的模型大小无法调节的非常的精细,那么。添加事件 当我们的人物进入到盒子出发器时的事件 和离开后出发的事件。关卡蓝图一般是写一下场景中的互动,会将这些逻辑写在关卡蓝图中。然后选中我们的合体触发器,然后在选择蓝图。此时我们对于门模型的碰撞就添加好了。上面是进入事件,下面是离开事件。将我们互动的逻辑写在关卡蓝图中。在这里可以调整大小的改变强度。a.将门模型改为可移动的。 阅读详情

相关推荐

UE4安装教程,虚幻引擎安装教程,UE4的安装

UE4安装教程,虚幻引擎安装教程开始安装(1)打开主页功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 开始安装 虚幻引擎4(UE4)的安装比较简单,如果只做场景的搭建、蓝图的编写以及简单的C++函数插件开发,只需安装引擎即可,不太

weixin_38839543的博客 1万+

UE4蓝图基础

UE4蓝图基础

ttod的博客 5005

虚幻引擎5中的蓝图入门指南(UE5.6)

《虚幻引擎5蓝图入门指南》摘要:本文介绍了UE5中可视化编程工具蓝图的基础使用方法。从安装UE5开始,详细讲解了创建第一个蓝图Actor的步骤,包括添加组件、事件图和简单逻辑实现。文章还涵盖了蓝图核心概念(事件、变量、函数、流程控制)和一个开门动画的简单示例。指南强调蓝图易于学习且适合快速原型开发,同时建议复杂逻辑可结合C++实现。最后提供了常见问题解答和学习资源推荐,帮助初学者快速上手UE5蓝图系统。

m0_46642453的博客 3326

UE4入门级蓝图学习笔记整理

之前学的内容整理复习

xx_xb的博客 4008

虚幻引擎(UE4)中重要的Class类

虚幻引擎4(简称UE4)的GamePlay框架提供了一套强大的类来构建游戏。你的游戏可以是一个射击游戏,农场模拟器游戏,一个深度的RPG游戏,GamePlay框架可以帮助你实现这些复杂的工作。理解这个框架对于成功和高效是至关重要的。 适用群体 对UE4感兴趣,特别是那些正在学习UE4C++,并想了解更多关于虚幻的游戏框架的开发者。这篇文章介绍了您将在游戏框架中使用的核心类,并解释了它们的用法、引擎如何实例化它们以及如何从游戏代码的其他部分访问这些类。提供的大多数信息也适用于蓝图。 GamePlay框架

刀客 3661

UE4蓝图基础入门(一)变量与蓝图

文章目录2.蓝图变量基础2.1 Event beginplay2.2 Delay(延迟)2.21 Delay2.22 Retrrigerable Delay2.3 EventTick 2.蓝图变量基础 2.1 Event beginplay 当开始游戏时,此节点自动触发。 2.2 Delay(延迟) 2.21 Delay 此节点顾名思义为延迟机制,节点中Duration中的值为延迟的时间(s)...

WLSTLA 3660

UE4-蓝图基础

UE4蓝图学习

qq_52825422的博客 5274

【虚幻引擎】带你了解UE4

UE4,全称“Unreal Engine 4 ”翻译成中文为“虚幻引擎4”虚幻4是一套为游戏开发者设计和构建游戏、模拟和可视化的集成工具。(简单来说就是做游戏的软件)

2201_75537871的博客 7035

虚幻引擎4蓝图节点

收集一些自己了解的蓝图节点,以便更好地学习。

害怕也得前进 1万+

使用虚幻引擎|UE5制作自动开关门

这篇教程介绍了在UE5中创建自动开关门的蓝图实现步骤:1)创建Actor蓝图并添加门模型组件;2)设置碰撞检测区域;3)编写开门/关门逻辑,使用Timeline控制平滑移动;4)调整参数优化运动曲线;5)测试及扩展功能(声音、多门联动等)。通过事件图表处理碰撞触发,利用插值实现自然动画效果,为场景交互提供基础解决方案。

2401_83930385的博客 1505

UE4虚幻引擎蓝图艺术大师三部曲:从入门到精通

虚幻引擎4(Unreal Engine 4,简称UE4)是由Epic Games公司开发的一款功能强大的游戏开发引擎,它集成了高质量图形渲染、物理模拟、音频处理、网络支持以及一套完整的开发工具,自发布以来,已经成为众多开发者首选的游戏制作平台之一。虚幻引擎(Unreal Engine)是Epic Games开发的一款功能强大的游戏引擎,它的第一个版本在1998年发布。随着时间的推移,虚幻引擎不断进步,成为今天广泛使用的多用途游戏引擎。

weixin_42376614的博客 1649

在虚幻引擎4(UE4)中使用蓝图的详细教程

蓝图是虚幻引擎中的一种可视化脚本工具,允许开发者通过图形化的方式创建游戏逻辑。与传统的编程语言相比,蓝图的优势在于其直观性和易用性,使得没有编程经验的开发者也能轻松上手。通过本篇文章,我们详细介绍了 UE4 中蓝图的基本概念、常用操作以及实例示范。蓝图作为虚幻引擎的重要组成部分,极大地简化了游戏逻辑的实现过程,使得开发者能够更专注于创意和设计。多尝试不同的蓝图功能,不断探索其强大之处。参考官方文档,获取更多关于蓝图的详细信息和最佳实践。希望这篇文章能为你在虚幻引擎4中的蓝图开发提供帮助和启发!

孤客科技 7753

UE4蓝图入门思维导图

UE4蓝图入门

【干货分享】UE5虚幻引擎:蓝图通信详解,轻松掌握必备技能!

创建一个蓝图接口,是全局的。名叫(BPI_MyInterface),同时新建一个接口函数OnTakeWeaponFire(只有名称,参数信息,没有函数具体实现)获取被通信方的引用,然后通过引用调用接口函数(接口函数会出来两种,不要选错了,看下面图片)需要使用蓝图接口的类,在类设置(Class Setting)中继承该接口。编译蓝图后,再重写接口函数。(不编译蓝图的话,找不到接口函数)

hhw_hhw的博客 9925

开源大模型本地部署实战:Llama、DeepSeek、Qwen选型与工程落地指南

大语言模型(LLM)本地部署已成为AI工程化核心环节,其本质不是比拼参数量或榜单分数,而是考察模型架构、推理引擎、量化支持、IDE集成与多模态扩展能力的系统性适配。Llama以纯净Transformer结构成为通用底座,依赖llama.cpp和GGUF量化实现跨平台轻量推理;DeepSeek深度优化代码与数学推理,通过原生OpenAPI、FlashAttention-2及tensor parallelism显著降低API延迟;Qwen则采用模块化设计,支持视觉编码器(Qwen-VL)、生物计算(Qwen-B

weixin_29952383的博客 396

LightGBM学习笔记

LightGB学习笔记1. lightgbm概述1.1 lightgbm介绍1.2 lightgbm和xgboost对比2 .直方图算法及改进2.1 直方图算法2.2 直方图算法改进2.2.1 GOSS算法3.树的生长策略4.系统设计5. 实战 lightgbm是基于boosting的学习框架,使用的是基于决策树的学习算法,具有更快的训练速度、更低的内存使用、更高的正确率、并且能够支持并行化学习,可以用来处理大规模数据,本文主要是针对学习视频https://www.bilibili.com/video/BV

一一xi的博客 3306

虚幻引擎-开关门的实现(蓝图)

在虚幻引擎中,一个简单的自动感应门是通过触发器感应玩家是否到达了设定的开门范围,从而开门。这个触发开门的范围就是触发器的范围。在场景中搭建墙、门框、门,同时搭建一个触发框。当人物走到触发框的范围则开门,离开则关门(选中的橙色表示触发框)。在关卡蓝图中事件图表对开关门逻辑进行编辑。首先,需要给触发框添加一个开始接触事件和一个结束接触事件,分别为OnActorBeginOverlap和OnActorEndOverlap(括号中间为对触发框的命名)

WANG__SY的博客 2500

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出

MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。

TEL18967112838的博客 2076

【虚幻引擎】UE4/UE5插件

UE4/UE5 创建自定义的插件

qq_43021038的博客 6176

【侯俊霞全网最全收集--PLC1200/200SMART(88+93课时) 第1章】

第1章:零基础快速入门西门子S7-1200

问就ycy的博客 2046

Carla学习笔记(一)服务器跑carla本地显示窗口

其中host后替换为你的服务器IP,-carla-rpc-port和-p后为端口号,需要一致。python3 manual_control.py也可以替换为其他python脚本。因为电脑配置不够,所以在服务器跑carla,本地运行PythonAPI里的样例。把carla仓库的PythonAPI拷贝到本地,或者直接去官方里下载一下。

做题记录 4978

在虚幻引擎5中构建你的首款游戏 - 09 - 压力板和开关门

在虚幻引擎5中构建你的首款游戏 - 09 - 压力板和开关门 前言介绍: 原版地址: << [功能亮点]在虚幻引擎5中构建你的首款游戏(官方字幕)_哔哩哔哩_bilibili >> << https://www.bilibili.com/video/BV1M34y1x7tc >> 官网地址: << Your First Game In Unreal Engine 5 | Tutorial (epicgames.com) >> <

Lovely_him的博客 2740

ThingsBoard PE专业版解决方案技术文档——温度&湿度

温湿度解决方案

weixin_67440240的博客 820
上一篇: 利用Matlab/Simulink仿真工具深入解析Sigma-Delta ADC设计
下一篇: 嵌入式温湿度监测实战:SHT30/SHT20驱动模块设计与优化
php55
博客等级 码龄15年 51粉丝 1553原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值