Spine2D动画系统添加骨骼动画事件帧

spine是基于骨骼的2D动画系统,相比较与模型动画各有利弊。在做项目时,有时候需要在spine特定骨骼出添加动画帧,类似于模型动画的Animation动画帧一样。

接下来就是 spine骨骼的2D动画添加动画帧事件方法教程。

1、需要让美术在需要添加关键帧的骨骼处添加事件的名字

2、在skeletonData Animation 物体下添加一个子集,并添加脚本BoneFollower,在BoneName中选择你步骤1中添加动画事件帧的骨骼名称。

3、完成前两步的准备工作,接下来直接上代码。新建脚本ParticleControl,代码如下:

 // 存储你需要在特定骨骼出生成物体的对象池列表
  public List<GameObject> GOpoolList = new List<GameObject>(); 
  // 对Spine类库进行引用  
  public List<SkeletonAnimation> skeletonAnimations = new List<SkeletonAnimation>();
  //存储skeletonData Animation 物体下子集的列表
  public List<GameObject> NumberofChildren = new List<GameObject>();
  public GameObject Strike;

    void Start()
    {
       skeletonAnimations.Add(this.GetComponent<SkeletonAnimation>());
       for (int i = 0; i < skeletonAnimations.Count; i++)
       {
           NumberofChildren.Add(skeletonAnimations[i].transform.GetChild(0).gameObject);
           skeletonAnimations[i].state.Event += AnimationEvents;
       }   
    }

    /// 
    /// 动画帧事件
    /// 
    /// 
    /// 
    void AnimationEvents(TrackEntry trackEntry, Spine.Event Myevent)
    {                                                                                                                                                               
        if (Myevent.Data.Name == "TX1") // 此处的“TX1”为之前说的特定骨骼动画帧事件名称
        {
            for (int i = 0; i < NumberofChildren.Count; i++)
            {
                LaserObjectPool(Strike, GOpoolList, NumberofChildren[i].transform.GetChild(0).transform.position);
            }
        }
    }

    /// 
    /// 生成特效的对象池
    /// 
    private void LaserObjectPool(GameObject _obj, List<GameObject> _list, Vector3 gameposition)
    {
        foreach (var item in _list)
        {
            if (item.activeSelf)
            {
                continue;
            }
            item.GetComponent<StateController>().ReturnBool();
            item.transform.position = gameposition;
            item.SetActive(true);
            return;
        }
        
        GameObject Str = Instantiate(_obj, gameposition, Quaternion.identity);
        _list.Add(Str);
        Str.GetComponent<StateController>().ReturnBool();
        Str.transform.position = gameposition;
    }

你可能感兴趣的:(Spine2D,动画)