UE4多人游戏AI同步:AIController与RPC协同工作原理与实战调试
1. 项目概述从面试题到实战核心最近在帮团队面试UE4客户端开发发现一个高频出现的“送命题”“在多人游戏里怎么让一个AI控制的角色比如小怪在客户端也能正常寻路移动” 很多候选人能答出“用RPC远程过程调用”或者“AIController”但一旦追问细节比如“AIController在客户端和服务端分别是什么状态”、“RPC调用失败后客户端表现是什么”能清晰回答的就不多了。这恰恰是区分“会用引擎”和“懂网络架构”的关键分水岭。今天我就结合一个真实的面试案例和项目中的踩坑经验把AIController与RPC在多人游戏中的协同工作原理、常见陷阱和调试技巧掰开揉碎了讲清楚。无论你是正在准备面试还是在实际项目中遇到了AI同步的诡异问题这篇文章都能给你提供一套可直接落地的排查思路和解决方案。2. AIController的网络身份解析谁拥有谁执行在单机游戏里AIController就是一个纯粹的逻辑驱动器它控制着Pawn比如怪物的行为树、寻路和技能释放。但一旦进入网络环境它的身份就变得复杂起来。2.1 所有权与运行权限的分离这是最容易混淆的一点。在UE4的网络模型中一个Actor包括AIController和它控制的Pawn的Role角色和RemoteRole远程角色决定了它在不同机器上的权限。服务端Server拥有所有Actor的“上帝视角”。对于AI控制的Pawn服务端是其权威所有者Authority。这意味着服务端上该Pawn的Role是ROLE_Authority。服务端上运行着该Pawn的AIController实例并执行着核心AI逻辑如行为树、寻路计算。服务端负责做出所有权威决策比如这个怪物是否移动、移动到哪、何时攻击。这些决策结果需要通过属性复制Replication或RPC同步到各个客户端。客户端Client对于非玩家控制的AI Pawn客户端只是一个旁观者Simulated Proxy。这意味着客户端上该Pawn的Role是ROLE_SimulatedProxy。默认情况下客户端上根本不存在这个Pawn对应的AIController实例这是很多问题的根源。客户端只有这个Pawn的一个“壳”用于接收服务端同步过来的位置、动画等状态并进行渲染。面试点睛当被问到“AIController在客户端存在吗”标准答案是“对于服务端权威的AI默认不存在。但可以通过特定的网络属性和生成方式让一个‘简化版’或‘只读版’的AIController在客户端存在用于处理纯客户端的表现逻辑。”2.2 为什么客户端默认没有AIController这是出于性能和架构的考虑。如果每个客户端都为每个AI怪物运行一套完整的行为树和寻路逻辑会造成巨大的性能浪费且难以保证所有客户端AI的决策与服务器完全一致即“同步”问题。因此UE4的设计哲学是权威逻辑只在服务端执行客户端只负责表现。2.3 如何让AIController在客户端“存在”在某些特定需求下我们确实需要在客户端运行一些AI逻辑比如客户端预测Client-side Prediction为了减少移动延迟感让AI在客户端先进行移动表现再等待服务器校正。纯表现逻辑一些与游戏性无关的AI行为如NPC的闲逛、与环境物件互动拾取、坐下的动画触发。这时你需要修改AIController的Replication设置在AIController的蓝图类或C构造函数中设置bReplicates true。这告诉引擎这个Controller需要在网络间复制。更关键的是通常需要将bOnlyRelevantToOwner设置为false并确保bNetLoadOnClient为true这样它才会在相关客户端上被加载和初始化。然而即使这样做了客户端上的这个AIController实例其Role仍然是ROLE_SimulatedProxy或ROLE_AutonomousProxy如果被本地玩家控制它没有权限去调用像MoveToLocation()这样会修改游戏状态的函数。尝试调用会导致函数在客户端 silently fail静默失败。3. RPC实战打通服务端与客户端的通信管道理解了AIController的网络身份我们再来看如何让它们协同工作。RPC是服务端与客户端之间进行特定逻辑调用的桥梁。3.1 RPC的类型与选择UE4提供了三种主要的RPCServer RPC (Run on Server)仅在客户端调用在服务端执行。用于客户端向服务器发送指令如“玩家请求攻击”。Client RPC (Run on Owning Client)仅在服务端调用在指定的客户端通常是该Actor的所有者上执行。用于服务器向特定客户端发送通知如“更新你的UI”。NetMulticast RPC (Run on all clients)在服务端调用在所有客户端包括服务器本身上执行。用于广播事件如“播放一个爆炸特效”。对于AI移动指令流程通常是某个逻辑可能是玩家交互、触发器、其他AI决定让AI移动。这个逻辑在服务端调用AI的AIController的MoveToLocation()。因为只有服务端的AIController有权限执行寻路。服务端执行寻路并开始移动Pawn。Pawn的移动组件如CharacterMovementComponent会自动通过属性复制将位置、旋转、速度等状态同步到所有客户端。客户端收到同步的位置数据驱动Pawn的骨骼网格体进行移动和播放动画。那么RPC用在哪里用在触发移动这个决策的时候。例如一个在客户端触发的触发器需要让服务器上的AI开始移动// 在客户端的某个蓝图或C中 void AClientTrigger::OnPlayerOverlap(APlayerController* Player) { if (HasAuthority()) // 如果我们在服务器上直接执行 { TargetAIController-MoveToLocation(Destination); } else // 如果我们在客户端需要通知服务器 { ServerRequestAIMove(TargetAIController, Destination); } } // 这是一个Server RPC定义在客户端Trigger类上 UFUNCTION(Server, Reliable, WithValidation) void ServerRequestAIMove(AAIController* AIController, const FVector Dest);ServerRequestAIMove的实现会在服务端运行然后在服务端调用AIController-MoveToLocation(Dest)。3.2 常见RPC调用失败原因与排查面试中或者调试时常说“RPC没生效”可能的原因远比想象的多Actor的网络角色不符这是最常见的原因。调用ServerRPC的Actor在客户端上必须是ROLE_AutonomousProxy如玩家控制的Pawn或ROLE_SimulatedProxy但其Owner是本地玩家。一个在客户端上Role为ROLE_None或ROLE_SimulatedProxy且无关的Actor调用Server RPC是无效的。同样被调用的目标Actor如AIController必须在接收端服务端或客户端有效且网络可达。连接状态RPC调用依赖于稳定的网络连接。在连接握手完成前PostLogin之后或断开连接时调用RPC会失败。通道与可靠性Reliable可靠RPC保证送达但可能延迟Unreliable不可靠RPC不保证送达但延迟低。对于关键指令如“释放大招”必须用Reliable。同时确保网络带宽和NetDriver的配置能处理你的RPC频率。参数序列化RPC函数的参数必须能被UE4的网络序列化系统处理。自定义的USTRUCT需要正确实现NetSerialize函数。传递一个未正确标记或包含不可序列化成员的参数会导致RPC静默失败。验证函数WithValidation如果RPC声明了WithValidation你必须实现对应的_Validate函数。这个函数在服务端执行RPC主体逻辑之前运行用于做安全检查如距离检查、资源消耗验证。如果验证函数返回falseRPC将被拒绝且客户端会收到一个OnRep_Notify如果设置了。实操心得调试RPC失败第一件事是打开控制台命令net.NetShowCorrections 1和net.PacketLoss 0模拟环境然后在RPC函数内部的开头打上断点或打印日志使用UE_LOG并确保日志类别在输出级别内。同时检查调用者和接收者的Role和Owner。UE编辑器的“网络分析器”Network Profiler是分析RPC流量和延迟的终极利器。4. 实战案例客户端发起AI移动请求的完整流程让我们构建一个具体场景玩家在客户端点击一个按钮命令一个友方NPC由AIController控制移动到指定位置。4.1 架构设计权威方服务端。只有服务端的AIController能执行权威的MoveToLocation。触发方客户端的玩家控制器或UI。通信路径客户端 - (Server RPC) - 服务端 - (执行移动) - 属性复制 - 客户端表现。4.2 详细步骤与代码示例步骤1创建可交互的UI或物体在客户端我们有一个按钮或一个可点击的物体。当玩家交互时我们获取目标位置如鼠标点击的世界坐标经过射线检测剔除不可行走区域后。步骤2定义Server RPC我们需要在一个在客户端有权限、且网络身份正确的Actor上定义这个RPC。最佳选择是PlayerController因为每个客户端的PlayerController在服务端和本客户端都存在且是本客户端的权威代理。在PlayerController的C头文件中UCLASS() class AMyPlayerController : public APlayerController { GENERATED_BODY() public: // 客户端调用此函数来请求AI移动 UFUNCTION(BlueprintCallable, Category AI Command) void RequestAIMoveCommand(AAIController* TargetAIController, const FVector Destination); // 实际的Server RPC UFUNCTION(Server, Reliable, WithValidation) void ServerAIMoveCommand(AAIController* TargetAIController, const FVector Destination); bool ServerAIMoveCommand_Validate(AAIController* TargetAIController, const FVector Destination); void ServerAIMoveCommand_Implementation(AAIController* TargetAIController, const FVector Destination); };在C实现文件中void AMyPlayerController::RequestAIMoveCommand(AAIController* TargetAIController, const FVector Destination) { // 客户端先进行一些本地验证或效果如播放点击音效、显示目标点特效 if (IsLocalController()) { SpawnMoveToEffect(Destination); } // 然后调用Server RPC ServerAIMoveCommand(TargetAIController, Destination); } bool AMyPlayerController::ServerAIMoveCommand_Validate(AAIController* TargetAIController, const FVector Destination) { // 验证目标AIController是否有效是否属于本方目的地是否在合理范围内 if (!TargetAIController || !TargetAIController-GetPawn()) { return false; } // 这里可以添加更多游戏逻辑验证如距离、视野、冷却时间 return true; } void AMyPlayerController::ServerAIMoveCommand_Implementation(AAIController* TargetAIController, const FVector Destination) { // 现在我们在服务端执行权威移动指令。 // 再次进行安全验证防御性编程 if (TargetAIController TargetAIController-GetPawn()) { // 调用AIController的移动函数 FAIMoveRequest MoveReq; MoveReq.SetGoalLocation(Destination); MoveReq.SetAcceptanceRadius(50.0f); // 设置停止距离 TargetAIController-MoveTo(MoveReq); // 可选广播一个NetMulticast RPC给所有客户端播放一个“命令已接收”的通用特效 MulticastPlayCommandEffect(Destination); } }步骤3客户端UI调用在蓝图中按钮的点击事件里获取到玩家的MyPlayerController然后调用其RequestAIMoveCommand函数传入选中的AIController引用和目标位置。步骤4移动同步TargetAIController-MoveTo()会在服务端启动寻路和移动。其控制的Pawn的MovementComponent会自动将位置同步 (Replicate Movement属性需为true) 到所有客户端。客户端上的Pawn作为Simulated Proxy会根据同步的位置数据平滑移动。4.3 关键配置检查清单AIController:bReplicates true(如果需要在客户端存在一个实例用于引用或简单逻辑)。其控制的Pawn的MovementComponent的Replicated Movement必须设置为True。Pawn:bReplicates true。确保NetUpdateFrequency设置合理默认太低可能导致移动卡顿太高增加带宽。PlayerController:默认已正确复制无需额外设置。项目设置:Edit - Project Settings - Engine - Network确保Replication相关设置正确。对于AI有时需要勾选Allow Client Side Navigation但这主要影响的是在客户端是否存在导航网格数据用于一些查询不影响权威移动。5. 高级议题与深度优化5.1 客户端预测与服务器调和对于要求高响应性的AI如MOBA游戏中的小兵纯服务器权威移动会带来延迟感。可以采用简化版的客户端预测客户端收到移动指令后本地模拟一个移动使用简单的SetActorLocation或一个客户端的移动组件并立即开始移动表现。服务器执行权威移动并将真实位置定期同步下来。客户端收到服务器的位置同步后与本地预测的位置进行对比。如果差异超过某个阈值则进行调和——通常是将角色“拉扯”到服务器的权威位置或者通过一个平滑插值纠正过去。注意事项客户端预测AI移动非常复杂极易导致“橡皮筋”效应角色来回抖动。必须仔细设计调和策略并确保客户端的模拟逻辑尽可能轻量且与服务器逻辑在表现上近似。对于大多数游戏AI移动采用纯服务器权威合适的网络插值NetUpdateFrequency和NetPriority就足够了。5.2 网络优先级与更新频率一个场景里有成百上千个AI时网络带宽会成为瓶颈。你需要优化NetPriority设置Actor的NetPriority。离玩家近、重要的AI优先级更高1.0确保其状态更新更及时远处或不重要的AI优先级更低1.0更新频率下降。NetUpdateFrequency控制Actor属性复制的频率。对于移动中的AI可以设置高一些如10-30对于静止或远离玩家的AI可以设置很低如0.5-2。考虑分帧更新不要在同一帧更新所有AI的网络状态。可以在AI的Tick函数中根据其NetDriver的Time或一个自定义的哈希值来决定本轮是否进行网络更新。5.3 调试工具与性能分析控制台命令stat net实时查看网络流量、RPC数量、复制Actor数等。net.NetShowCorrections 1显示网络修正如位置拉扯帮助发现预测错误。p.NetEnableMoveCombining 1/0启用/禁用移动合并优化。ShowDebug AI显示AI的调试信息包括当前目标、路径点。编辑器工具网络分析器Network Profiler性能分析工具中的网络视图可以精确看到每个Actor、每个属性、每个RPC占用的带宽和时间。Session Frontend在运行多人游戏时可以连接并查看所有客户端的实时状态。可视化调试在开发阶段可以在AI移动时绘制调试路径DrawDebug系列函数在服务器和客户端分别用不同颜色绘制直观对比差异。6. 面试常见问题与深度解答这里整理了几个围绕AIController和RPC的进阶面试题附上深度解析思路Q1如果一个AI的移动在服务端正常但在客户端不动你的排查步骤是什么A1这是一个经典的网络同步问题。我会按照以下层次排查基础检查首先确认Pawn的bReplicates和MovementComponent的Replication是否开启。用ShowDebug AI和stat net看服务器是否在发送移动更新。所有权与角色在客户端用GetNetMode()和GetLocalRole()检查该Pawn的网络角色。如果是ROLE_SimulatedProxy但没动问题可能出在移动同步上。移动组件检查客户端的MovementComponent是否处于激活状态是否有阻挡。对比服务器和客户端的Velocity值。网络更新检查NetUpdateFrequency是否过低或者该Actor的NetPriority是否被设得太低导致更新被跳过。导航系统如果移动涉及寻路确认Navigation System在客户端是否可用Allow Client Side Navigation但注意客户端的导航数据通常只用于查询不影响权威移动。RPC路径如果移动是由一个客户端事件触发的检查触发指令的RPC是否成功到达服务器并执行。在RPC函数内加日志并检查调用者的网络角色是否有权发起该RPC。Q2如何设计一个让AI在服务端计算寻路但将路径点下发给客户端由客户端进行移动插值的方案A2这是为了减轻服务器CPU压力和网络带宽的优化方案。服务端AI需要移动时服务器AIController调用NavigationSystem-FindPathToLocationSynchronously()计算完整路径得到一个FNavPathSharedPtr。路径简化与压缩将路径点列表PathPoints提取出来。可以对路径进行简化道格拉斯-普克算法减少点数。然后将这些点序列化为一个字节数组。下发路径通过一个Reliable的Client RPC如果只下发给一个AI的所有者或NetMulticast RPC如果所有客户端都需要将序列化的路径数据发送到客户端。RPC的参数需要能处理二进制数据如TArrayuint8。客户端接收与模拟客户端收到路径后反序列化并在本地存储。然后客户端AI此时可能需要一个客户端的AIController或一个自定义的移动管理组件根据这些路径点使用FInterpTo或类似的插值函数在本地驱动Pawn移动。同步与校正服务器仍需定期频率可以很低同步AI的权威位置。客户端将自己的模拟位置与服务器位置比较如果偏差过大则进行位置纠正并可能请求新的路径。Q3MoveToLocation()调用后AI没反应可能的原因有哪些非网络环境A3即使在单机下MoveToLocation()失败也常发生。目标点不可达目标位置不在导航网格NavMesh上或与当前位置之间没有连通路径。用NavigationSystem-ProjectPointToNavigation()检查目标点是否在NavMesh上。AIController未控制Pawn检查AIController-GetPawn()是否返回有效值。确保已成功调用Possess()。行为树/状态机冲突如果AI正在运行行为树MoveTo任务可能被更高优先级的任务如攻击、逃跑中断。检查行为树的当前执行状态。移动组件被禁用Pawn的MovementComponent可能被设置为NoMovement或处于禁用状态。接受半径Acceptance Radius过大如果AI已经处于目标点的接受半径内MoveTo会立即成功而不产生移动。检查你设置的半径。路径查找失败导航系统可能因为动态障碍物、NavMesh未烘焙或更新不及时而找不到路径。启用DrawDebug查看寻路过程。掌握AIController与RPC的协同不仅仅是记住API调用更是理解UE4网络模型下的数据流向和权限边界。在实际项目中最棘手的bug往往不是代码写错而是网络状态判断错误或同步时机不对。养成在关键网络函数里加日志、善用调试工具的习惯能帮你节省大量排查时间。希望这篇从面试题出发的深度解析能帮你建立起清晰的解决思路下次遇到“AI在客户端不动了”这种问题你能自信地说“让我先看看它的Role和RPC。”

