1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
using
UnityEngine;
using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine.UI;
using
System;
[RequireComponent(
typeof
(Image))]
public
class
UGUISpriteAnimation : MonoBehaviour
{
private
Image ImageSource;
private
int
mCurFrame = 0;
private
float
mDelta = 0;
public
float
FPS = 5;
public
List<Sprite> SpriteFrames;
public
bool
IsPlaying =
false
;
public
bool
Foward =
true
;
public
bool
AutoPlay =
false
;
public
bool
Loop =
false
;
public
int
FrameCount
{
get
{
return
SpriteFrames.Count;
}
}
void
Awake()
{
ImageSource = GetComponent<Image>();
}
void
Start()
{
if
(AutoPlay)
{
Play();
}
else
{
IsPlaying =
false
;
}
}
private
void
SetSprite(
int
idx)
{
ImageSource.sprite = SpriteFrames[idx];
ImageSource.SetNativeSize();
}
public
void
Play()
{
IsPlaying =
true
;
Foward =
true
;
}
public
void
PlayReverse()
{
IsPlaying =
true
;
Foward =
false
;
}
void
Update()
{
if
(!IsPlaying || 0 == FrameCount)
{
return
;
}
mDelta += Time.deltaTime;
if
(mDelta > 1 / FPS)
{
mDelta = 0;
if
(Foward)
{
mCurFrame++;
}
else
{
mCurFrame--;
}
if
(mCurFrame >= FrameCount)
{
if
(Loop)
{
mCurFrame = 0;
}
else
{
IsPlaying =
false
;
return
;
}
}
else
if
(mCurFrame<0)
{
if
(Loop)
{
mCurFrame = FrameCount-1;
}
else
{
IsPlaying =
false
;
return
;
}
}
SetSprite(mCurFrame);
}
}
public
void
Pause()
{
IsPlaying =
false
;
}
public
void
Resume()
{
if
(!IsPlaying)
{
IsPlaying =
true
;
}
}
public
void
Stop()
{
mCurFrame = 0;
SetSprite(mCurFrame);
IsPlaying =
false
;
}
public
void
Rewind()
{
mCurFrame = 0;
SetSprite(mCurFrame);
Play();
}
}
|
UGUI序列帧动画
最新推荐文章于 2021-11-30 14:17:28 发布