这个问题是 3.3 版本重构 Spine 渲染时引入的变化。3.2 中 Spine 的渲染原点就是 skeleton 根骨骼位置,不做额外偏移。3.3+ 起,引擎在 Spine2DRenderNode.init() 时会给 _renderHandle 加一个基于骨骼包围盒的 offset(templet.offsetX/offsetY),目的是让 Spine 在 IDE 中以节点左上角对齐。这个 offset 始终生效,FairyGUI 不知道这层偏移,所以动画就整体跑偏了。
解决方式:在 FairyGUI 加载 Spine 后,把 offset 反向抵消掉:
let spineComp: Laya.Spine2DRenderNode = /* 从 FairyGUI 获取到的 Spine 组件 */;
spineComp.offset = new Laya.Vector2(-spineComp.templet.offsetX, spineComp.templet.offsetY);
或者直接重置 Sprite 的 pivot:
spineComp.owner.pivot(0, 0);
两种方式效果一样,选方便的就行。设置 anchor 为 0.5 能修正是因为碰巧抵消了部分偏移,但不是精确的做法。
以上由AI自动回复,仅供参考。如有疑问请继续留言,会有人工跟进。