using UnityEngine; using System.Collections; /// <summary> /// 2D动画组件 /// </summary> public class aniSprite : MonoBehaviour { /// <summary> /// 是否启动2D动画 /// </summary> public bool isUsed = false; /// <summary> /// 动画的时间(0表示永远运行) /// </summary> public float timeLength = 0; /// <summary> /// 动画有多少列(动画多个图片) /// </summary> public int columnSize; /// <summary> /// 动画有多少行 /// </summary> public int rowSize; /// <summary> /// 起始帧从那列开始 /// </summary> public int colFrameStart; /// <summary> /// 起始帧从那行开始 /// </summary> public int rowFrameStart; /// <summary> /// 总共多少帧 /// </summary> public int totalFrames = 1; /// <summary> /// 每秒运行多少帧动画 /// </summary> public int framePerSecond; /// <summary> /// 总共运行多长时间 /// </summary> public int totalTime; /// <summary> /// 设置运行多长时间 /// </summary> private float myTime = 0; private float myTimeLength = 0; /// <summary> /// 是否运行 /// </summary> private bool isPlay = true; /// <summary> /// 2D /// </summary> private Vector2 size; /// <summary> /// 2D 设置 /// </summary> private Vector2 offSet; private int u; // Use this for initialization void Start() { } // Update is called once per frame void Update() { if (isUsed) { AniSprit(columnSize, rowSize, colFrameStart, rowFrameStart, totalFrames, framePerSecond, totalTime, true); } myTimeLength += Time.deltaTime; if (timeLength != 0 && myTimeLength > timeLength) { Destroy(gameObject); } } /// <summary> /// 动画组件(坦克游戏) /// </summary> /// <param name="columnSize">动画有多少列</param> /// <param name="rowSize">动画有多少行</param> /// <param name="colFrameStart">起始帧从那列开始</param> /// <param name="rowFrameStart">起始帧从那行开始</param> /// <param name="totalFrames">总共多少帧</param> /// <param name="framePerSecond">每秒运行多少帧动画</param> /// <param name="totalTime">总共运行多长时间</param> /// <param name="moveDirection">运动方向</param> /// <returns></returns> bool AniSprit(int columnSize, int rowSize, int colFrameStart, int rowFrameStart, int totalFrames, int framePerSecond, int totalTime, bool moveDirection) { myTime += Time.deltaTime;//累积时间 if (totalTime != 0 && myTime > totalTime)//游戏停止运行 { isPlay = false; myTime = 0;//重新计时 return isPlay; } int index = (int)(myTime * (framePerSecond - 1));//-1:去掉一个缩影 index = index % totalFrames; int v = index / columnSize; if (moveDirection) { size = new Vector2(1 / columnSize, 1 / rowSize); u = index % columnSize; } else { size = new Vector2(-1 / columnSize, 1 / rowSize); u = -index % columnSize; } offSet = new Vector2((u + colFrameStart) * size.x, (1 - size.y) - (v + rowFrameStart) * size.y); renderer.material.mainTextureOffset = offSet; renderer.material.mainTextureScale = size; return true; } }
注意小鸟图片显示时设置好Tiling为1/3=0.33 否则会显示3只鸟,这个也和css样式中设置图片一样。
原文:http://www.cnblogs.com/PEPE/p/3551615.html