Unity新版Input System实战:从动作配置到多设备调试
用了一段时间新版Input System之后最明显的感觉是很多人不是被它的功能难倒的而是被“转换思路”这一步卡住的。上一篇聊了怎么启用、怎么把旧输入管理切过来当时有不少人留言说“装上了也写了那一行代码可实际做项目还是不知道怎么组织”。其实很正常新版Input System表面上是换了一套API本质上是一种完全不同的输入设计方式。这篇是系列第二篇我不打算重复一遍官方文档而是想用实际做项目的顺序把动作配置、代码接入、多设备兼容、按键重绑和调试这五块真正容易出问题的地方拆开讲透。适合已经会跑通基础输入、真正开始做玩法交互的开发者也适合那些被“动作资产出来了但完全不知道该怎么规划”劝退的新手把认知补上。1. 从按键思维切换到动作思维先把控制表设计明白1.1 为什么你会觉得新版输入系统绕我刚从旧版Input过渡时心里是有点抗拒的。原因很简单旧版Input.GetKeyDown、Input.GetAxis写在Update里一看就懂一调就动。新系统要先建资产、配绑定、生成类然后还要区分什么performed、started、canceled稍不留神逻辑就不触发确实烦躁。但真正把一个可发布的Demo做完之后我反而觉得旧版最大的问题不是难用而是散。旧版里如果角色移动用WASD判断UI界面又用同一套键盘那每一处都得自己写“当前场景是战斗还是菜单哪些键能用”。时间一长输入判断会散落在各个脚本里改键位更是噩梦。新版Input System的核心价值不是“换个接口写法”而是把输入变成了一张可编辑的表什么场景能按哪些键、按了之后产生什么含义全部可以在编辑器里看清楚。这个思维转换很重要。旧输入像是“直奔仓库拿零件”新输入是“把需求告诉前台后台去调配资源”。你不用关心开火是鼠标左键还是手柄A键只需要告诉系统“玩家做了一次开火操作”。等于是把输入从命令式变成了一种声明式的配置。想明白这一点后面所有的配置动作都有了意义。1.2 Action资产四层结构拆解编辑器里双击Input Actions资产后其实就是在编辑四个层级的结构Input Action Asset整张控制方案的总资产。可以包含多张控制地图也负责统一管理。Input Action Map一组面向某个场景或上下文的动作集合比如“GamePlay”“UI”“Menu”。Input Action一个具体的操作含义比如Move、Jump、Fire。它是“玩家想做什么”的最小单位。BindingAction的具体输入来源比如“W键”“左摇杆”“鼠标左键”。一个Action可以挂多个Binding。除此之外还有一个容易被忽略的 Processor处理器它的作用是在输入值传递到Action之前做一次加工比如向量归一化、死区过滤、灵敏度缩放等。这四层结构中对大多数人来说最关键的是一个观念变化Action是“含义”Binding是“控件”。写代码时只需要引用Action千万不要引用具体的设备键位。比如代码里写“跳跃”很清晰但如果在代码里到处写“Space键”那等于又回到了旧版老路等于放弃了新版最大的优势。1.3 一个不踩雷的配置流程下面这份配置流程是我在自己的项目里反复验证过的适合大多数动作游戏、交互Demo和工具类应用。具体操作如下在Project窗口下右键选择Create Input Actions得到一个Input Actions资产。双击资产打开编辑面板。先创建一张Action Map名字建议用场景名比如“GamePlay”。在Map下新建Action。移动方向我建议Action Type选ValueControl Type选Vector2跳跃、开火这类瞬间操作选Button。给“Move”添加绑定。先选Binding Type为“2D Vector Composite”然后展开它的子绑定分别指定上、下、左、右四个方向。我这里习惯用W/S/A/D做默认键盘绑定再额外加一个Gamepad左摇杆绑定给手柄。在Move的Add Processor里加上Deadzone处理器。数值型输入几乎必须加死区否则摇杆中心点轻微漂移就会让角色自己移动。给“Fire”添加Binding绑定一个“Mouse Left Button”再添加一个Binding绑定“Gamepad Button South”。这样一套控制方案同时兼容键鼠和手柄。在面板右上角勾选Generate C# Class点Apply。这样后面代码里就可以直接new一个强类型脚本类。这里面最容易踩的坑是复合绑定。很多人直接把“WASD四个键”挂成一个普通的四路Binding而不使用2D Vector Composite。这样做不会报错但代码里读出来的值是离散的四个布尔值根本不能像摇杆那样输出平滑的Vector2。2D Vector Composite的作用就是把这四个方向合成一个向量按W得到(0,1)同时按W和D得到(0.7,0.7)这套规则已经封装好不用自己在代码里拼向量。还有个经验如果你做的游戏场景很多不要只建一张地图。战斗场景和菜单场景分别用不同Map而且不要一上来就全部Enable。该Enable的时候Enable切场景时Disable掉这样就不会出现在菜单里按W角色还在跑的问题。2. 三种代码接入方式事件、轮询、组件消息怎么选不后悔2.1 事件驱动适合“一次性操作”开始写代码前要先决定用哪种接入方式。我见过不少项目把新输入系统用得乱很大一部分原因是所有逻辑都堆在同一套回调里最后代码变成一团麻。事件驱动是最能体现新版Input System设计思路的方式。它非常适合那些“按一下产生一次反应”的操作比如跳跃、开火、互动、暂停。用法是监听InputAction的事件回调典型代码如下using UnityEngine; using UnityEngine.InputSystem; public class PlayerActionsExample : MonoBehaviour { [SerializeField] private InputActionAsset playerControls; private InputAction moveAction; private InputAction fireAction; private void Awake() { var gameplayMap playerControls.FindActionMap(GamePlay); moveAction gameplayMap.FindAction(Move); fireAction gameplayMap.FindAction(Fire); } private void OnEnable() { gameplayMap.Enable(); fireAction.performed OnFire; } private void OnDisable() { gameplayMap.Disable(); fireAction.performed - OnFire; } private void OnFire(InputAction.CallbackContext context) { // 这里写开火逻辑比如生成子弹、播放音效 Debug.Log(Fire performed); } }相信你也发现了这里用performed而不是started。这两个事件很容易混淆区别在于started代表输入动作开始的瞬间performed代表一次输入操作“完成”的瞬间。对于默认的Button类型Action按下瞬间会触发performed大多数游戏开火需求直接用performed就够。但如果你给Action配置了Hold交互那performed会在按住足够长时间后才会触发中途松开会触发canceled。所以写勾子之前一定要确认Action上挂了什么交互别用一套想当然的逻辑去套所有情况。2.2 轮询读取适合“连续状态”值得说明的是我不建议所有操作都用事件回调。比如角色移动、镜头旋转这种每一帧都要读取的连续信号用事件驱动反而别扭。你会被迫在每个performed里去更新一个变量还要考虑没触发时怎么办。这种情况下直接用轮询读取更自然using UnityEngine; using UnityEngine.InputSystem; public class MovementPoller : MonoBehaviour { [SerializeField] private InputActionAsset playerControls; private InputAction moveAction; private void Awake() { moveAction playerControls.FindActionMap(GamePlay).FindAction(Move); } private void OnEnable() { moveAction.Enable(); } private void OnDisable() { moveAction.Disable(); } private void Update() { Vector2 moveInput moveAction.ReadValueVector2(); transform.Translate(new Vector3(moveInput.x, 0f, moveInput.y) * Time.deltaTime * 5f); } }ReadValueT()是轮询最核心的方法。Move这个Action配了2D Vector Composite之后读到的就是平滑向量。这个方法还有个好处是处理漂移很方便只要你在Asset里的Move上挂了Deadzone这里读到的就是已经过滤过的值不用代码里再做一遍。轮询时还有一个常用方法是WasPressedThisFrame()用来判断“这一帧是否刚按下”。如果你不想用事件想在Update里判断跳跃可以这么写if (jumpAction.WasPressedThisFrame()) { // 执行跳跃 }不过我自己用下来跳跃类交互还是事件驱动更直观。轮询更适合移动、视角、方向盘这类需要每帧读数值的状态输入。2.3 PlayerInput组件与消息模式除了手写事件和轮询新版Input System还提供了一个组件PlayerInput。这个组件可以挂在玩家预制体上它会自动监听当前Control Scheme对应的Map。它的消息模式有三种SendMessages、BroadcastMessages、UnityEvents。简单说SendMessages只发给挂载PlayerInput的这个GameObject上的组件。适合单体玩家对象。BroadcastMessages会广播到这个GameObject及其子物体。适合子物体上有独立输入处理组件的场景。UnityEvents在Inspector面板上把Action事件拖给UI按钮或脚本方法。适合菜单、UI绑定。我个人的建议是小项目手写事件和轮询就够了没必要为了用组件而用组件。但如果你做的是本地多人游戏比如“2P使用手柄、1P使用键鼠”这种需求PlayerInput组件会省掉很多设备配对的痛苦。它会自动生成多套玩家实例并且可以通过.SwitchCurrentControlScheme(KeyboardMouse)这样的API切换控制方案。从团队协作角度看PlayerInput的UnityEvents模式对策划调UI是最友好的搭界面时不需要写代码。但从代码可控性上看它又显得有点“黑盒”出了问题不好排查。所以我不建议项目一上来就全量使用消息模式先把核心操作写好再去考虑UI层的事件映射。2.4 三种方式的混合实战心得一种模式固定用到底反而是最常见的错误。我自己的项目里通常是混用移动和镜头旋转用轮询因为要做加速度、平滑、插值每帧拿原始数据最好算跳跃、开火、拾取这些瞬时操作走事件逻辑点位清晰不用每帧做状态判断菜单的“开始游戏”“打开背包”这类UI操作则交给PlayerInput的UnityEvents直接驱动UI事件。这种组合最大的好处是每种场景都用了最舒服的写法代码量最少可读性最好。关键是要在项目初期就定好这个约定。否则项目做到中期一个动作一会儿事件触发一会儿Update读取后面维护的人会很痛苦。3. 多输入设备兼容与本地多人不只插个手柄那么简单3.1 让玩家用任意设备开始游戏做跨平台项目时最常遇到的一个需求是“让玩家按任意键开始游戏”。听起来简单但如果你用了PlayerInput组件设备配对其实是有一套逻辑的。最省事的做法是使用Control Scheme。在Input Actions资产里每个ActionMap都可以添加Control Scheme标签。比如我建两个Control SchemeKeyboardMouse和Gamepad。然后在PlayerInput组件上把Default Scheme设为KeyboardMouse同时给对应的ActionMap分别打上Scheme标签。这样运行时玩家用键盘鼠标操作时走的是一套绑定组用手柄操作时切换过去动作含义是一致的不需要单独写代码去判断设备。如果你有“本地多人、按键加入”的需求就要用到InputUser的设备配对API。思路是先监听设备接入事件InputSystem.onDeviceChange检测到新设备加入时把设备配对给一个新的InputUser然后启用对应的Control Scheme。这一步比PlayerInput组件的自动配对要更底层能精确控制“哪个玩家用什么设备”适合做分屏游戏。要注意的是配对逻辑里要避免一个设备被多个用户同时绑定这会导致输入互相干扰。3.2 手柄震动与设备断连处理手柄震动是我见过最容易出“事故”的一块。代码本身很简单using UnityEngine; using UnityEngine.InputSystem; public class RumbleController : MonoBehaviour { public void SetVibration(float lowFreq, float highFreq) { var gamepad Gamepad.current; if (gamepad ! null) { gamepad.SetMotorSpeeds(lowFreq, highFreq); } } public void StopVibration() { var gamepad Gamepad.current; if (gamepad ! null) { gamepad.SetMotorSpeeds(0f, 0f); } } }但如果玩家在游戏里把手柄拔了或者震动的协程没关掉这个电机转速值会一直锁在Gamepad对象上。下次同一手柄再连上来它还会继续震这会让玩家一脸懵。一个可靠的写法是每次手柄设备断开时在InputSystem.onDeviceChange回调里重置震动在关游戏、切场景、暂停时也把震动归零。不要把震动当作一件一次性的事要当作一个必须被清理的资源。3.3 鼠标拖拽的灵敏度与屏幕坐标转换鼠标类输入常用的数据是Mouse.current.delta.ReadValue()也就是鼠标移动增量。它做拖拽、视角转动都很顺手。但要提醒一句鼠标Delta的数值大小和操作系统鼠标速度设置有关同一套灵敏度在不同电脑上手感差异会很明显所以我一般在代码里乘一个可调系数并且把系数放到公开面板上方便策划调。不要直接在配置里把拖动速度写死。鼠标屏幕坐标转世界坐标也是老问题经常有人忘了Z轴距离结果转换出来的点永远贴着摄像机平面。正确写法是用一个固定的目标平面Distancevar mouseScreenPos Mouse.current.position.ReadValue(); mouseScreenPos.z 10f; // 这个数值是目标物到摄像机的距离 var worldPos Camera.main.ScreenToWorldPoint(mouseScreenPos);这样拿到的worldPos才是玩家预期的那个可交互平面。3.4 移动端触控和鼠标模拟移动端触控属于Enhanced Touch体系用之前要先启用EnhancedTouchSupport.Enable()。启用后你可以用Touch.activeFingers遍历所有触点用Finger.current访问当前触点。实际项目中多点触控最常见的坑是玩家无意中把第二根手指也放到屏幕上结果导致拖拽对象乱跳。解决办法是在开始拖拽时锁定一个finger.index直到这根手指抬起前只认它其他手指一律忽略。还有一个小技巧对开发调试非常有用TouchSimulation。如果你没有触屏设备在Editor里调用TouchSimulation.Enable()就能用鼠标模拟触摸操作手机端的拖拽逻辑在电脑上也能调试。不过要记得模拟器默认会把鼠标左键变成触摸事件如果你同时还在读取Mouse.current会出现双份数据调试时容易头晕建议分开环境测。4. 按键显示、重绑与存档真正把控制权交给玩家4.1 重绑UI的思路现在主流PC游戏几乎都要求支持按键自定义新版Input System内置了交互式重绑API不用再自己监听键盘事件。基础重绑流程是在设置界面显示一份当前绑定列表玩家点某一个绑定项进入监听状态然后按下新的按键系统自动替换绑定最后把覆盖结果保存下来。核心代码长这样using UnityEngine; using UnityEngine.InputSystem; public class RebindExample : MonoBehaviour { public InputActionReference jumpAction; public void StartRebind() { var action jumpAction.action; var bindingIndex action.GetBindingIndexForControl(action.controls[0]); var rebind action.PerformInteractiveRebinding(bindingIndex) .WithControlsExcluding(Mouse/position) .OnMatchWaitForAnother(0.1f) .Start(); rebind.OnComplete(operation { var overrides action.SaveBindingOverridesAsJson(); PlayerPrefs.SetString(jumpOverride, overrides); PlayerPrefs.Save(); operation.Dispose(); }); } }这段逻辑里有几个细节值得展开。PerformInteractiveRebinding会进入监听状态自动忽略鼠标位置不然玩家一动鼠标就会匹配一堆坐标轴。OnMatchWaitForAnother(0.1f)的作用是玩家按下一个键后系统多等0.1秒避免同一帧里“按下再松开”被拆成两次事件减少误判。完成之后偏好设置里存的是JSON字符串不是简单的键名称因为要保留复合绑定、作用范围这些结构信息。重新加载时用LoadBindingOverridesFromJson恢复很方便。4.2 重绑中的两个大坑绑定索引和复合绑定绑定索引是重绑里最隐蔽的坑。注意PerformInteractiveRebinding方法传入的bindingIndex是当前Action内部自己的绑定数组索引不是整个ActionMap的全局索引。很多人在遍历绑定列表时用的是action.GetBindingIndexForControl()或者自己在ActionMap级别遍历得到的大索引传到重绑里就会出现覆盖错位甚至把别的动作绑定的键改掉。复合绑定是另一个坑。如果你给“Move”配了2D Vector Composite那么W、A、S、D是四个子绑定。重绑时要判断当前绑定是不是Composite的子项是的话你只能重绑单独那个子项不能把整个Composite当普通绑定直接覆盖。判断方法是通过binding.isPartOfComposite或绑定路径来区分。处理不好玩家重绑了“上方向”会把“左方向”也一起改了这种问题反馈率极高。4.3 按键显示文本的跨平台问题绑定路径在代码里是一串类似Keyboard/w的文本直接把它显示在UI里很丑需要做一个“路径到显示名”的映射。最简单的方式是构建一张表格把常用路径映射为本地化文本public static string GetDisplayName(string bindingPath) { switch (bindingPath) { case Keyboard/w: return W; case Keyboard/a: return A; case Keyboard/space: return Space; case Gamepad/buttonSouth: return A; default: return InputControlPath.ToHumanReadableString(bindingPath); } }注意手柄按键的“A键”在不同品牌手柄上物理位置不同甚至有南北布局差异。想显示成手柄图标的话一般需要美术做一套按钮图标再用插件映射到设备型号工作量不小。中小项目我建议先用文字显示把重心放在绑定逻辑上否则为了“好看”浪费大量时间不值得。5. 调试记录与常见问题速查表5.1 高频问题速查表在帮人排查Input System问题的过程中我整理了一张高频问题对照表按这个顺序排查能省很多时间现象常见原因解决办法动作完全没有反应没有Enable对应的ActionMap在OnEnable里调用对应map的Enable()生成了C#类还是找不到类型勾选了Generate C# Class后没点Apply点Apply让生成脚本落地ReadValue ()一直为零Action Type不是Value或者没配2D Vector Composite检查Action Type和Control Type配置按下了键事件却不触发Action上挂了Hold交互需要长按才触发确认交互配置是否符合设计意图手柄插上没反应设备没被识别或对应Map没Enable打开Input Debugger确认设备节点检查Control Scheme鼠标移动时角色狂抖没加死区或灵敏度太高调Deadzone检查RawValue按键重绑后其它动作乱了绑定索引传成了ActionMap全局索引确认是当前Action的局部索引本地多人插第二只手柄没反应设备没执行配对使用InputUser或PlayerInput自动配对确认控制方案这张表不是理论推演都是实际项目中高频踩点。大部分问题本质是“配置预期”和“运行时行为”不一致所以调试思路比背API更重要。5.2 用Input Debugger看输入链路新版Input System自带一个非常强的调试工具Window Analysis Input Debugger。打开之后左侧是设备列表点开任意设备能看到它当前所有控件的实时数值中间还能看到Action列表检查每个动作当前的值和状态。我遇到动作不触发时顺序是这样的先看Input Debugger里设备节点有没有识别出来再看对应Action在运行时的状态是不是Enabled最后用Debugger里的Event Trace看有没有事件流产生。这样三步能定位绝大多数问题。实际调试时很推荐打开Debugger的“On-Screen”显示功能它能在Game视图实时渲染当前按键状态录屏、排查手感问题都很有用而且不需要额外写调试UI。5.3 手感调优的个人经验最后单独聊两句关于手感的经验。第一不要过度相信默认的Deadzone数值。有些手柄摇杆中心漂移很严重默认死区不够角色会在原地缓慢移动。这时候如果直接去改移动速度或加速度只会越调越乱。正确做法是先停掉所有平滑逻辑在UI上打印ReadValueVector2()的原始值看清楚中心偏移量有多大再回头去配死区数值。第二键盘触发的按键事件和手柄触发的performed事件在行为细节上是有差异的。键盘按下是离散的真值手柄摇杆是模拟量如果你把同一套交互配置同时挂在两类设备上有些手感会不太统一。这时我习惯在Action上只做通用配置具体的死区、灵敏度放到代码里按设备分别处理。第三新旧输入系统同时开启是项目中后期特别容易翻车的点。Project Settings Player Active Input Handling里如果选了Both两个输入系统都会生效事件会重复触发Input Debugger也会显示两套事件流。如果你的项目已经全面转向新版建议直接只选New Input System可以少掉很多玄学问题。我把这块放在最后是因为我认为Input System真正难的不是某个API记不记得住而是你能不能把“按键”这个低层信息正确转化成“玩家意图”这个高层信号。多设备、重绑、调试都是围绕这个核心在做文章。项目做得越多越会发现提前设计好Action资产、定好事件和轮询的边界、知道哪里会出岔子比临时到处找报错要省心得多。

