質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1369閲覧

反射速度の平均を出すプログラムで悩んでいます。

ryotaro

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/12/05 00:18

編集2018/12/08 04:34

JankenManager

1 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class JankenManager : MonoBehaviour { 8 9 public GameManager gameManager; 10 11 public GameObject[] enemyObjects; 12 private int enemyHand; 13 14 private float hansyaTime; 15 private float recodeTime; 16 private float recode; 17 private static float ave=0.0; 18 19 public int countNumber; 20 21 public Text winloseText; 22 public Text resultText; 23 24 // Use this for initialization 25 void Start () { 26 PlayStart (); 27 } 28 29 // Update is called once per frame 30 void Update () { 31 32 } 33 34 void PlayStart(){ 35 winloseText.text = ""; 36 hansyaTime = 0.0f; 37 countNumber = 0; 38 hansyaTime += Time.deltaTime; 39 enemyHand = Random.Range (0, enemyObjects.Length); 40 foreach (GameObject obj in enemyObjects) { 41 obj.SetActive (false); 42 } 43 Invoke ("PlayObjects", 0.5f); 44 } 45 46 public static void PushButton(int playHand){ 47 CountUp (); 48 if ((playHand == 0 && enemyHand == 2) || 49 (playHand == 1 && enemyHand == 0) || 50 (playHand == 2 && enemyHand == 1)) { 51 winloseText.text = "成功"; 52 gameManager.ScoreUp (); 53 } else { 54 winloseText.text = "失敗"; 55 gameManager.ScoreErr (); 56 } 57 Invoke ("PlayStart", 1.0f); 58 recodeTime = hansyaTime; 59 recode += recodeTime; 60 ave = recode / countNumber; 61 resultText.text = "結果"+ave.ToString (); 62 } 63 64 void PlayObjects(){ 65 enemyObjects [enemyHand].SetActive (true); 66 } 67 68 void CountUp(){ 69 countNumber++; 70 } 71 72}

GameManager

1 2using UnityEngine.SceneManagement; 3 4public class GameManager : MonoBehaviour { 5 private float maxTime=60.0f; 6 int seconds; 7 public Text timerText; 8 9 public static int errorNumber; 10 public static int nowNumber; 11 public Text counterText; 12 13 private bool isNowGame; 14 15 void GameStart(){ 16 nowNumber = 0; 17 errorNumber = 0; 18 isNowGame = true; 19 } 20 21 22 // Use this for initialization 23 void Start () { 24 25 } 26 27 // Update is called once per frame 28 void Update () { 29 isNowGame = true; 30 maxTime -= Time.deltaTime; 31 seconds = (int)maxTime; 32 timerText.text = "制限時間 " + seconds.ToString (); 33 if (maxTime <= 0) { 34 isNowGame = false; 35 GameEnd (); 36 } 37 counterText.text = nowNumber.ToString () + "回成功"; 38 } 39 40 public static int getNowNumber(){ 41 return nowNumber; 42 } 43 44 public static int getErrNumber(){ 45 return errorNumber; 46 } 47 48 void GameEnd(){ 49 SceneManager.LoadScene ("ResultScene"); 50 } 51 52 public void ScoreUp(){ 53 nowNumber++; 54 counterText.text = nowNumber.ToString (); 55 } 56 57 public void ScoreErr(){ 58 errorNumber++; 59 } 60 }

Unityを使用してゲームを作っているのですが、画像が表示されてボタンを押すまでの時間の平均時間を出したいと思っています。ゲームの内容としましては、制限時間(仮に60秒)の中で画像が表示されたらボタンを押すという作業を繰り返し、その画像が表示されてボタンを押すまでの時間の平均時間を出したいと思っています。
JankenManagerのコードの方に新しくタイマーを設けようとしたのですがエラーが出てしまいました。
PlayStart()が呼び出されるときに再度0秒の状態で始めたいのでhansyaTime=0にしています。
ですがPushButton()の最後の4行のところでエラーが出てしまいます。
アドバイスの程よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torisan

2018/12/12 07:59

C#は良く解らないのですが、関数の呼び出し方は Invoke で合っているのでしょうか。
ryotaro

2018/12/17 13:26

Invokeは画像を表示するメソッドをそのまま呼び出すと切り替わりがわかりずらかったのでInvokeを使ってちょっとずらしてメソッドを呼び出すようにしてます。
guest

回答1

0

ベストアンサー

・画像を表示するときに現在時間を保存
・ボタンが押されたときに時間を取得し、差分を出し、保存

という処理になろうかと思いますが、なにがわからないんでしょうか

投稿2018/12/05 00:27

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryotaro

2018/12/05 01:51

雑な質問になってしまっていてすみません。 差分を出して保存するときに、1回目の結果が保存された後に2回目の結果が保存されるときは同じところに保存しても上書きされることはないのでしょうか? 配列を使って結果を保存する箱をいくつか用意しないといけないのでしょうか?
y_waiwai

2018/12/05 02:23

平均を出したいと言うなら、差分を全部保存する必要はないです。 差分の積算と、積算数だけを持つようにしましょう
ryotaro

2018/12/08 04:40

今作っている最中のコードを貼らせて頂きました。 貼らせていただいたのは最初に大元のタイマーとは別にもう一つタイマーを用意して作ってみたときのものです。 解答を頂いた後にいろいろ試してみたのですが最初の時間の保存の仕方が分かりませんでした。 調べてみたのですが一度delta.Timeは使ってしまっているので二度目は使わない方がいいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問