UE4蓝图事件系统:BlueprintImplementableEvent与BlueprintNativeEvent深度解析
1. 项目概述蓝图事件系统的核心选择在UE4的蓝图开发中我们经常需要在C父类中定义一些函数并期望在蓝图子类中能够被重写或实现以实现灵活的游戏逻辑扩展。这时BlueprintImplementableEvent和BlueprintNativeEvent这两个UFUNCTION宏标记就成了绕不开的核心工具。乍一看它们的功能似乎很相似都是为了让蓝图能够“处理”C定义的函数。但在我实际参与过的多个UE4项目里从独立小品到中型团队协作错误地选择这两者之一往往会导致后续开发流程的混乱、性能的浪费甚至是架构上的重构。今天我就结合几个真实的项目场景把这两个关键字的里里外外、使用时的“坑”与“爽点”彻底拆解清楚。简单来说BlueprintImplementableEvent是一个纯粹的“接口”或“信号”。你在C里声明“这里有个事件蓝图你可以来响应它”但C本身不提供任何默认实现。而BlueprintNativeEvent则是一个“带有默认实现的虚函数”。你在C里不仅声明了它还提供了一个基础实现通常在一个以_Implementation为后缀的函数里蓝图可以选择性地覆盖它也可以直接使用C的默认逻辑。这个根本性的区别决定了它们完全不同的应用场景和设计哲学。理解不透彻就很容易用错地方。2. 核心机制深度解析与设计哲学2.1 BlueprintImplementableEvent纯粹的蓝图响应式接口BlueprintImplementableEvent的设计哲学是“事件驱动”和“解耦”。它的核心是C端只负责触发Call这个事件至于这个事件具体要做什么完全交给蓝图去定义。C端不关心也无法干涉蓝图的实现细节。技术实现原理当你在C头文件中用UFUNCTION(BlueprintImplementableEvent)标记一个函数时UE4的反射系统会为这个函数生成一个特殊的“事件调度器”。在C代码中你通过调用这个函数例如MyEvent()来触发它。但这个调用在运行时并不会直接跳转到某个具体的函数体而是向蓝图系统发送一个“信号”。如果某个蓝图实例比如一个派生自该C类的蓝图在事件图表中实现了这个事件节点那么信号就会传递过去并执行蓝图中的逻辑。如果没有任何蓝图实现那么这个调用就相当于一个空操作No-Op什么也不会发生。一个典型的使用场景是角色受到伤害在C的Character基类中我们声明一个UFUNCTION(BlueprintImplementableEvent) void OnTakeDamage(float DamageAmount);。当C逻辑如碰撞检测、伤害计算判定角色应该受伤时就调用OnTakeDamage(50.0f)。至于这50点伤害具体要产生什么效果——是播放受伤动画、显示伤害数字UI、触发屏幕特效还是播放音效——这些表现层的逻辑全部在角色蓝图里实现。C的伤害系统只负责传递“发生了伤害”这个事实和数值实现了游戏逻辑与表现逻辑的彻底分离。注意BlueprintImplementableEvent函数不能在C中提供函数体。如果你在.cpp文件中为其编写了实现编译器不会报错但这个实现永远也不会被执行。这是一个常见的理解误区。2.2 BlueprintNativeEvent可扩展的默认行为模板BlueprintNativeEvent的设计哲学则是“模板方法”和“可扩展的默认行为”。它承认大部分情况下某个功能有一套通用的、基础的实现方式但允许蓝图在特定情况下对其进行定制或完全重写。技术实现原理这个机制稍微复杂一些。当你声明UFUNCTION(BlueprintNativeEvent)时实际上会生成两个函数一个普通的虚函数例如void MyFunction();这是蓝图和C其他代码调用的接口。一个自动生成的、带有_Implementation后缀的虚函数例如void MyFunction_Implementation();这里存放着你在C中编写的默认实现。当你在C中调用MyFunction()时UE4的底层机制会检查当前对象可能是C实例也可能是蓝图实例是否在蓝图中覆盖了这个事件。如果没有覆盖则自动调用MyFunction_Implementation()如果被蓝图覆盖了则转而执行蓝图中的逻辑。蓝图覆盖时可以选择是否在覆盖逻辑中调用父类即C默认的实现。一个典型场景是交互系统的“开始交互”在C的InteractableActor基类中我们声明UFUNCTION(BlueprintNativeEvent) void BeginInteraction(APlayerController* Instigator);并在.cpp文件中实现BeginInteraction_Implementation比如这里只做一件事在游戏日志中输出一条“XXX被交互了”的默认信息。现在我们有一个“宝箱”蓝图继承自它。对于宝箱我们可能希望除了输出日志还要播放一个开箱动画、生成道具。这时我们就可以在宝箱蓝图中覆盖BeginInteraction事件在事件图表里我们先调用“Parent: BeginInteraction”来执行C默认的日志输出然后再连接播放动画和生成道具的节点。这样既保留了基类的通用行为又扩展了特定子类的特殊行为。两者最根本的对比表格特性BlueprintImplementableEventBlueprintNativeEventC默认实现不允许有。C端只声明不实现。必须有。在_Implementation函数中提供。蓝图中的必要性蓝图可以选择实现或不实现。不实现则事件触发无效果。蓝图可以选择覆盖或不覆盖。不覆盖则使用C默认实现。设计目的实现C到蓝图的单向事件通知彻底解耦。提供可被蓝图定制覆盖的默认行为模板。性能开销较低。本质是一个事件分发。略高。涉及虚函数调用和蓝图覆盖判断。调用父类实现不适用无父类C实现。在蓝图覆盖时可以显式调用“Parent”节点来执行C默认逻辑。适用场景表现层反馈受击、拾取、解耦的模块间通信。具有通用流程但需特化的行为交互、技能初始化、AI状态进入。3. 实战场景选择与架构设计心得理解了原理关键就在于如何在实际项目中做选择。这不仅仅是技术选型更是架构设计思路的体现。3.1 何时应首选 BlueprintImplementableEvent场景一纯粹的表现层View反馈。这是BlueprintImplementableEvent的“主场”。游戏核心逻辑数据、状态、规则在C中计算但计算结果的视觉、听觉表现应在蓝图里。例如伤害反馈C计算伤害值并扣血通过OnTakeDamage事件通知蓝图蓝图负责播放受击动画、显示飘血数字、触发屏幕抖动和音效。资源收集C判断玩家进入收集区域并增加资源数量通过OnResourceCollected事件通知蓝图蓝图播放拾取特效、更新UI动画。 这样做的好处是美术和特效设计师可以在蓝图中自由调整表现效果而无需程序员修改C代码或重新编译极大提升了迭代效率。场景二需要高度解耦的模块间信号。假设你有一个复杂的任务系统写在C里。当任务完成时它需要通知成就系统、UI系统、对话系统等多个其他模块。与其在C里硬编码调用这些模块的接口不如定义一个OnQuestCompleted的BlueprintImplementableEvent。任务系统C代码只负责触发这个事件。然后成就系统的蓝图、任务UI的蓝图、NPC对话的蓝图都可以分别监听并实现这个事件做出各自的响应。这种基于事件的松散耦合使得系统更容易维护和扩展。实操心得在使用BlueprintImplementableEvent时我习惯在函数命名上明确其“事件”属性例如使用OnXXX、DidXXX、NotifyXXX这样的前缀。这能让团队成员一眼就明白这个函数是一个“通知信号”具体行为在别处定义。3.2 何时应首选 BlueprintNativeEvent场景一具有标准流程但允许特化的行为。很多游戏对象的行为遵循一个通用模式但某些特定对象需要额外步骤。例如所有“可装备物品”在装备时OnEquipped可能都需要执行“附加到角色骨骼”和“更新角色属性”这两步C默认实现。但一把特殊的“火焰剑”在装备时除了上述两步还需要给角色添加一个火焰粒子特效和持续伤害的Buff。这时BlueprintNativeEvent就非常合适。火焰剑蓝图覆盖OnEquipped先调用父类实现完成通用步骤再添加自己的特效和Buff逻辑。场景二为蓝图设计者提供“安全钩子”Safe Hook。有些操作必须在某个特定时机执行且有一个最基础的、必须确保执行的安全逻辑。BlueprintNativeEvent的C默认实现可以充当这个安全网。比如一个游戏实体在BeginPlay时这是一个原生的BlueprintNativeEvent可能需要向游戏管理器注册自己。这个注册逻辑是至关重要的不能因为蓝图设计者的疏忽而丢失。我们可以在自定义的BeginPlay_Implementation里写入注册代码。这样无论蓝图设计者是否覆盖以及如何覆盖BeginPlay只要他们最终调用了父类实现这是良好习惯这个关键注册逻辑就一定会执行。场景三AI行为树中的自定义任务或装饰器。当你用C编写自定义的AI行为节点时经常需要暴露一些可配置的逻辑给蓝图。例如一个“判断是否看到敌人”的装饰器其核心判断算法在C中但“看到敌人后是否立即触发警报”这个布尔值可能因不同类型的AI而异。你可以将ShouldRaiseAlarm声明为BlueprintNativeEvent在C中默认返回false。这样普通的巡逻AI使用默认值而警觉性高的精英AI蓝图则可以覆盖此事件返回true。避坑指南使用BlueprintNativeEvent时最大的一个“坑”是忘记在蓝图覆盖中调用父类函数导致基类的关键逻辑被跳过。我个人的经验是在团队规范中强制要求除非明确知道后果否则在覆盖BlueprintNativeEvent时必须先连接“Parent”节点的执行引脚。同时在C的_Implementation函数里要有清晰的日志输出或注释说明这个默认实现完成了哪些关键工作提醒蓝图开发者注意。4. 高级应用、性能考量与混合模式4.1 参数传递与细节处理两者都支持参数传递包括基本类型、FVector、FRotator、AActor*等UE4反射系统支持的类型以及USTRUCT。但这里有几点需要注意输出参数Out ParametersBlueprintImplementableEvent不支持输出参数。因为它没有C实现体无法在C端填充输出值。所有需要返回的信息应通过输入参数传递如传递一个可修改的结构体引用或者通过定义另一个BlueprintCallable函数让蓝图来查询。而BlueprintNativeEvent是支持输出参数的因为它的调用流程最终会落到一个具体的函数实现上无论是C的还是蓝图的。返回值的处理对于有返回值的函数BlueprintNativeEvent的处理很直观。蓝图覆盖时可以返回一个新值。而BlueprintImplementableEvent虽然可以声明返回值但由于没有C默认实现在C端调用它时你得到的将是一个该类型的默认构造值如int返回0bool返回false。这通常不是你想要的结果。因此对于需要通过事件获取返回信息的场景应避免使用BlueprintImplementableEvent转而使用BlueprintNativeEvent或在C端提供BlueprintCallable的Getter函数。引用类型参数如果传递的是大型结构体如复杂的配置结构建议使用const 常量引用来避免不必要的拷贝开销这对两者都适用。4.2 性能影响浅析在绝大多数游戏逻辑中这两者的性能差异微乎其微不需要作为首要考量因素。但如果是在Tick函数中每帧调用成千上万次那么了解其开销是有意义的。BlueprintImplementableEvent开销主要在于通过反射系统查找并分发事件。如果该事件没有在蓝图实例中实现这个查找过程会很快失败开销极低。如果有实现则涉及从C上下文切换到蓝图虚拟机VM执行蓝图节点的开销。BlueprintNativeEvent每次调用都需要进行一次“是否被蓝图覆盖”的判断。如果未被覆盖则直接调用C虚函数开销很小接近普通虚函数调用。如果被覆盖则同样需要切换到蓝图VM执行并且比BlueprintImplementableEvent多一次判断的开销。结论是在性能敏感区域如大量实体每帧更新的逻辑如果确定该行为不需要蓝图定制最好使用普通的C虚函数或非虚函数。如果需要蓝图扩展BlueprintNativeEvent在未被覆盖时性能更优BlueprintImplementableEvent则更纯粹但两者在“被蓝图实现/覆盖”时的开销是同一量级的。优先根据设计需求选择而后在性能剖析Profiling中发现瓶颈时再考虑优化。4.3 混合使用模式强大的灵活性在实际项目中我经常将两者结合使用形成更强大的模式。模式BlueprintNativeEvent作为 “模板方法”内部触发BlueprintImplementableEvent这是一个非常实用的模式。例如一个UsableItem可使用物品的基类。// C 头文件 UCLASS() class AUsableItem : public AActor { GENERATED_BODY() public: // 这是一个蓝图可扩展的使用流程 UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category Item) void Use(APawn* InstigatorPawn); // 这是一个纯粹的事件用于通知使用成功后的表现 UFUNCTION(BlueprintImplementableEvent, Category Item) void OnUsedSuccessfully(APawn* InstigatorPawn); protected: // 默认的使用实现 virtual void Use_Implementation(APawn* InstigatorPawn); }; // C 源文件 void AUsableItem::Use_Implementation(APawn* InstigatorPawn) { // 1. 通用的使用前检查如冷却、距离 if (!CanBeUsedBy(InstigatorPawn)) { return; } // 2. 执行核心使用逻辑如消耗物品、应用效果 ExecuteCoreUseLogic(InstigatorPawn); // 3. 触发成功使用的表现事件 OnUsedSuccessfully(InstigatorPawn); // 4. 通用的使用后处理如进入冷却 PostUse(); }在这个设计里Use是一个BlueprintNativeEvent它定义了一个完整的使用物品的流程模板检查→执行→表现→后处理。任何派生自AUsableItem的C或蓝图类都可以通过覆盖Use来完全改变这个流程。OnUsedSuccessfully是一个BlueprintImplementableEvent它只负责“使用成功”这一刻的表现通知。Use_Implementation的默认流程会在适当的时候触发它。蓝图设计师可以在这个事件里自由添加音效、粒子、动画而无需关心整个使用流程。这种混合模式既保证了关键业务流程的可控性通过BlueprintNativeEvent模板又将易变的表现层充分解耦通过BlueprintImplementableEvent是架构清晰、易于协作的典范。5. 常见问题排查与调试技巧即使理解了原理在实际开发中还是会遇到各种问题。下面是我总结的一些常见“坑点”和解决方法。问题1在C中调用了BlueprintImplementableEvent但蓝图中的事件节点完全没有反应。检查1蓝图继承关系。确保你调用该函数的对象实例其蓝图类确实继承自你声明了该事件的C类。有时我们可能会错误地操作另一个不相关的蓝图实例。检查2事件实现。在蓝图的“事件图表”中右键搜索该事件名确认已经创建了该事件节点。一个常见的疏忽是在“我的蓝图”面板的“事件”列表里看到了这个事件但没有把它拖到图表中并连接逻辑这等同于没有实现。检查3作用域与权限。确保调用事件的C代码是在一个有效的、已生成的该类的实例上执行的。对于网络游戏要特别注意事件是在服务器端调用还是客户端调用以及该事件是否被正确地设置为Replicated或NetMulticast。调试技巧在C调用事件的位置前后添加UE_LOG日志输出。在蓝图事件节点的第一针添加一个“Print String”节点。通过观察日志可以清晰看到调用是否发生以及蓝图是否被触发。问题2覆盖了BlueprintNativeEvent但C中的默认实现_Implementation似乎也被执行了或者相反默认实现没执行核心原因这几乎总是因为在蓝图的事件节点中错误地处理了“Parent”调用。情况A想完全替换但默认逻辑还是跑了。这是因为你在蓝图中覆盖事件时连接了“Parent”节点的执行引脚。这会导致先执行C默认逻辑再执行你的新逻辑。如果不想执行默认逻辑应该不连接“Parent”节点直接从事件节点开始你的新逻辑链。情况B想扩展但默认逻辑没跑。这是因为你没有连接“Parent”节点。要扩展行为必须将事件节点的执行引脚连接到“Parent: FunctionName”节点再将Parent节点的输出执行引脚连接到你的新逻辑。调试技巧在C的_Implementation函数开头加一句醒目的日志如UE_LOG(LogTemp, Warning, TEXT(“Default implementation for XXX is called on %s”), *GetName());。这样就能一目了然地看到默认逻辑是否以及何时被触发。问题3BlueprintNativeEvent函数在C中编译通过但在编辑器里点击“编译蓝图”时报错提示找不到函数或链接错误。检查1头文件更改后是否重新编译了C模块这是最常见的原因。UE4需要C编译生成的中间文件.generated.h来更新蓝图的信息。修改了包含UFUNCTION声明的头文件后必须使用Visual Studio等IDE重新编译整个UE4项目或至少编译对应的模块。检查2函数签名是否完全一致在C中更改了函数名、参数类型或顺序、返回类型后蓝图中的旧节点会失效。需要删除蓝图中的旧节点从右键菜单中重新搜索并添加新的事件节点。检查3是否清理了中间文件在极少数情况下可能需要手动删除项目目录下的Intermediate和Saved文件夹然后重新生成项目文件并编译以解决一些顽固的缓存问题。问题4对于有返回值的BlueprintImplementableEvent在C中调用后得到的返回值总是默认值0、false、空字符串等。这不是问题而是预期行为。正如前文所述BlueprintImplementableEvent没有C实现体因此它在C端没有返回值。调用它只是为了触发事件。如果你需要从蓝图获取信息到C应该使用其他方法使用BlueprintNativeEvent并在蓝图中覆盖返回值。在C中提供一个BlueprintCallable的纯虚函数或接口让蓝图子类必须实现它但这需要蓝图通过其他途径调用C函数来“上报”信息不如事件直接。设计变更考虑将“获取信息”和“触发事件”分离。C通过事件通知蓝图某事发生然后如果需要信息再通过另一个BlueprintCallable的函数比如GetCurrentStatus去主动查询蓝图对象的状态。掌握这些排查技巧能让你在遇到问题时快速定位而不是盲目地检查代码。蓝图与C的交互是UE4强大的根源理解其内在机制就能更加自信和高效地运用这些工具。

