【Unity3d】简单的UGUI序列帧播放
程序员文章站
2022-03-25 21:25:26
...
UGUI的Image配合Animation可以很方便的实现序列帧播放的功能。我们也能自己写一个播放脚本来控制序列帧的播放,这样就可以方便地在特定帧数插入一些事件。
设计一个SpriteAnimatior脚本:
public class SpriteAnimator : MonoBehaviour
{
public bool playAwake;
public Sprite[] frames;
public float speed = 0.05f;
public int actionFrame = -1f;
public UnityEvent frameEvent;
private Image container;
private int ticked;
private float time;
private bool doAnim;
private void Awake()
{
container= GetComponent<Image>();
Init();
}
private void Init()
{
ticked = 0;
time = 0;
doAnim = playAwake;
container.sprite = frames[0];
}
public void Play()
{
ticked = 0;
time = 0;
doAnim = true;
container.sprite = frames[0];
}
public void Pause()
{
doAnim = false;
}
public void Resume()
{
doAnim = true;
}
public void Stop()
{
ticked = 0;
time = 0;
doAnim = false;
container.sprite = frames[0];
}
void Update()
{
if (doAnim)
{
time += Time.deltaTime;
if (time > speed)
{
ticked++;
if (ticked == frames.Length)
ticked = 0;
else
time = 0;
if(ticked == actionFrame)
frameEvent.Invoke();
container.sprite = frames[ticked];
}
}
}
}
将脚本挂载到物体上:
- playAwake:自动播放
- frames:序列帧,如果有很多帧数可以从resources或者其他地方加载
- speed:播放速度
- actionFrame:执行事件的帧数,也可以做一个数组执行多个事件
- frameEvent:特定帧数执行的事件,如果需要有多个事件可以与actionFrame一同设计一个class或者struct
调用play方法即可播放。如果有循环与否或者其他需求,只需在执行到特定帧数的时候添加一个判断即可。
by:蒋志杰