首页 > 其他 > 详细

Unity3D笔记 愤怒的小鸟<五> 小鸟动画

时间:2014-02-17 07:20:54      阅读:373      评论:0      收藏:0      [点我收藏+]

 bubuko.com,布布扣

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样式中设置图片一样。

bubuko.com,布布扣

Unity3D笔记 愤怒的小鸟<五> 小鸟动画

原文:http://www.cnblogs.com/PEPE/p/3551615.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!