相关新闻

Unity输入系统的秘密:一次穿越“Input.GetAxis“的深海之旅

Unity输入系统的秘密:一次穿越“Input.GetAxis“的深海之旅

楔子:那个我们最熟悉的陌生人 如果要在Unity的世界里评选"最常被调用的API",Input.GetAxis("Horizontal")一定榜上有名。 从新手教程里的第一个方块移动,到3A级项目里复杂的角色控制器,这行代码几乎无处不在。…

2026/10/13 9:29:17 阅读更多 →
基于PL2303GL的STC单片机下载器DIY:从原理到实战

基于PL2303GL的STC单片机下载器DIY:从原理到实战

1. 项目概述:为什么我们需要一个PL2303GL下载器?如果你玩过STC的51单片机,肯定对那个蓝色或绿色的小USB转串口模块不陌生。很多时候,我们直接从网上买一个CH340G或者CP2102的模块,插上就能用。那为什么还要折腾一个基于…

2026/10/13 9:28:34 阅读更多 →
泰坦尼克号生存预测:从数据清洗到模型构建的完整数据科学实践

泰坦尼克号生存预测:从数据清洗到模型构建的完整数据科学实践

1. 从数据到洞察:为什么泰坦尼克号预测是数据科学的“Hello World”如果你刚接触数据科学或机器学习,大概率会从“泰坦尼克号乘客生存预测”这个项目开始。它就像编程界的“Hello World”,看似简单,却几乎涵盖了数据科学工作流的所…