相关新闻

开源代码审查工具open-code-review:让Code Review不再流于形式

开源代码审查工具open-code-review:让Code Review不再流于形式

如果你在团队里推过 code review,大概率见过这些场面:PR 堆了一周没人看,临到上线前 reviewer 匆匆点了通过;或者 review 倒是做了,但评论全停留在“这里变量名改一下”“少个分号”这种层级。代码评审本身是好事&…

2026/10/19 15:40:37 阅读更多 →
代码审查流程改造:开源工具组合打造可量化的团队协作机制

代码审查流程改造:开源工具组合打造可量化的团队协作机制

说起代码审查,我接手团队后的第一件事就是把这套流程重新立起来。当时团队不是没有 Review,而是 Review 流于形式——PR 挂了两三天没人理,偶尔有人点了 Approve 也只是走了个过场,更别说那些合并进去之后才发现的设计缺陷。后来我…

2026/10/19 15:40:37 阅读更多 →
AI人性化测试认证框架:从可解释性到公平性的测试范式变革

AI人性化测试认证框架:从可解释性到公平性的测试范式变革

1. 为什么说这是一场测试范式革命过去三个月,我几乎把所有精力都压在一件事上:研究“某区域AI法案2.0”对AI测试范式的要求,并把它落地成一套可执行的人性化测试认证框架。这听起来像合规任务,但做着做着你会发现,它其…

