Unity 2D游戏:代码控制精灵图片切换做出帧动画效果

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

[DisallowMultipleComponent]//只允许添加一次
[RequireComponent(typeof(SpriteRenderer))]//要求有精灵渲染器组件
public class SpriteAnimation : MonoBehaviour
{

    private SpriteRenderer mRender;  //动画精灵的渲染器
    public Sprite[] ActionArray;    //动作精灵图组

    public int NowFrameIndex = 0;  //当前播放帧的序号

    private float AnimTimer = 0; //动画的记时器 
    public float AnimSpeed = 6.0f; //1秒播放几帧图片
    private float AnimTimeInterval = 0; //每一帧的间隔

    void Awake()
    {
        mRender = GetComponent();//获取当前物体精灵渲染器组件
        AnimTimeInterval = 1 / AnimSpeed;//每秒时间间隔=1/每秒播放几帧图片

        if (ActionArray.Length > 0)//保护:如果精灵图组的长度大于0,即数组中包含个数大于0的元素
        {
            if (NowFrameIndex < 0)//如果当前播放帧的序号小于0
                NowFrameIndex = 0;//设置当前播放帧的序号等于0
            if (NowFrameIndex >= ActionArray.Length)//如果当前播放帧的序号大于等于图组长度
                NowFrameIndex = ActionArray.Length - 1;//设置当前播放帧的序号等于图组长度-1
            mRender.sprite = ActionArray[NowFrameIndex];//设置当前播放到的精灵(默认为0)
        }
    }

    void Update()
    {
        if (ActionArray.Length <= 0)//当动作精灵图组长度小于等于0,即无精灵元素
            return;//返回,无操作

        AnimTimer += Time.deltaTime;//开始计时
        if (AnimTimer >= AnimTimeInterval)//一个精灵播放的时间已到
        {
            AnimTimer -= AnimTimeInterval;//恢复

            NowFrameIndex++; //播帧

            NowFrameIndex %= ActionArray.Length;  //播放完一遍动画,返回从第1帧再次播放

            //if (NowFrameIndex >= ActionArray.Length)
            //    NowFrameIndex = 0;

            mRender.sprite = ActionArray[NowFrameIndex];//切换精灵
        }
    }
}

 

你可能感兴趣的:(Unity)