相关新闻

Unity-MCP:用自然语言操控Unity编辑器,AI大模型与MCP协议实战

Unity-MCP:用自然语言操控Unity编辑器,AI大模型与MCP协议实战

1. 项目概述:当AI助手成为你的Unity开发伙伴最近在和一些独立游戏开发者朋友聊天,发现大家普遍有个痛点:Unity编辑器功能强大,但操作界面复杂,菜单层级深。有时候想实现一个简单的功能,比如“给所有选中的物…

2026/10/6 21:07:42 阅读更多 →
全栈JavaScript性能调优实战与优化策略

全栈JavaScript性能调优实战与优化策略

1. 为什么全栈JavaScript性能调优如此重要?在当今的Web开发领域,JavaScript已经成为了无可争议的王者语言。根据2023年Stack Overflow开发者调查,JavaScript连续11年成为最常用的编程语言,而Node.js则是最受欢迎的Web框架之一。这…

2026/10/12 7:25:32 阅读更多 →
SMT钢网设计:外露焊盘防空洞与焊接可靠性优化方案

SMT钢网设计:外露焊盘防空洞与焊接可靠性优化方案

1. 项目概述:揭开“外露焊盘”钢网设计的神秘面纱 在SMT(表面贴装技术)产线上,回流焊炉前最关键的一步就是锡膏印刷。而决定锡膏印刷质量的灵魂,就是那张薄薄的钢网。今天,我们不聊常规的QFN或者BGA&#x…

