teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コードの追加

2021/02/28 03:02

投稿

BRAK
BRAK

スコア98

answer CHANGED
@@ -15,11 +15,11 @@
15
15
  /// <summary>
16
16
  /// アニメーション再生のフレームレートを定義します
17
17
  /// </summary>
18
- const float frameRate = 0.012f;
18
+ float frameRate = 0.012f;
19
19
  /// <summary>
20
20
  /// アニメーションフレーム数の終わり
21
21
  /// </summary>
22
- float endFrame = 1.333f;
22
+ const float endFrame = 1.0f;
23
23
 
24
24
  /// <summary>
25
25
  /// タイムスケールが0の時にアニメーションの再生をします
@@ -28,17 +28,23 @@
28
28
  {
29
29
  //このアニメーションの全てのフレームを再生し終わったら
30
30
  //アニメーションを終了します
31
- if(frame >= endFrame) return;
31
+ if (frame > endFrame) return;
32
32
 
33
33
  //時間を計測します
34
34
  time += Time.unscaledDeltaTime;
35
35
 
36
- //frameRate秒を超えた処理をします
36
+ //timeがframeRate未満なします
37
- if (time > frameRate) return;
37
+ if (time < frameRate) return;
38
38
 
39
39
  //指定のフレーム数を上げます
40
40
  frame += 0.01f;
41
41
 
42
+ if (frame >= endFrame)
43
+ {
44
+ anim.speed = 0;
45
+ return;
46
+ }
47
+
42
48
  //フレーム位置でアニメーションの再生を行います
43
49
  anim.Play("arrow", -1, frame);
44
50
 
@@ -49,4 +55,4 @@
49
55
 
50
56
  秒数でフレーム数を上げていくと表示する画像が飛ぶのでカウント形式で処理を行っています。
51
57
 
52
- frameRateとendFrameは再生するアニメーションから取得する必要があると思います。
58
+ frameRateは再生するアニメーションから取得する必要があると思います。

2

コードの追加

2021/02/28 03:02

投稿

BRAK
BRAK

スコア98

answer CHANGED
@@ -28,7 +28,7 @@
28
28
  {
29
29
  //このアニメーションの全てのフレームを再生し終わったら
30
30
  //アニメーションを終了します
31
- if(frame >= endFrame)
31
+ if(frame >= endFrame) return;
32
32
 
33
33
  //時間を計測します
34
34
  time += Time.unscaledDeltaTime;

1

コードの追加

2021/02/28 02:28

投稿

BRAK
BRAK

スコア98

answer CHANGED
@@ -1,3 +1,52 @@
1
1
  一日考えましたが、まずTime.Scaleでアニメーションを再生することは非常に相性が良くないと考えます。
2
2
 
3
- 回答は後日に貼ります。少々お待ちください。
3
+ 回答は後日に貼ります。少々お待ちください。
4
+
5
+ ```C#
6
+ コード
7
+ /// <summary>
8
+ /// 再生時間を計測します
9
+ /// </summary>
10
+ float time = 0;
11
+ /// <summary>
12
+ /// フレーム数を記録
13
+ /// </summary>
14
+ float frame = 0.0f;
15
+ /// <summary>
16
+ /// アニメーション再生のフレームレートを定義します
17
+ /// </summary>
18
+ const float frameRate = 0.012f;
19
+ /// <summary>
20
+ /// アニメーションフレーム数の終わり
21
+ /// </summary>
22
+ float endFrame = 1.333f;
23
+
24
+ /// <summary>
25
+ /// タイムスケールが0の時にアニメーションの再生をします
26
+ /// </summary>
27
+ void UnScaleAnim()
28
+ {
29
+ //このアニメーションの全てのフレームを再生し終わったら
30
+ //アニメーションを終了します
31
+ if(frame >= endFrame)
32
+
33
+ //時間を計測します
34
+ time += Time.unscaledDeltaTime;
35
+
36
+ //frameRate秒を超えたら処理をします
37
+ if (time > frameRate) return;
38
+
39
+ //指定のフレーム数を上げます
40
+ frame += 0.01f;
41
+
42
+ //フレーム位置でアニメーションの再生を行います
43
+ anim.Play("arrow", -1, frame);
44
+
45
+ //計測時間を0にします
46
+ time = 0;
47
+ }
48
+ ```
49
+
50
+ 秒数でフレーム数を上げていくと表示する画像が飛ぶのでカウント形式で処理を行っています。
51
+
52
+ frameRateとendFrameは再生するアニメーションから取得する必要があると思います。