feat: flag skinned-mesh part-tracking targets - #299
Merged
Conversation
added 2 commits
September 2, 2026 20:02
A bone-skinned mesh part draws its vertices by skinning while its own transform stays near the setup pose, so following it snaps the target near the character root rather than onto the visible art. The node is followed faithfully (the behaviour is correct), but picking such a part is an easy mistake. - add SpriteStudioPlayer2D::is_part_skinned_mesh(part_name), backed by a binary-property cache in SsInternalPlayer (PartMeshBinding influence bone count > 0 -- the same test every sibling player uses) - drop skinned-mesh parts from the SpriteStudioPartAttachment2D part_name dropdown (still typable by hand for the rare deliberate case) - add a non-blocking configuration warning when part_name resolves to a skinned mesh, pointing at the NULL-part workaround - document the limitation in the Part Tracking guide (en/ja) Rigid (deform-only) meshes track faithfully and stay selectable. Claude-Session: https://claude.ai/code/session_01JsXPn69XiQoSonP8q68CiQ
The part-tracking guide already noted that skinned meshes track poorly; say what the editor does about it: the part_name dropdown omits skinned meshes (reachable only by typing a name by hand), and a name that does resolve to one raises the node's configuration warning. Rigid (deform-only) meshes stay in the dropdown and raise no warning. Claude-Session: https://claude.ai/code/session_01JsXPn69XiQoSonP8q68CiQ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Part tracking (
SpriteStudioPartAttachment2D) could target a skinned (bone-bound) mesh part, which tracks poorly: the vertices are drawn by bone skinning while the part's own transform stays near the setup node position (usually the character root), so the follower snaps near the root rather than onto the visible art. The behaviour is correct (the node is followed faithfully) but picking such a part is an easy mistake.Surfaced in SSPlayerForUnity's QA and confirmed as a shared
libssruntimetrait across every sibling player. This is the Godot-side handling.Changes
SpriteStudioPlayer2D.is_part_skinned_mesh(part_name)— backed by a binary-property cache inSsInternalPlayer(built once in_rebuild_part_index_map, alongside the part names). Judged byPartMeshBinding.influence_bonelength > 0, the same test every sibling player uses, so the flag agrees across engines.part_nameinspector dropdown now omits skinned-mesh parts. It staysENUM_SUGGESTION, so a name can still be typed by hand for the rare deliberate case. Rigid (deform-only) meshes track faithfully and remain selectable.part_nameresolves to a skinned mesh (e.g. typed by hand), the node shows a non-blocking ⚠ in the Scene dock pointing at the NULL-part workaround. Tracking is never blocked.Notes
drivePosition/driveRotationOFF regression seen in Unity does not apply here:SpriteStudioPartAttachment2Dis a node, so adding it runs the C++ constructor and theupdate_position/update_rotationdefaults take effect. No code change needed.build-extension.ps1) passes; skinned-mesh dropdown/warning checked visually in the editor.https://claude.ai/code/session_01JsXPn69XiQoSonP8q68CiQ