2026/10/11 8:03:29 阅读更多 →

最新新闻

ROS 2 Jazzy + Python 3.12:机器人状态Web实时可视化方案

ROS 2 Jazzy + Python 3.12:机器人状态Web实时可视化方案

1. 项目背景与整体思路做机器人开发的朋友应该都有过这种体验:程序在设备端跑得挺欢,数据在终端里哗哗刷,但你想让非技术背景的同事、或者不在现场的合作方也看懂系统状态,就特别费劲。ROS 2 原生的 rqt 工具链确实强大&#xff0…

2026/10/12 8:46:45 阅读更多 →
【Reading Notes】(10.5)2026年5月最值得收藏的技术文章:从401报错到TaoToken统一Key的实战笔记

【Reading Notes】(10.5)2026年5月最值得收藏的技术文章:从401报错到TaoToken统一Key的实战笔记

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 8:46:45 阅读更多 →
长度最小的子数组:滑动窗口与双指针算法精讲

长度最小的子数组:滑动窗口与双指针算法精讲

如果你刷过力扣,大概率被“209”这个题号折磨过:给定一个正整数数组和一个目标值,要求找出满足元素和大于等于目标值的最短连续子数组。很多人第一次看到它时会口误成“长度最小的数组”,其实完整的说法是“长度最小的子数组”。“…