2026/10/13 1:35:38 阅读更多 →

最新新闻

基于STM32单片机电磁波检测电磁辐射保护云平台视频监控蓝牙无线APP/WiFi无线APP/摄像头视频监控/云平台设计S446

基于STM32单片机电磁波检测电磁辐射保护云平台视频监控蓝牙无线APP/WiFi无线APP/摄像头视频监控/云平台设计S446

STM32-S446-电磁波检测舵机保护报警频率变化预警阈值保护阈值超阈值报警OLED屏声光提醒按键(无线方式选择)产品功能描述:本系统由STM32F103C8T6单片机核心板、OLED屏、(无线蓝牙/无线WIFI/无线视频监控/联网云平台模块-可选)、电磁波检测模块…

2026/10/13 9:29:07 阅读更多 →
基于Node.js+Vue的前后端分离管理系统开发全记录

基于Node.js+Vue的前后端分离管理系统开发全记录

先说一下背景。去年学校就业办找我做一个大学生创业项目申报评比系统,要求是学生能在线上报项目材料,评委能在线打分评审,管理员能配置评审指标并导出最终排名。技术栈指定了Node.js Vue,前后端分离。这活儿听起来简单&#xff0…

2026/10/13 9:29:07 阅读更多 →
SonarQube 7.9 稳定落地实践:H2部署、规则XML化与IDE深度集成

