Unity3D 多个动画相机循环播放

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


public class Multi_AnimationPlay : MonoBehaviour
{
    /// <summary>
    /// 动画相机
    /// </summary>
    public Camera[] cameras;
    /// <summary>
    /// 相机上 的动画
    /// </summary>
    [HideInInspector]
    public Animation[] ani_Cameras;
    /// <summary>
    /// 获取每一个动画的时长
    /// </summary>
    [HideInInspector]
    public float[] time_AnimationClips;
    /// <summary>
    /// 当前播放的动画
    /// </summary>
    [HideInInspector]
    public int currentAni = 0;
    /// <summary>
    /// 上一个播放的动画
    /// </summary>
    [HideInInspector]
    public int lastAni = 0;
    private bool aniIsPlaying = false;


    void Awake()
    {
        InitDatas();
    }
    void FixedUpdate()
    {
        if (aniIsPlaying)
        {
            if (!ani_Cameras[currentAni].isPlaying)
            {
                aniIsPlaying = false;
                int index = currentAni + 1;
                NextPlay(index);
            }
        }
    }


    private void NextPlay(int index)
    {
        if (index >= cameras.Length)
        {
            index = 0;
        }


        aniIsPlaying = true;


        lastAni = currentAni;
        currentAni = index;


        cameras[lastAni].enabled = false;
        ani_Cameras[lastAni].Stop();


        cameras[currentAni].enabled = true;
        ani_Cameras[currentAni].Play();
    }


    void InitDatas()
    {
        if (cameras.Length > 0)
        {
            ani_Cameras = new Animation[cameras.Length];


            for (int i = 0; i < cameras.Length; i++)
            {
                ani_Cameras[i] = cameras[i].GetComponent<Animation>();
            }


            time_AnimationClips = new float[ani_Cameras.Length];


            for (int j = 0; j < ani_Cameras.Length; j++)
            {
                time_AnimationClips[j] = ani_Cameras[j].clip.length;
            }


            for (int m = 0; m < cameras.Length; m++)
            {
                cameras[m].enabled = false;
            }
        }


        aniIsPlaying = false;
        lastAni = currentAni = 0;
    }


    public void Play()
    {
        aniIsPlaying = true;
        lastAni = currentAni = 0;
        cameras[currentAni].enabled = true;
        ani_Cameras[currentAni].Play();
    }


    public void Stop()
    {
        aniIsPlaying = false;
        cameras[currentAni].enabled = false;
        ani_Cameras[currentAni].Stop();
        lastAni = currentAni = 0;
    }


}

猜你喜欢

转载自blog.csdn.net/yuyingwin/article/details/80226922