Unity3D学习 愤怒的小鸟之小鸟动画(八)

2015年03月21日 15:41 0 点赞 0 评论 更新于 2017-05-09 19:00

目标

完成小鸟在地面上眨眼睛的动画。

实现步骤

1. 创建并设置Plane

首先,新建一个Plane用于制作小鸟动画。将包含3帧小鸟动画的图片贴到该Plane上,然后对Plane的Transform属性进行设置。

为了让这个Plane仅显示一个小鸟,需要将Tiling的x值修改为0.33。这是因为图片包含3帧小鸟动画,将x值设为0.33(即1/3)可以确保每次只显示其中一帧。

2. 编写脚本实现小鸟序列帧动画

以下是实现小鸟序列帧动画的脚本代码:

#pragma strict

// 定义变量
var rowCount : int = 1;  // 行数,这里为1
var colCount : int = 3;  // 列数,因为有3帧动画,所以为3
var fps : int = 2;       // 帧率,每秒播放的帧数
var isLoop : boolean = true;  // 是否循环播放动画

// 私有变量
private var curTime : float = 0.0f;  // 当前时间
private var lastTime : float = 0.0f; // 上一帧的时间
private var curRow : int = 0;        // 当前行
private var curCol : int = 0;        // 当前列
private var isEnd : boolean = false; // 动画是否结束

// 初始化函数
function Start () {
// 设置纹理缩放
renderer.material.SetTextureScale("_MainTex", new Vector2(1.0 / colCount, 1.0 / rowCount));
// 设置纹理偏移
renderer.material.SetTextureOffset("_MainTex", new Vector2(0, 0));
}

// 更新函数,每帧调用
function Update () {
// 如果动画结束,直接返回
if (isEnd) {
return;
}

// 判断是否达到切换帧的时间
if (curTime >= lastTime + 1.0f / fps) {
curCol++;
// 如果列数超出范围
if (curCol >= colCount) {
curCol = 0;
curRow++;
// 如果行数超出范围
if (curRow >= rowCount) {
if (!isLoop) {
isEnd = true;
return;
}
curRow = 0;
}
}
// 更新纹理偏移
renderer.material.SetTextureOffset("_MainTex", new Vector2(curCol * 1.0 / colCount, curRow * 1.0 / rowCount));
lastTime = curTime;
} else {
curTime += Time.deltaTime;
}
}

代码解释

  • 变量定义
  • rowCountcolCount 分别表示动画图片的行数和列数。
  • fps 控制动画的播放速度,即每秒播放的帧数。
  • isLoop 决定动画是否循环播放。
  • 私有变量用于记录当前的时间、行、列以及动画是否结束的状态。

  • Start函数

  • SetTextureScale 方法用于设置纹理的缩放比例,确保每次只显示一帧动画。
  • SetTextureOffset 方法用于设置纹理的偏移量,初始时将偏移量设为(0, 0)。

  • Update函数

  • 首先检查动画是否结束,如果结束则直接返回。
  • 然后判断是否达到切换帧的时间,如果达到则更新当前列和行,并根据情况判断是否需要循环。
  • 最后更新纹理的偏移量,实现动画的切换。

通过以上步骤,就可以实现小鸟在地面上眨眼睛的动画效果。

作者信息

menghao

menghao

共发布了 332 篇文章