帧动画显示
1、一张图片上有若干帧组成动画
通过修改其材质下的偏移量。比如Flappy Bird的例子,一幅图片中有三帧不同的动画
public int frameIndex = 0; //帧数
public int frameRate = 10; //拍打频率
public float timer;
timer += Time.deltaTime;
if (timer >= 1.0f / frameRate) {
timer -= 1.0f / frameRate;
frameIndex++;
frameIndex %= 3;
this.GetComponent<Renderer>().material.SetTextureOffset("_MainTex",new Vector2(0.333333f*frameIndex,0));
}
offset:显示框的偏移量
Tiling:显示框的所放量
2、若干张图片组成帧动画
1) 比如飞机大战中的两张图片组成飞机在飞行的动画,然后初始化数组,就是直接拖进去即可。
public float frameCount = 10; //每秒10帧
public float time = 0;
public Sprite[] sprites;
void Update()
{
time += Time.deltaTime;
int frameIndex = time/(1.0f/frameCount); //转化成int类型
int frame = frameIndex%2;
this.GetComponent<SpriteRenderer>().sprite = sprites[frame];
}
2)合金弹头(很多张)
public float frameRate = 10; //每秒10帧图片
public float timeInterval = 0; //时间间隔,就是每轮动画完毕之后,循环下次的时间间隔
public int time = 0;
public Sprite[] sprites;
public int frameIndex = 0;
private int length = 0; //也就是图片的数量
void start()
{
timeInterval = 1.0f/frameRate; // 得到每一帧的时间间隔
length = sprites.length;
}
void Update()
{
time += Time.deltaTime;
if(time > timeInterval) //播放下一帧
{
time -= timeInterval; //让计时器减去一个周期的时间
frameIndex++; //播放下一帧
frameIndex %= length; //判断是否到达最大帧数
this.GetComponent<SpriteRenderer>().sprite = sprites[frameIndex];
}
}
单例模式的使用
单例模式是一种设计模式,即保证系统中只有一个类的实例,且该实例易于外界访问,从而方便对对象的访问,可以控制资源使用,个人理解类似于大家在一块黑板上讨论东西,不关心参与讨论的对象,单例就相当于黑板。
游戏中我一般在一个场景中设置一个GameController类为单例模式,其中提供若干辅助操作对象的方法,如控制参数设置,提供计算方法等,也会设置一个单例的声音管理器专门管理声音的统一播放。Unity中我这样设置单例。
public class GameManager : MonoBehaviour
{
private static GameManager _instance;
public static GameManager Instance //此段有时省略
{
get { return _instance; }
}
void Awake()
{
_instance = this; //使自身可被调用
}
}