自用-动画管理

用animation管理子动画

通过OnEnable来控制动画的开启,播放。简单的TEST,根据自己需求来完善

//子脚本

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class TestDoAnimator : MonoBehaviour {
    //父级控制脚本
    public TestAnimationScript tda;
    //父级控制的动画
    public Animation ani;
    //动画市场
    public float animfloat;
    //是否执行过start播放
    bool isStart = false;
    //控制子动画是否播放
    public bool isShow = true;
    // Use this for initialization
    void Start () {
        ani = this.GetComponent<Animation>();
        AnimationClip aniClip = ani.clip;
        //获取子动画时长
        AnimationEvent ae = new AnimationEvent();
        ae.time = aniClip.length;
        //增加子动画结束回调
        ae.functionName = "Stoped";
        aniClip.AddEvent(ae);
        isStart = true;
    }
    
    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.X))
        {
            PlayAnimation();
        }
    }
    //播放
    public void PlayAnimation()
    {
        ani.Play();
    }
    //结束回调
    public void Stoped()
    {
        Debug.Log(this.gameObject.name + " == Stoped!");
    }
    //控制脚本开关来控制播放
    void OnEnable()
    {
        if (isStart && isShow)
        {
            ani.Play();
            //判断此子动画的时长从播放到结束是否大于其他所有动画的时长
            tda.JudgeTime(ani.clip.length);
        }
    }
}

//父脚本

using UnityEngine;
using System.Collections;

public class TestAnimationScript : MonoBehaviour {
    //父级脚本
    //控制动画时长
    float animTime = 0;
    //停止时间
    float stopTime = 0;
    //是否开始播放动画
    public bool isStart = false;
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.Z))
        {
            PlayAnimation();
            isStart = true;
        }
        //判断播放时长是否大于最大动画时长
        if (isStart)
        {
            if (stopTime > animTime)
            {
                isStart = false;
                stopTime = 0;
                animTime = 0;
                AllStoped();
            }
            else
            {
                stopTime += Time.deltaTime;
            }
        }
    }

    void AllStoped()
    {
        //所有动画播放完毕回调,动画播放完毕后开始正式执行逻辑
    }

    void PlayAnimation()
    {
        this.transform.GetComponent<Animation>().Play();
        animTime = this.transform.GetComponent<Animation>().clip.length + 0.1f;
    }
    //判断子动画时间是否大于整个动画时长
    public void JudgeTime(float time)
    {
        //大于则刷新
        if (stopTime + time > animTime)
        {
            animTime = stopTime + time;
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值