Unity Spine 換裝方案

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;
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章