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

回答編集履歴

5

ミス修正

2020/07/16 03:35

投稿

Y0241-N
Y0241-N

スコア1066

answer CHANGED
@@ -1,3 +1,5 @@
1
+ 【追記2020/7/16】以下の処理は「毎秒ごとのクリック数」をカウントする処理であり、質問者様の意図する「毎フレーム情報が更新される」という使用とは異なっています。申し訳ございません
2
+
1
3
  コルーチンとInvokeRepetingの組み合わせで計測可能です
2
4
 
3
5
  ざっとやっていることを説明すると、Unity Editor上ではFPSを固定するにはproject settingのQualityからOtherのVSync Countを「Don't Sync」と設定し、その後に`Application.targetFrameRate`で指定のFPSに変更する必要があります。Project settingを変更すると後々変更したことを忘れて手間取る場合があるので、`QualitySettings.vSyncCount = 0;`と記述することでScene再生時のみ設定を変更出来ます。

4

修正

2020/07/16 03:35

投稿

Y0241-N
Y0241-N

スコア1066

answer CHANGED
@@ -12,18 +12,19 @@
12
12
 
13
13
  public class ClickCountForSecond : MonoBehaviour
14
14
  {
15
+ int ClicksPerSecond;
15
- int ClickCounter;
16
+ int TotalClicksCount;
16
17
 
17
18
  void Start ()
18
19
  {
19
20
  QualitySettings.vSyncCount = 0; // vsyncをOFFにする
20
21
  Application.targetFrameRate = 30; // FPSを変更
21
- InvokeRepeating( "LoopCount",0f,1f);
22
+ InvokeRepeating( "LoopCount",0f,1f);//1秒ごとにコルーチンを呼び出す
22
23
  }
23
24
 
24
25
  void LoopCount()
25
26
  {
26
- StartCoroutine(loop(30));
27
+ StartCoroutine(loop(30));//30回 Whileを繰り返し、それを一回のコルーチンループとする
27
28
  }
28
29
 
29
30
  private IEnumerator loop(int frame)
@@ -32,12 +33,13 @@
32
33
      {
33
34
  yield return null;
34
35
  if(Input.GetMouseButtonDown(0))
35
- ClickCounter++;
36
+ ClicksPerSecond++;
36
37
 
37
38
  frame--;
38
39
  }
39
- Debug.Log(ClickCounter);
40
+ TotalClicksCount += ClicksPerSecond;
41
+ Debug.Log(ClicksPerSecond + "Click/s TotalClicks : " + TotalClicksCount);
40
- ClickCounter = 0;
42
+ ClicksPerSecond = 0;
41
43
  }
42
44
  }
43
45
  ```

3

修正

2020/07/16 01:00

投稿

Y0241-N
Y0241-N

スコア1066

answer CHANGED
@@ -1,20 +1,23 @@
1
- ん、試験を繰り返しているうちにどうも正確にクリック数がカウントきていない恐れがありま
1
+ コルーチンとInvokeRepetingの組合わせで計測可能で
2
2
 
3
- ~~コルーチンInvokeRepeting組みわせ計測可能です
4
- ざっとやっていることを説明すると`IEnumerator loop(int frame)`のframeが繰り返すフレームの長さなので今回で言えば30、30FPSの中でwhileでループさせ、カウントを取り、30FPS経った時にクリック数を表示、リセット。
5
- これを`InvokeRepeting`で0f開始、1fつまり1秒ごとに`IEnumerator loop(int frame)`を繰り返すことで毎秒のクリック数を集計可能です。~~
3
+ ざっやっていることを説明すると、Unity Editor上ではFPSを固定するにはproject settingQualityからOtherのVSync Countを「Don't Sync」と設定し、その後に`Application.targetFrameRate`で指定のFPSに変更する必要があります。Project settingを変更すると後々変更したことを忘れて手間取る場があるの、`QualitySettings.vSyncCount = 0;`と記述することScene再生時のみ設定を変更出来ま
6
4
 
5
+ `IEnumerator loop(int frame)`のframeが繰り返すフレームの長さなので今回で言えば30、30FPSの中でwhileでループさせ、カウントを取り、30FPS経った時にクリック数を表示、リセット。
6
+ これを`InvokeRepeting`で0f開始、1fつまり1秒ごとに`IEnumerator loop(int frame)`を繰り返すことで毎秒のクリック数を集計可能です。
7
+
7
8
  ```c#
8
9
  using System.Collections;
9
10
  using System.Collections.Generic;
10
11
  using UnityEngine;
11
12
 
12
- public class ClickCount : MonoBehaviour
13
+ public class ClickCountForSecond : MonoBehaviour
13
14
  {
14
15
  int ClickCounter;
15
16
 
16
17
  void Start ()
17
18
  {
19
+ QualitySettings.vSyncCount = 0; // vsyncをOFFにする
20
+ Application.targetFrameRate = 30; // FPSを変更
18
21
  InvokeRepeating( "LoopCount",0f,1f);
19
22
  }
20
23
 
@@ -28,7 +31,7 @@
28
31
  while (frame > 0)
29
32
      {
30
33
  yield return null;
31
- if(Input.GetMouseButton(0))
34
+ if(Input.GetMouseButtonDown(0))
32
35
  ClickCounter++;
33
36
 
34
37
  frame--;

2

ミス修正

2020/07/16 00:23

投稿

Y0241-N
Y0241-N

スコア1066

answer CHANGED
@@ -1,6 +1,8 @@
1
+ すみません、試験を繰り返しているうちにどうも正確にクリック数がカウントできていない恐れがあります。
2
+
1
- コルーチンとInvokeRepetingの組み合わせで計測可能です
3
+ ~~コルーチンとInvokeRepetingの組み合わせで計測可能です
2
4
  ざっとやっていることを説明すると`IEnumerator loop(int frame)`のframeが繰り返すフレームの長さなので今回で言えば30、30FPSの中でwhileでループさせ、カウントを取り、30FPS経った時にクリック数を表示、リセット。
3
- これを`InvokeRepeting`で0f開始、1fつまり1秒ごとに`IEnumerator loop(int frame)`を繰り返すことで毎秒のクリック数を集計可能です。
5
+ これを`InvokeRepeting`で0f開始、1fつまり1秒ごとに`IEnumerator loop(int frame)`を繰り返すことで毎秒のクリック数を集計可能です。~~
4
6
 
5
7
  ```c#
6
8
  using System.Collections;

1

修正

2020/07/15 08:13

投稿

Y0241-N
Y0241-N

スコア1066

answer CHANGED
@@ -10,6 +10,7 @@
10
10
  public class ClickCount : MonoBehaviour
11
11
  {
12
12
  int ClickCounter;
13
+
13
14
  void Start ()
14
15
  {
15
16
  InvokeRepeating( "LoopCount",0f,1f);
@@ -19,14 +20,15 @@
19
20
  {
20
21
  StartCoroutine(loop(30));
21
22
  }
23
+
22
24
  private IEnumerator loop(int frame)
23
25
  {
24
- while (frame > 0) {
26
+ while (frame > 0)
25
-
27
+     {
26
28
  yield return null;
27
29
  if(Input.GetMouseButton(0))
28
30
  ClickCounter++;
29
-
31
+
30
32
  frame--;
31
33
  }
32
34
  Debug.Log(ClickCounter);