2026/10/12 8:46:45 阅读更多 →
Redis生产环境部署全指南:从版本规划到安全加固

Redis生产环境部署全指南:从版本规划到安全加固

很多教程教你的第一步是敲安装命令,但我总喜欢先泼盆冷水:Redis安装本身三分钟就能搞定,真正决定这个实例后面好不好用、稳不稳的,是安装前怎么定版本、估算内存,以及安装后配置文件里那几十个默认参数你是怎么处置的。…

2026/10/12 8:46:45 阅读更多 →
CyclicBarrier并发编程原理与实战:循环屏障用法、坑位与选型

CyclicBarrier并发编程原理与实战:循环屏障用法、坑位与选型

做Java并发编程时,如果你碰到一组线程需要互相等待、全部到齐后再一起往下一步走,CyclicBarrier基本是首选。它有个很形象的外号叫循环栅栏,最大的特点是“能反复用”,一批线程凑齐后可以重新迎接下一批。这篇文章不只想讲清楚Cyc…

2026/10/12 8:46:45 阅读更多 →
Java Function接口深度解析:从设计原理到实战应用

Java Function接口深度解析:从设计原理到实战应用

1. 从一个真实场景说起:为什么我们要聊 Function做Java后端的兄弟大概率都遇到过这种代码:一个方法里塞了七八个if-else,每个分支都在做数据转换,参数类型还都不一样。某次需求变更,产品说“这个字段的转换规则要改一下…

2026/10/12 8:45:42 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →