When avatar spine is finish, but some layer is broken 😢
Am I missing some steps?
Spine : 3.5.32
Spine-Unity : 3.5.x
private Skin myDynamicSkin = new Skin("newskin");
SkeletonAnimation skelAnim = this.GetComponent<SkeletonAnimation>();
SkeletonData data = skelAnim.skeleton.data;
Skeleton skeleton = this.GetComponent<SkeletonAnimation>().Skeleton;
AtlasAsset atlasAsset = AssetManager.LoadAsset(path) as AtlasAsset;
Atlas atlas = atlasAsset.GetAtlas();
Skin defaultSkin = data.defaultSkin;
AtlasAttachmentLoader loader = new AtlasAttachmentLoader(atlas);
float scaleMultiplier = skelAnim.skeletonDataAsset.scale;
foreach (SLua.LuaTable.TablePair pair in groupSlots)
{
try
{
var slot = pair.value.ToString();
var check = skeleton.FindSlot(slot);
MeshAttachment parentMesh = LinkedMeshUtilities.FindAttachment(skeleton, slot, "default", slot) as MeshAttachment;
if (parentMesh != null)
{
// Make a new linked mesh and give it an image
AtlasRegion region = atlasAsset.GetAtlas().FindRegion(slot);
if (region == null && dressgroup != "Face")
{
region = atlasAsset.GetAtlas().FindRegion("_black");
}
if (region != null)
{
var newLinkedMesh = LinkedMeshUtilities.NewLinkedMeshAttachment("(New)"+ slot, region, parentMesh);
if (newLinkedMesh == null)
{
AtlasRegion region_black = atlasAsset.GetAtlas().FindRegion("_black");
newLinkedMesh = LinkedMeshUtilities.NewLinkedMeshAttachment("_black", region_black, parentMesh);
}
var slotIndexint = skeleton.FindSlotIndex(slot);
myDynamicSkin.AddAttachment(slotIndexint, slot, newLinkedMesh);
}
}
}
catch(Exception e)
{
Debug.LogWarning("Error:" + e);
}
}
skelAnim.skeleton.SetSkin(myDynamicSkin); // Set the skin.
skelAnim.skeleton.SetToSetupPose(); // Make sure to reset according to the skin
skelAnim.state.Apply(skelAnim.skeleton);
skelAnim.skeleton.UpdateWorldTransform(); // Update the skeleton world positions.
skelAnim.LateUpdate(); // Update the render to see the changes immediately.
NewLinkedMeshAttachment
static public MeshAttachment NewLinkedMeshAttachment(string attachmentName, AtlasRegion region, MeshAttachment parentMesh, bool inheritDeform = true)
{
if (string.IsNullOrEmpty(attachmentName)) return null;
if (region == null) return null;
if (parentMesh == null) return null;
// 1. NewMeshAttachment (AtlasAttachmentLoader.cs)
MeshAttachment mesh = new MeshAttachment(attachmentName);
SetRegion(mesh, region, false);
// 2. ReadAttachment. case: LinkedMesh (SkeletonJson.cs)
mesh.Path = attachmentName;
mesh.r = 1f;
mesh.g = 1f;
mesh.b = 1f;
mesh.a = 1f;
// Setting width and height is redundant when setting ParentMesh.
//mesh.Width = masterMesh.Width;
//mesh.Height = masterMesh.Height;
// 3. Link mesh with parent. (SkeletonJson.cs)
mesh.inheritDeform = inheritDeform;
mesh.ParentMesh = parentMesh;
mesh.UpdateUVs();
return mesh;
}