SonarQube 7.9 稳定落地实践:H2部署、规则XML化与IDE深度集成

简介:本资源为SonarQube 7.9版本官方发行版压缩包(ZIP格式),面向Java/全栈开发工程师、DevOps工程师及代码质量保障团队,用于搭建本地或测试环境的静态代码分析平台,解决代码漏洞识别、技术债务量化与编码规…

2026/10/13 9:29:07 阅读更多 →
Hudi 多表事务(Multi-Table Transactions)设计解读:数据库时间线、冲突检测与事务协议

Hudi 多表事务(Multi-Table Transactions)设计解读:数据库时间线、冲突检测与事务协议

大数据数据湖数据工程 【免费下载链接】hudi Upserts, Deletes And Incremental Processing on Big Data. 项目地址: https://gitcode.com/gh_mirrors/hu/hudi 点击查看 免费下载 本篇技术指南围绕 Hudi 社区 RFC-73(JIRA HUDI-6709)展开&am…

2026/10/13 9:29:07 阅读更多 →
scrcpy 完全指南:3 分钟免费把手机屏幕投到电脑并直接操控

scrcpy 完全指南:3 分钟免费把手机屏幕投到电脑并直接操控

scrcpy 完全指南:3 分钟免费把手机屏幕投到电脑并直接操控 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy scrcpy 是一款免费开源的安卓投屏与控屏工具:手机屏幕镜像…

2026/10/13 9:29:07 阅读更多 →
django-crispy-forms 版本历史完全指南:2.0 破坏性变更、兼容性矩阵与源码级验证

django-crispy-forms 版本历史完全指南:2.0 破坏性变更、兼容性矩阵与源码级验证

后端 【免费下载链接】django-crispy-forms The best way to have DRY Django forms. The app provides a tag and filter that lets you quickly render forms in a div format while providing an enormous amount of capability to configure and control the rendered HTML…

2026/10/13 9:28:07 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →