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

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

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

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

Q&A

解決済

2回答

2196閲覧

ゲームクリア時プレイに要した時間を表示する処理

marine08

総合スコア14

C#

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

0グッド

1クリップ

投稿2020/07/07 13:45

編集2020/07/09 12:18

*やりたい事
unity2Dシューティングゲームにて、ゲームをクリアした時だけに、プレイに要した時間を表示させたい。このために、二つのスクリプトを作りました。
①TimerScript:時間の計測はゲームスタート時START、ゲームクリア時にSTOPさせたい
②GameController:ヒエラルキー上のUICanvasに配置したTimerを表示・非表示等管理

*できていること
*再生ボタンを押し、ゲームクリアをするとTimerは表示され、Timerも動く。

問題点とやりたいこと

TimerTextが表示された時からカウントが始まってしまうので、カウントはゲームスタート時から始まり、ゲームクリア時にカウントストップさせたい。

unity

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class Timer : MonoBehaviour 8{ 9 using System.Collections; 10using System.Collections.Generic; 11using UnityEngine; 12using UnityEngine.UI; 13using UnityEngine.SceneManagement; 14using System; 15 16public class Timer : MonoBehaviour 17{ 18 private int minute; 19 private float seconds; 20 private float beforeSeconds; 21 private Text timerText; 22 public void Start() 23 { 24 minute = 0; 25 seconds = 0f; 26 beforeSeconds = 0f; 27 timerText = GetComponentInChildren<Text>(); 28 DateTime now = DateTime.Now; 29 } 30 31 public void Update() 32 { 33 34 seconds += Time.deltaTime; 35 if (seconds >= 60f) 36 { 37 minute++; 38 seconds = seconds - 60; 39 40 } 41 // 値が変わった時テキストを更新 42 if ((int)seconds != (int)beforeSeconds) 43 { 44 timerText.text = minute.ToString("00") + ":" + ((int)seconds).ToString("00"); 45 } 46 beforeSeconds = seconds; 47 } 48 49 50} 51
public class GameController : MonoBehaviour using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class GameController : MonoBehaviour { public Timer timer; public GameObject TitleText; public GameObject gameOverText; public Text scoreText; public GameObject Timer; public GameObject GameCrearStageNextText; public int score = 0; // ステージ数のテキスト public Text stageNumberText;   public GameObject stageNextButton; public GameObject retryButton; public GameObject Playership1; public GameObject shootingenemy1Prefab; public GameObject advancedEnemy1Prefab; public GameObject Enemy3rdPrefab; public void Start() //ゲームオーバーテキストは消えてる・スコアテキストの表示・ハイドボタン(stagenextbuttonは消す・リトライ消す) { gameOverText.SetActive(false); stageNextButton.SetActive(false); retryButton.SetActive(false); GameCrearStageNextText.SetActive(false); //timer = GameObject.Find("Timer").GetComponent<Timer>(); timer.Start(); timer.Update(); Timer.SetActive(false); scoreText.text = "SCORE:" + score; } public void AddScore()  //Scoreを100ずつ増やす { score += 100; scoreText.text = "SCORE:" + score; if (score == 100) { stageNextButton.SetActive(true); GameCrearStageNextText.SetActive(true); Timer.SetActive(true); Destroy(Playership1); Destroy(shootingenemy1Prefab); Destroy(advancedEnemy1Prefab); Destroy(Enemy3rdPrefab); } } public void GameOver()  //GameOver文字を表示・リトライボタンを出す { gameOverText.SetActive(true); retryButton.SetActive(true); } public void RetryScene()   //Mainシーンをロード { SceneManager.LoadScene("first"); } public void FirstToSecondButton() { SceneManager.LoadScene("Second"); } public void SecondToThirdButton() { SceneManager.LoadScene("Third"); } public void ThirdTo4ThButton() { SceneManager.LoadScene("4th"); } }

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

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

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

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

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

sakura_hana

2020/07/08 00:10

「うまくいきません」とはどういうことですか? 以下を参照して質問文を編集してください。(コードは<code>ボタンを使用してください) https://teratail.com/help/question-tips
marine08

2020/07/08 13:03

ご指摘通りです>< 編集いたしました。ありがとうございます!
guest

回答2

0

自己解決

https://www.sejuku.net/blog/55029

このサイトを参照し、タイマースタート・ストップが完成しました。

投稿2020/07/11 13:59

marine08

総合スコア14

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

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

0

Start()はゲーム開始時(正確にはスクリプトの開始時)にしか実行されません。
Update()に入れて毎フレーム呼びましょう。

C#

1 public void Start() 2 { 3 ResetTimer(); 4 } 5  public void Update() 6 { 7 8 if (isCountUp) 9 { 10 //時間をカウントする 11 countup += Time.deltaTime; 12 //時間を表示する 13 timeText.text = countup.ToString("f1") + "秒"; 14 } 15 }

投稿2020/07/09 00:12

sakura_hana

総合スコア11425

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

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

marine08

2020/07/09 12:19

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問