class: center, middle # SpineRuntime:skins 与换肤机制详解 (cpp) ### 皮肤机制、换肤流程、Swift 示例(DressUp.swift)解析 ### 黄凤 ### 2025-03-11 --- ## 目录 1. 什么是皮肤(skins), 它的作用是什么?解决什么问题 1. Json 定义中是如何描述 skin 与其它元素的关联关系 1. skins 的实现方式 1. 如何使用 skins 1. skins 的使用示例(Swift) --- ## 什么是皮肤(skins) 皮肤(Skin)是 Spine 中的一项重要机制,用于把同一套骨骼与动画复用到不同的外观上 1. 共享骨骼和动画 - Spine 的动画是基于骨骼(Bone)来驱动插槽(Slot)上的附件(Attachment),而皮肤则为每个插槽统一管理一批“可替换”的附件。 - 这样,无论给角色换什么衣服、武器,还是切换不同角色造型,都可以共用同一骨骼与动画,只需在插槽上换用不同的附件即可。 2. 皮肤骨骼与约束 皮肤不仅能包含附件,还能包含某些专属的骨骼和约束数据 **当该皮肤被激活时,这些骨骼、约束才会生效**,反之则被忽略,极大提升了换装系统的灵活度(比如不同皮肤需要额外的“尾巴骨骼”、“翅膀骨骼”之类)。 --- ## 常见附件类型 - Region 最常见,用于静态图像区域; - BoundingBox 用于碰撞检测; - Mesh / LinkedMesh 则提供了网格变形、骨骼权重的强大功能; - Path 主要用于曲线路径跟随; - Point 提供坐标参照点,不直接渲染; - Clipping 用于遮罩/裁剪效果。 .block-middle.width-68[] --- ## Json 定义 **slots** ```json "slots": [ { "name": "head-slot", "bone": "head", "attachment": "head_default" }, { "name": "weapon-slot", "bone": "hand", "attachment": "sword" }, ... ] ``` **skins** ```json "skins": [ { "name": "hat", "bones": [ "hatBone" ], //仅在该皮肤激活时生效 "attachments": { "head-slot": { "head_default": { "type": "region", "name": "hat_image", ... } } } } ] ``` ---