Unity透明窗口桌面精灵:Win32 API实现点击穿透与动画跳动

简介:一套基于Unity引擎的桌面精灵完整工程与配套脚本,面向希望实现类似QQ宠物透明桌面角色的Unity开发者。工程围绕窗口无边界设置、透明渲染、界面布局、动画控制及鼠标事件处理等关键技术展开,并涉及系统接口调用与跨平台兼容处理,能帮助掌握桌面透明应用的实现原理。其中包含可直接运行的完整项目,涵盖场景、预制体、材质、模型、动画片段、动画控制器与脚本,动画控制器中保留了状态机参数和触发逻辑,便于学习精灵连续跳动与拖拽交互。整个压缩包共1267个文件,涵盖bin运行库、asset场景数据、mat材质、fbx模型、anim动画、prefab预制体、controller动画控制器及cs源代码等,整体约41.45MB,目录清晰,可直接导入Unity编辑器查看或二次开发。目前已有1593人学习下载,适合研究透明窗口与动画驱动的初中级Unity开发者借鉴工程组织与代码实现。

1. 桌面精灵不难做,难的是让窗口“消失”在桌面里

动画跳动只是这个项目里最轻松的部分——真正折腾人的是让Unity窗口透明、让鼠标点击穿透、让精灵悬浮在桌面图标之上却又不抢焦点。这次拆的模拟项目X,就是用Unity把透明窗口、随机跳动动画、点击穿透和拖拽移动组合成一只真正的桌面宠物精灵。它适合两类人:一类想在Windows桌面上放个会动的小东西,另一类想搞清楚Unity窗口怎么和Win32打交道。透明是核心,动画是表象,整篇会把这条链路从窗口句柄一路拆到Animator状态机。

2. 技术选型与整体架构:Unity只做渲染,窗口逻辑全交给Win32 API

2.1 为什么是Unity而不是其他方案

桌面精灵本质上是“一个异形窗口 + 动画播放器”。实现路径很多:Electron可以但太重,内存动辄两三百兆;WPF动画能力弱,想让精灵有弹性律动还得写一堆故事板;选Unity的理由很直接——Animator状态机、Sprite序列帧、C#协程刚好覆盖动画需求的三件套,而且打包成Windows原生窗口后能直接拿句柄做文章。

但Unity有个反常识的地方:它不暴露任何“让窗口透明”的接口。Unity只关心Game视图里渲染什么,窗口本身的长相归Windows管。所以项目里所有窗口操作都走了一层P/Invoke封装,把user32.dll和dwmapi.dll里的几个函数用C#重新声明一遍。透明窗口、点击穿透、隐藏任务栏、去除圆角,全部在这层解决。渲染和窗口控制彻底分离,改起来不互相踩脚。

2.2 目录结构与脚本分层:四个文件夹对应四件事

资源结构沿用了Unity常见的按职责分层,但脚本目录按“窗口层”和“动画层”切开,避免透明逻辑和动画逻辑混在一个脚本里。

Assets/ ├── Scenes/ │ └── PetScene.unity ├── Scripts/ │ ├── Core/ │ │ ├── WindowFrame.cs // 获取窗口句柄、设置扩展样式 │ │ ├── ClickThrough.cs // 鼠标穿透开关 │ │ └── DragController.cs // 穿透模式下用全局鼠标状态拖拽窗口 │ ├── Animation/ │ │ ├── BounceLoop.cs // 随机间隔触发跳动 │ │ └── PetAnimator.cs // 动画状态管理、Trigger分发 │ └── UI/ │ └── SettingsPanel.cs // 退出、穿透开关、配置面板 ├── Sprites/ │ ├── Idle/ │ ├── Bounce/ │ └── Hit/ └── Animations/ └── Pet.controller

Core里三个脚本解决的是“窗口怎么活下来”,Animation里两个脚本解决的是“精灵怎么动起来”,UI层负责给人一个关闭和配置的出口。这个分层想清楚之后,后面加多精灵、加配置化也只是在Animation和UI层扩展,Core基本不用动。

2.3 数据流:从鼠标到动画的一整条链路

