虚幻引擎节点 Do Once 使用方法

Do Once 节点像一个“单次开关”,能确保它后面的逻辑只被触发一次,再次触发会直接被忽略。这是一个很常用的工具,可以用来实现“仅一次”的游戏逻辑,比如初始化、首次事件触发等。下面是一些具体的使用场景。

🤖 场景一:AI首次发现玩家 (Do Once基础用法)

这个例子能让你更直观地理解它的工作方式。目标是当AI首次与玩家进入“已发现”状态时,触发一段对话逻辑,并确保这个过程只发生一次。

  1. 创建蓝图:创建一个继承自 Character 的新蓝图,命名为 BP_Enemy

  2. 添加碰撞体:在 BP_Enemy 蓝图中添加一个 Sphere Collision(球形碰撞体),调整为合适大小,并确保在其细节面板中,Collision Presets 设置为 Custom,并勾选 Generate Overlap Events

  3. 添加自定义事件:在 BP_Enemy 的事件图表中,右键添加一个自定义事件,命名为 OnFirstSpotPlayer。这个事件将用于播放对话。

  4. 设置核心逻辑 (Do Once)

    • 选中 BP_Enemy蓝图中的 Sphere Collision 组件,在细节面板点击 On Component Begin Overlap (Sphere Collision) 旁边的绿色加号。

    • 从 OnComponentBeginOverlap 节点拖出引脚,搜索并放置 Do Once 节点。

    • 从 Do Once 节点的 Out 引脚连接到 Cast To BP_ThirdPersonCharacter(将其目标设置为从 OnComponentBeginOverlap 节点引出的 Other Actor,注意替换为你的角色蓝图名称)。成功转换后,再从 As BP_ThirdPersonCharacter 引脚拖出,调用 OnFirstSpotPlayer 事件。

    • 最终连接如下图

  5. 测试逻辑:编译并保存 BP_Enemy,将其放入关卡。运行游戏,控制角色第一次接触AI的球形触发器时,会播放对话;之后无论怎么触发,对话都不会再播放,且Print String不会再打印新内容。

🧩 场景二:可重置的一次性钥匙门 (配合Reset使用)

这个案例展示了如何通过Reset输入引脚让Do Once节点“重置”,恢复执行能力。

  1. 创建蓝图接口:创建一个蓝图接口,命名为 BPI_Door,并添加一个函数 ResetDoor

  2. 创建门Actor:新建蓝图类,继承自 Actor,命名为 BP_Door

    • 为其添加 Static Mesh 等视觉组件。

    • 在事件图表中,实现逻辑:

      • 从 BeginPlay 事件拖出,连接到一个 Do Once 节点。

      • 从 Do Once 的 Out 引脚连接,设置门为“上锁”的初始状态。

      • 实现接口:实现 BPI_Door 接口,在 ResetDoor 事件后,连接一个 Reset 引脚连接到 Do Once 节点的 Reset 输入引脚,用于重置节点。

  3. 创建钥匙Actor:新建蓝图类,继承自 Actor,命名为 BP_Key

    • 添加 Box Collision 作为触发器。

    • 在其事件图表中,实现 OnComponentBeginOverlap 事件。

    • 从 Other Actor 引脚拖出,尝试 Cast To BP_Door。如果转换成功,则从 As BP_Door 引脚调用接口函数 ResetDoor

  4. 测试逻辑:运行游戏,门最初处于上锁状态;当角色拾取钥匙(与 BP_Key 重叠)后,BP_Key 会调用 BP_Door 的 ResetDoor 函数,Do Once 节点被重置,门恢复正常功能。再次碰门,“门是锁着的”信息将不再打印。

🕒 场景三:技能冷却管理系统 (Do Once与Delay组合)

这个组合是一种非常经典的技能冷却、攻击间隔的实现方式。

  • 技能冷却:每次使用技能,通过Do Once限制技能逻辑只执行一次,然后进入Delay等待冷却。在Delay结束后再通过其他逻辑重置Do Once,允许技能再次使用。

  • 防止高频触发:对于连续攻击,可在攻击动作末尾调用Reset重置Do Once;对于单次大伤害,可利用Do Once确保伤害只生效一次,再用Delay控制伤害判定窗口的持续时间。

💡 高级用法与技巧:Do Once MultiInput 节点

如果你需要一次性重置多个Do Once节点,使用布尔变量的方式可能比较繁琐。这时可以使用 Do Once MultiInput 节点来实现集中管理。

  • 核心特性:每个输入引脚都相当于一个独立的Do Once节点,但共享同一个重置 (Reset)引脚。勾选其细节面板中的 Start Closed 选项,可以让节点在开始时处于“已使用”状态,需要重置后才能第一次执行

🔧 常见问题与排查

  • 动画未重置:请确保Reset输入引脚只控制Do Once节点的状态。要重置动画状态,你需要单独调用重置动画的逻辑。

  • 网络同步问题Do Once节点的状态默认是局部的。在多人游戏中,你需要将重置它的逻辑放在服务器上执行,并通过 Run on Server 和 Multicast 等RPC(远程过程调用)来同步。

  • 接口实现混乱:如果多个Actor需要被重置,统一使用蓝图接口是一种更整洁、解耦的方式。确保你的重置事件是由接口定义的。

Do Once节点是一个看似简单但很有用的工具。希望这几个案例能帮你更好地掌握它的用法。

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容