2026/10/19 15:40:37 阅读更多 →

最新新闻

基于iRTU和Air8000A的RS485环境监测系统:从协议栈开发到配置化上云

基于iRTU和Air8000A的RS485环境监测系统:从协议栈开发到配置化上云

做物联网数据采集最头疼的不是传感器选型,而是如何把数据稳定、可靠地传到云端。前段时间我把一套环境监测系统从“单片机裸跑串口转发”的旧路子,迁移到基于iRTU固件AirUI界面Air8000A硬件485传感器这套组合上,总算体会到什么叫“配置比写代…

2026/10/19 19:15:14 阅读更多 →
ACPI电源按钮S3唤醒到S0完整流程图解与排查指南

ACPI电源按钮S3唤醒到S0完整流程图解与排查指南

做底层固件和驱动调试的人,总有一天会被ACPI的睡眠唤醒折磨:笔记本明明进了S3,按下电源按钮却毫无反应,或者屏幕亮了但系统卡在半路,又或者唤醒后USB设备全部掉线。这些问题表面上都是“电源按钮”和“S3/S0切换”的锅…

2026/10/19 19:15:14 阅读更多 →
CNN猫狗分类实战:TensorFlow+Keras从数据到模型调参全解析

CNN猫狗分类实战:TensorFlow+Keras从数据到模型调参全解析

