Spine是目前用的比較廣泛的2D骨骼動畫插件,在unity中的使用也是比較多的,現在的項目有需要做一個外部資源來換裝的換裝系統,下面是根據官方的例子實現的一種方案
using System.Collections;
using System.Collections.Generic;
using Spine;
using Spine.Unity;
using Spine.Unity.Modules.AttachmentTools;
using UnityEngine;
public class Princess : MonoBehaviour
{
/// <summary>
/// 替換用的臉
/// </summary>
[SerializeField] SpineAtlasAsset []faces = null;
void Start()
{
}
/// <summary>
/// 換臉
/// </summary>
void ChangeFace(int value)
{
//獲取SkeletonRenderer組件
var skeletonRenderer = GetComponent<SkeletonRenderer>();
//獲取選中的臉的Atlas
var atlas = faces[value].GetAtlas();
//獲取現在的scale
float scale = skeletonRenderer.skeletonDataAsset.scale;
//獲取要修改的插槽
Slot slot = skeletonRenderer.Skeleton.FindSlot("face");
//來源的Attachment
Attachment originalAttachment = slot.Attachment;
//獲取來源的region
AtlasRegion region = atlas.FindRegion("face");
//繼承的屬性
bool inheritProperties = true;
//如果準備的素材都不爲null
if (region == null)
{
slot.Attachment = null;
Debug.Log("獲取不到想要的插槽");
}
else if (inheritProperties && originalAttachment != null)
{
//克隆一個 附件 來賦值給 源插槽的附件
slot.Attachment = originalAttachment.GetRemappedClone(region, true, true, scale);
}
else
{
//克隆一個 附件 來賦值給 源插槽的附件
var newRegionAttachment = region.ToRegionAttachment(region.name, scale);
slot.Attachment = newRegionAttachment;
}
}
}