桌面精灵的交互链路和普通Unity游戏完全不同。普通游戏里鼠标事件由EventSystem派发,但在穿透模式下,鼠标事件根本不进Unity窗口——它直接穿透到桌面去了。所以项目里做了一个“双通道”设计:

  • 穿透模式下:用GetAsyncKeyState轮询全局左键状态,配合屏幕坐标判断是否按到了精灵区域,按住就拖拽窗口,松开后交给动画层播一个落地缓冲动画。
  • 非穿透模式下:Unity的EventSystem正常接收点击,设置面板上的按钮、退出按钮都在这个模式下工作。

两条通道在ClickThrough.cs里切换,切换的本质就是SetWindowLong那个WS_EX_TRANSPARENT位。整条链路串起来是:轮询到拖拽动作 → 定位窗口到新坐标 → 松手触发Bounce → Animator SetTrigger → 播放跳动序列帧 → 回到Idle循环。

3. 核心模块拆解:透明窗口与点击穿透的一行P/Invoke背后

3.1 窗口句柄与扩展样式:SetWindowLong的两个关键Flag

第一步是拿到Unity游戏窗口的原生句柄。打包后GetActiveWindow返回的就是游戏主窗口,编辑模式下同理。拿到句柄后,用GetWindowLong读取当前扩展样式,按位或上WS_EX_LAYERED和WS_EX_TOOLWINDOW,再写回去。

using System; using System.Runtime.InteropServices; using UnityEngine; public class WindowFrame : MonoBehaviour { [DllImport("user32.dll")] private static extern IntPtr GetActiveWindow(); [DllImport("user32.dll", EntryPoint = "GetWindowLong")] private static extern int GetWindowLong32(IntPtr hWnd, int nIndex); [DllImport("user32.dll", EntryPoint = "SetWindowLong")] private static extern int SetWindowLong32(IntPtr hWnd, int nIndex, int dwNewLong); private const int GWL_EXSTYLE = -20; private const int WS_EX_LAYERED = 0x00080000; private const int WS_EX_TRANSPARENT = 0x00000020; private const int WS_EX_TOOLWINDOW = 0x00000080; private IntPtr hWnd; private void Start() { // Unity 原生窗口句柄,打包后就是游戏主窗口 hWnd = GetActiveWindow(); ApplyTransparentStyle(); } private void ApplyTransparentStyle() { int style = GetWindowLong32(hWnd, GWL_EXSTYLE); style |= WS_EX_LAYERED; // 允许按alpha通道做混合透明 style |= WS_EX_TOOLWINDOW; // 不在任务栏和Alt+Tab里出现 SetWindowLong32(hWnd, GWL_EXSTYLE, style); } }

GWL_EXSTYLE是扩展样式的索引,值为-20。WS_EX_LAYERED让窗口支持逐像素alpha混合,这是透明的基础;WS_EX_TOOLWINDOW让窗口不在任务栏显示,桌面精灵不该占任务栏位置。这里用的是EntryPoint指定GetWindowLong,因为64位系统上有GetWindowLongPtr和GetWindowLong两套API,指定入口避免平台差异带来的坑。

3.2 透明渲染的配套设置:Camera和Canvas缺一不可

窗口透明只是给了系统“可以透明”的权限,真正决定哪些像素透明的是Unity渲染出来的alpha通道。这一步最容易翻车:很多人设置了窗口样式后发现整个窗口黑乎乎一片,因为Camera默认的Clear Flags是Skybox,渲染出来的背景根本不透明。正确配置是Camera的Clear Flags选Solid Color,背景色alpha设为0。

配置项值说明
Clear FlagsSolid ColorSkybox会强制写不透明背景
BackgroundRGBA(0, 0, 0, 0)alpha必须为0,RGB值无所谓
Culling MaskUI + Pet只渲染精灵和UI,别带环境光
HDR关闭HDR缓冲会把alpha信息搞脏
Post Processing关闭后处理会重建FBO,透明通道直接丢失

Canvas这边也有要求:Canvas Render Mode必须用Screen Space - Camera,且绑定到上面那个透明相机,这样UI层才能和精灵一起被渲染到透明画布上。如果用默认的Screen Space - Overlay,UI会单独画在一层不透明的画布上,精灵透明了但设置面板一块白底。

3.3 点击穿透与拖拽共存:运行时切换WS_EX_TRANSPARENT

WS_EX_TRANSPARENT这个样式一旦设置,整个窗口的所有像素都不再接鼠标消息,包括Unity的UI。所以项目里做了一个运行时开关:平时开启穿透,呼出设置面板时临时关闭,面板关闭后再加回去。

public class ClickThrough : MonoBehaviour { private IntPtr hWnd; private const int GWL_EXSTYLE = -20; private const int WS_EX_TRANSPARENT = 0x00000020; public void SetPenetrate(bool enable) { int style = GetWindowLong32(hWnd, GWL_EXSTYLE); if (enable) style |= WS_EX_TRANSPARENT; // 鼠标消息全部穿透到桌面 else style &= ~WS_EX_TRANSPARENT; // 恢复接收鼠标事件 SetWindowLong32(hWnd, GWL_EXSTYLE, style); } }

按钮事件的回调里调SetPenetrate(false),面板关闭时再SetPenetrate(true),整个过程在运行时动态改样式,不用重启窗口。这样一来,桌面精灵本体可以完全穿透,但需要点时又能让出交互权。

穿透模式下的拖拽不能靠Unity的OnMouseDown,因为鼠标事件根本进不来。实际做法是轮询GetAsyncKeyState检测左键状态,再用Input.mousePosition判断光标是否落在精灵周围的可拖拽矩形内。

public class DragController : MonoBehaviour { [DllImport("user32.dll")] private static extern IntPtr GetActiveWindow(); [DllImport("user32.dll")] private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hAfter, int x, int y, int cx, int cy, uint flags); [DllImport("user32.dll")] private static extern short GetAsyncKeyState(int vKey); private const int VK_LBUTTON = 0x01; private Rect dragArea = new Rect(0, 0, 256, 256); // 精灵所在屏幕区域 private void Update() { bool leftDown = (GetAsyncKeyState(VK_LBUTTON) & 0x8000) != 0; if (leftDown && dragArea.Contains(Input.mousePosition)) { int screenX = (int)Input.mousePosition.x; int screenY = Screen.height - (int)Input.mousePosition.y; SetWindowPos(GetActiveWindow(), IntPtr.Zero, screenX, screenY, 0, 0, 0x0001 | 0x0002); } } }

这里注意坐标系的坑:Input.mousePosition以屏幕左下角为原点,而SetWindowPos用的是左上角原点,所以y分量必须翻转。0x0001和0x0002分别是SWP_NOSIZE和SWP_NOZORDER,表示只移动位置、不改尺寸和层级。

4. 动画跳动系统:从Animator状态机到随机节奏控制

4.1 动画素材与状态机设计:Idle、Bounce、Hit三态

这只精灵的动画素材是序列帧切片,按行为分成三组放在Sprites目录下:Idle是等待时的呼吸浮动,Bounce是跳动,Hit是被点击时的缩闪。Animator控制器里建了三个状态,Idle默认循环,Bounce和Hit播放完毕自动回到Idle。

动画帧数帧率循环
Idle824是
Bounce1230否,退出时间0.9
Hit630否

Bounce和Hit都用Trigger切换,区别在优先级:Hit用Transition的“Has Exit Time + Interruption Source”设为Current State,Idle状态下触发Hit可以打断Bounce的尾部,保证点击反馈及时。这个细节不设置的话,Bounce播完才能响应Hit,手感会明显迟钝。

4.2 随机间隔触发:为什么用协程而不是InvokeRepeating

跳动的节奏如果固定间隔,看半小时就会觉得机械。项目里用协程在每次跳动后重新随机一个等待时间,让精灵的“活跃周期”看起来更像活的。这里刻意避开了InvokeRepeating——它只能固定间隔重复调用,想要随机间隔还得CancelInvoke再重新Invoke,绕一圈还不如协程清爽。

using System.Collections; using UnityEngine; public class BounceLoop : MonoBehaviour { public Animator animator; public float minInterval = 2.5f; public float maxInterval = 6f; private void Start() { StartCoroutine(RandomBounce()); } private IEnumerator RandomBounce() { while (true) { // 每次跳动后重新随机一次间隔,节奏不落俗套 float waitTime = Random.Range(minInterval, maxInterval); yield return new WaitForSeconds(waitTime); animator.SetTrigger("Bounce"); } } }

waitTime的范围是核心调参项:min太小精灵会显得亢奋,max太大又像卡死。2.5到6秒这个区间比较自然,适合当默认值。值得注意的一点:WaitForSeconds受Time.timeScale影响,如果后面做“桌面专注模式”这种会暂停游戏时间的功能,这里要换成WaitForSecondsRealtime,否则精灵在暂停状态下陷入静默。

4.3 非穿透模式下的点击反馈与动画优先级

设置面板打开时窗口恢复接收鼠标事件,这期间点击精灵本体应该触发Hit动画。由于Translucent穿透已经关闭,Unity的EventSystem能正常工作,直接在精灵根物体上挂EventTrigger的PointerDown回调即可。

public class PetAnimator : MonoBehaviour { public Animator animator; public void OnPointerDown() { animator.SetTrigger("Hit"); } }

这里有个容易忽略的关联:点击穿透和动画触发是互斥的。穿透模式下鼠标事件进不来,Hit触发不了;非穿透模式下能触发但精灵挡住桌面。设计上说得通——穿透模式是为了让精灵不干扰桌面操作,这时候不需要反馈;只有打开配置面板进入“可交互模式”时点击反馈才有意义。两套模式对应两套交互语义,比强制让穿透和点击共存干净得多。

5. 桌面精灵常见问题排查:透明失败、边框残留、点击失灵

5.1 窗口黑底,精灵外面一圈黑块

现象:设置完透明样式后,窗口确实变方了,但背景不是透明而是纯黑。

原因:Camera的Clear Flags还停留在Skybox或者背景色alpha为1。Unity默认背景完全不透明,窗口Layered样式拿到的是一个不透明的alpha通道,自然显示为黑底。另一个常见诱因是打开了后处理,Bloom或Color Grading会把场景重新合成到一张新贴图上,alpha被覆盖成不透明。

解决:把Camera的Clear Flags改成Solid Color,背景色alpha拉成0,关闭HDR和后处理。改完在Game视图勾选“Alpha”通道预览,直接看到透明的背景再打包测试。记住一个检查顺序:先确认Game视图Alpha通道是透明,再查窗口样式,黑底瓶颈80%出在渲染缓冲这一侧。

5.2 Win11下窗口四角有圆角残留和阴影

现象:精灵本身透明正常,但窗口四周出现圆角白边或一块半透明阴影,在浅色桌面上特别刺眼。

原因:Windows 11的DWM默认给所有顶级窗口加圆角裁剪和阴影效果,透明窗口也逃不掉。这个效果是系统窗口级渲染,Unity管不到。

解决:用dwmapi.dll的DwmSetWindowAttribute把窗口圆角偏好设置成“不圆角”。

[DllImport("dwmapi.dll")] private static extern int DwmSetWindowAttribute(IntPtr hwnd, uint attribute, ref int value, uint size); private const uint DWMWA_WINDOW_CORNER_PREFERENCE = 33; private const int DWMWCP_DONOTROUND = 1; int pref = DWMWCP_DONOTROUND; DwmSetWindowAttribute(hWnd, DWMWA_WINDOW_CORNER_PREFERENCE, ref pref, sizeof(int));

属性ID 33是Win11新增的,Win10上调用会返回失败,忽略返回值即可。设置完最好再SetWindowPos强制刷新一次窗口区域,否则有的系统不会立即重绘裁剪区域。

5.3 设置面板打开后按钮死活点不动

现象:配置面板正常显示,但鼠标点退出按钮没反应,点击事件像直接穿到了桌面。

原因:WS_EX_TRANSPARENT是窗口级样式,对整个窗口生效,不只针对精灵本体。打开面板前如果没把这个位去掉,面板区域同样被穿透,EventSystem收不到任何点击消息。

解决:面板打开回调里先调SetPenetrate(false),关闭回调里再SetPenetrate(true)。这个开关不能只在Start里设置一次,必须做成运行时动态切换。我一般还会加个日志打印当前样式值,排查时能立刻看出穿透位状态。

5.4 拖拽时窗口位置漂移,鼠标跟手但窗口抖动

现象:穿透模式下拖拽精灵,窗口位置不断跳动,光标和精灵的偏移越来越大。

原因:SetWindowPos每次都把窗口左上角移到光标位置,而光标实际点在精灵身体的某个偏移位置,于是一拖就产生固定偏移动量。同时,Input.mousePosition在Unity渲染帧间隔内不断更新,窗口移动又触发渲染,形成抖动。

解决:记录鼠标按下瞬间的偏移offset = mousePos - windowPos,移动时按mousePos - offset计算目标坐标;同时给拖拽加一个距离阈值,移动超过几个像素才执行SetWindowPos,过滤掉误触和微抖动。

5.5 开机自启动后透明样式失效

现象:手动运行exe一切正常,放进启动文件夹开机自启后,窗口又变成黑底或不透明。

原因:开机时系统还在初始化显示驱动,GetActiveWindow拿到的句柄有效,但DWM还没完全接管窗口,此时设置WS_EX_LAYERED会被系统忽略。另一个更隐蔽的原因是Unity引擎在Start阶段还没完成首帧渲染,窗口缓冲区是空的。

解决:透明样式设置延迟几帧再执行,或者用一个重复检查——每帧读一次样式值确认位已生效,最多等2秒。写入注册表自启动时也注意路径,检查是否因为WorkingDirectory不对导致Unity资源没加载完。

6. 二次开发方向:把单精灵改成多精灵管理器的改造思路

单只精灵跑通之后,自然想加第二只、第三只,让他们各跳各的,互不干扰。直接复制GameObject是最差的做法——每个实例都挂着同一个AnimatorController引用,一个触发Hit,所有精灵一起闪。我的改造思路是把精灵配置收归成一个ScriptableObject,再通过一个PetManager统一管理实例的创建与初始化。

[CreateAssetMenu(fileName = "PetConfig", menuName = "DesktopPet/PetConfig")] public class PetConfig : ScriptableObject { public string petName; public Sprite[] idleFrames; public Sprite[] bounceFrames; public float bounceMinInterval = 2f; public float bounceMaxInterval = 5f; }

每只精灵的动画帧、跳动节奏全部装进配置资产。创建新精灵时,拖一个PetConfig进去,再让PetManager在运行时用同一份Prefab实例化并将脚本里的AnimatorController替换成按配置生成的新控制器:

public class PetManager : MonoBehaviour { public GameObject petPrefab; public PetConfig[] pets; private void Start() { foreach (var config in pets) { var instance = Instantiate(petPrefab, transform); instance.GetComponent<PetView>().Initialize(config); } } }

PetView在Initialize里把AnimationClip按配置组建成独立的AnimatorOverrideController,保证每只精灵的Trigger互不串扰。验证时直接创建三份配置,一只设定2秒一跳、一只5秒一跳、一只不跳动纯待机,跑到桌面上观察各自动作节奏是否独立。从那以后我每次做透明窗口项目,都先单窗口跑一遍alpha通道确认,再加动画和交互层,这个顺序没变过。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

多模态RAG工作流实战:从图文混排文档到精准问答

多模态RAG工作流实战:从图文混排文档到精准问答

把一份几十页的产品手册、一堆扫描合同、几十页会议 PPT&#xff0c;以及同事随手拍的白板照片&#xff0c;全部丢进同一个知识库&#xff0c;然后让问答系统不仅能引用里面的话&#xff0c;还能看懂流程图、表格和截图里的关键信息&#xff0c;最后给出带页码和出处依据的回答…

2026/10/20 16:21:54 阅读更多 →
一条LSTM流水线搞定航空发动机剩余寿命预测:从数据预处理到部署

一条LSTM流水线搞定航空发动机剩余寿命预测:从数据预处理到部署

简介&#xff1a;面向工业预测性维护与深度学习初学者&#xff0c;这套Python实现的航空发动机剩余寿命预测方案基于LSTM与RNN&#xff0c;重点解决传感器噪声大、变量维度高导致的拟合困难。通过多变量输入、单变量输出的模型设计&#xff0c;利用长短期记忆单元避免普通循环网…

2026/10/20 16:21:54 阅读更多 →
OpenMMLab ViT模型导出ONNX及ONNX Runtime推理部署实践

OpenMMLab ViT模型导出ONNX及ONNX Runtime推理部署实践

1. 项目概述&#xff1a;这条链路为什么值得折腾先聊点实际的。熟悉深度学习部署的朋友应该都有这种感觉&#xff1a;训练一套模型是一回事&#xff0c;把它高效地跑在目标环境里是另一回事。模型训练完&#xff0c;一堆评测指标都很好&#xff0c;到了真正要落地的时候&#x…

2026/10/20 16:21:54 阅读更多 →

最新新闻

OpenClaw实战:开源AI智能体本地部署与自动化办公配置指南

OpenClaw实战:开源AI智能体本地部署与自动化办公配置指南

聊AI聊了两年多&#xff0c;市面上各种大模型、各种助手我用过不少&#xff0c;但绝大多数时候还是觉得“差点意思”。最典型的就是&#xff0c;你问它问题它能答得像模像样&#xff0c;可一旦让它“把事办了”——比如整理文件夹、批量处理图片、定时抓取信息再汇总成报告——…

2026/10/20 17:12:41 阅读更多 →
混合专家模型(MoE)稀疏激活:原理、实现与工程实践

混合专家模型(MoE)稀疏激活:原理、实现与工程实践

做 NLP 训练这几年&#xff0c;MoE&#xff08;混合专家&#xff09;已经从一个圈子里的工程黑话&#xff0c;变成了大模型设计的标配选项。刚接触这个概念时&#xff0c;我也觉得“专家”“路由”这些词有点玄乎&#xff0c;但真正把一个带稀疏激活的前馈层写进 Transformer 之…

2026/10/20 17:12:41 阅读更多 →
MoE混合专家模型详解:稀疏激活、路由算法与工程实践

MoE混合专家模型详解:稀疏激活、路由算法与工程实践

有段时间没聊架构层面的东西了&#xff0c;今天想好好写一写MoE&#xff08;Mixture of Experts&#xff0c;混合专家&#xff09;。这两年它几乎成了超大模型的标准配置&#xff0c;GPT系列、各类开源大模型都在用&#xff0c;开源社区里也越来越多出现基于MoE的模型。核心原因…

2026/10/20 17:12:41 阅读更多 →
沐曦GPU年亏8亿背后:16亿营收与国产芯片的生存逻辑

沐曦GPU年亏8亿背后:16亿营收与国产芯片的生存逻辑

看到沐曦2025年的这份财务预测时&#xff0c;我第一反应不是“又一家亏损的GPU公司”&#xff0c;而是先拿计算器把数字拆开&#xff1a;营收16亿到17亿&#xff0c;扣非后净亏7亿到8.35亿。这家公司等于每收回来100块钱收入&#xff0c;就有40多块钱的经营净流出。数字摆在台面…

2026/10/20 17:12:41 阅读更多 →
MFC对话框程序接入MySQL:从环境配置到数据写入

MFC对话框程序接入MySQL:从环境配置到数据写入

MFC和MySQL这个组合&#xff0c;听起来确实有点“复古”&#xff0c;但直到今天&#xff0c;我身边仍然有一大批内部工具、工装配套软件、实验室记录程序是用MFC对话框写的&#xff0c;后端数据清一色落在MySQL里。我在VS2019下把一个MySQL 8.0.25数据库接进现成的MFC工程&…

2026/10/20 17:12:41 阅读更多 →
欧洲首家量子计算公司上市:IQM与SPAC合并背后的逻辑与风险

欧洲首家量子计算公司上市:IQM与SPAC合并背后的逻辑与风险

量子计算公司要上市了&#xff0c;而且是在欧洲。这条消息我第一时间看到时&#xff0c;第一反应是量子赛道终于在欧洲跨出了资本市场那一步。欧洲量子计算领军企业IQM宣布与特殊目的收购公司Real Asset Acquisition Corp.达成合并协议&#xff0c;交易完成后将成为欧洲首家上市…

2026/10/20 17:11:38 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →