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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

2回答

7029閲覧

【Unity】条件後にTime.deltaTimeを止めたい

tessyman

総合スコア8

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

1クリップ

投稿2020/06/08 02:07

編集2020/06/08 02:11

前提・実現したいこと

●前提・問題
Unityで30秒以内に1体の敵を倒すゲームを作成しています。
EnemyHealth.csで敵のHPが0になった際に敵を破壊しゲームクリアという条件です。
TimeDirector.cs内で30秒をすぎるとゲームオーバー画面に遷移するようにしています。
しかし敵を倒してもタイマーが止まらないためゲームオーバー画面に遷移してしまいます。

●実装したいこと
敵のHPがなくなった際にゲームクリアにしたいので
if (enemyHP == 0)の時に
Time.deltaTimeの時間処理を止めたいです。

該当のソースコード

●タイマーの設定

cs

1using UnityEngine.UI; 2using UnityEngine.SceneManagement; 3 4public class TimeDirector : MonoBehaviour 5{ 6 GameObject timerText; 7 float time = 30.0f; 8 9 void Start() 10 { 11 this.timerText = GameObject.Find("Time"); 12 } 13 14 void Update() 15 { 16 this.time -= Time.deltaTime; 17 this.timerText.GetComponent<Text>().text = 18 "地球滅亡まであと" + this.time.ToString("F1") + "秒"; 19 20 if (this.time <= 0) 21 { 22 SceneManager.LoadScene("GameOverScene"); 23 } 24 } 25}

●敵のHP操作と敵の破壊

cs

1using UnityEngine; 2using UnityEngine.UI; 3 4public class EnemyHealth : MonoBehaviour 5{ 6 public GameObject particleObject; 7 public GameObject effectPrefab; 8 public int enemyHP; 9 private Slider slider; 10 11 private void Start() 12 { 13 slider = GameObject.Find("EnemyHPSlider").GetComponent<Slider>(); 14 slider.maxValue = enemyHP; 15 slider.value = enemyHP; 16 } 17 18 private void OnTriggerEnter(Collider other) 19 { 20 if (other.gameObject.CompareTag("Bullet")) 21 { 22 enemyHP -= 1; 23 slider.value = enemyHP; 24 Destroy(other.gameObject); 25 26 if (enemyHP == 0) 27 { 28 Instantiate(particleObject, this.transform.position, Quaternion.identity); 29 Destroy(transform.gameObject); 30 31 } 32 } 33 } 34}

EnemyHealth.csのif文の中に
タイマーを呼び出して止めるような処理を行うのかと考えたのですが
書き方がわかりません。

初歩的なところかもしれないのですが
ご教授いただければと思います。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

TimeDirector.csの15行目付近

C#

1this.time -= Time.deltaTime; 2```をまずは 3```C# 4this.time -= Time.deltaTime * stop;

と仮に設定しておきます。

・通常

C#

1stop = 1;

・止めたい時

C#

1stop = 0;

とすることで目的の挙動が達成されるはずです。

投稿2020/06/16 23:27

ReVenen

総合スコア39

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

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

tessyman

2020/06/17 10:55

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

0

(動作未確認なので、必要であれば適宜修正してください)

C#

1using UnityEngine.UI; 2using UnityEngine.SceneManagement; 3 4public class TimeDirector : MonoBehaviour 5{ 6 public bool isStop 7 { 8 get; 9 set; 10 } = false; 11 12 // …(中略) 13 14 void Update() 15 { 16 if (isStop) 17 { 18 return; 19 } 20 21 // …(中略:本来のUpdate()の処理) 22 } 23}

C#

1using UnityEngine; 2using UnityEngine.UI; 3 4public class EnemyHealth : MonoBehaviour 5{ 6 // TimeDirectorをここに入れておく 7 public TimeDirector timeDirector; 8 9 // …(中略) 10 11 private void OnTriggerEnter(Collider other) 12 { 13 if (other.gameObject.CompareTag("Bullet")) 14 { 15 // …(中略) 16 17 if (enemyHP == 0) 18 { 19 // …(中略) 20 21 timeDirector.isStop = true; 22 } 23 } 24 } 25}

投稿2020/06/08 02:23

fiveHundred

総合スコア10152

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

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

tessyman

2020/06/08 04:28

迅速なコメントありがとうございます! trueとfalseを使うんですね。 ただ動作確認してみましたが反応しませんでしたのでもう少し試行錯誤してみます!
fiveHundred

2020/06/08 05:17

trueとfalseはbool型の値ということだけです(例えばint型にして0と1を使っても同じことです)。 むしろ、注目すべき点は以下の点です。 - EnemyHealthからTimeDirectorを呼び出す方法 - 変数が特定の値の時に、Update()の処理を処理させない方法 > ただ動作確認してみましたが反応しませんでしたのでもう少し試行錯誤してみます! インスペクターなどでtimeDirectorを設定しない限り、動作しません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問