猫狗分类这个项目,我从 TensorFlow 和 Keras 入手做过不止一遍,每次带新人入门,也都拿它当第一块练手砖。它看着简单——不就是区分一张图里是猫还是狗吗,但真把数据预处理、卷积特征提取、训练调参这些环节走一遍,你对…

2026/10/19 19:15:14 阅读更多 →
从零搭建代码评审工具链:open-code-review 实践与踩坑

从零搭建代码评审工具链:open-code-review 实践与踩坑

1. 从零搭建一套代码评审工具链,我为什么盯上了 open-code-review第一次听到 open-code-review 这个词,是在一个做后端的朋友群里。有人吐槽说团队里代码评审全靠人肉盯,PR 一多就漏,评审意见散落在各种聊天记录里,过两…

2026/10/19 19:14:12 阅读更多 →
从零搭建 open-code-review 流程:自动化检查与评审人分配实战

从零搭建 open-code-review 流程:自动化检查与评审人分配实战

1. 为什么我要自己搭一套 open-code-review 流程第一次听到“open-code-review”这个词,很多人会以为它只是某个开源项目的名字。实际上,它更像是一类工程实践的统称:把代码评审这件事从“闭门会议”变成“开放、可追溯、可自动化”的流程。我…

2026/10/19 19:14:12 阅读更多 →
pandas数据合并全解析:merge、join、concat一文搞懂

pandas数据合并全解析:merge、join、concat一文搞懂

搞数据分析的兄弟,pandas 用久了,merge、join、concat 这三兄弟的分工你搞明白了吗?坦白说,我见过不少入门一两年的朋友,仍然在这三个方法之间来回试。逻辑上用对了,数据量小的时候无感,顶多多跑…

2026/10/19 19:13:10 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →