Spine 目标骨骼跟随鼠标却总偏移?先确认父骨骼坐标
屏幕点、骨架世界点和父骨骼局部点不是同一种数据。写入目标骨骼前,先记录坐标域与转换顺序。


角色不移动时,手臂目标似乎跟着指针;角色一平移或翻转,目标就偏开。这个现象值得先检查坐标转换,不能仅凭画面就认定握点或原图画错。本文讨论外部运行项目的骨骼定位,不宣称工作台提供鼠标驱动IK编辑器。
先给每个点写清楚坐标域
Spine运行时骨架指南说明,骨骼局部变换结合父骨骼的世界变换产生世界变换;这里的世界坐标位于根骨骼所处的坐标系统。它不自动等于网页指针的屏幕像素,也不保证等于引擎相机转换后的场景坐标。
排查记录至少分为三列:原始屏幕或容器点、接收集成要求的骨架世界点、将写入的父骨骼局部点。缩放画布、相机、容器偏移和显示缩放属于集成转换链,先查实际框架,不套用跨引擎通用公式。
写入子骨骼平移时,要选对转换对象
当接收接口要求子骨骼相对于父骨骼的局部x/y时,先把目标世界点转换到父骨骼的局部空间。当前API的worldToLocal说明指出,它转换到调用对象自身的局部空间;因此对目标骨骼自身调用,与对父骨骼调用,得到的点可能不是同一个用途。
当前API还描述了worldToParent等方法,但旧运行库与不同语言绑定的对象组织可能不同。使用安装版本的等价接口,不把本文的概念名称直接复制成所有SDK都可运行的代码。没有父骨骼的根对象另按集成契约处理。
两个算例,识别“只减偏移”的边界
以下是纯二维坐标算例,不是引擎实测。假设父对象只平移到(100,50),无旋转、缩放或错切,世界目标为(130,70),则父局部点为(30,20)。
若父对象还将X轴缩放为-1,其他条件不变,则关系为世界x=100-局部x,目标的局部x应为-30。仍然只做130-100得到30,就会放到另一侧。存在旋转、错切或复杂继承时,更应使用正确对象的逆变换,而不是继续追加手工偏移量。
转换正确后还要检查更新时序
使用与当前姿态一致的变换;动画应用可能重新写局部值,约束也可能影响最终结果。按运行库流程重算世界变换,避免读取上一帧的数据,并参照约束与部件偏移检查区分坐标域和更新顺序两个问题。
- 先固定姿态和父变换,记录一个点的转换输入与输出。
- 只改变角色位置,再只改变镜像或缩放,分别检查跟随结果。
- 恢复动画和约束后重复观察,定位首次被覆盖的阶段。
- 保存接收工程版本和目标骨骼,不用移动源图片补偿程序坐标错误。
在Spine工作台保留模板和素材批次作为外观基线;程序坐标和目标控制仍由接收项目验收。本篇没有执行指针跟随工程实验,配图只展示握持关系。
