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

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

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

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

Q&A

解決済

1回答

2817閲覧

Unity カウントダウン 時報のように音を出したい

rururu_ru

総合スコア1

Unity

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

0グッド

0クリップ

投稿2021/12/06 10:04

前提・実現したいこと

Unityのゲーム内で使用するカウントダウン機能を作っています。
カウントダウンのラスト3秒で時報のように秒数に合わせてピッピッピッというように音を出したいです。
なので3、2、1秒に合わせて音を出したいです。
画面にカウントダウンを表示することはできました。

おそらく条件文が間違っているんだろうなとは思うのですが、解決方法がわからないため質問させていただきました。
よろしくお願いいたします。

発生している問題・エラーメッセージ

3秒を超えると連続して音が鳴ってしまい、意図した挙動になりません。

該当のソースコード

C#

1using UnityEngine; 2using UnityEngine.UI; 3using System.Collections; 4 5public class TimeScript : MonoBehaviour { 6 7 private float time = 20; 8 public AudioClip countSE; 9 AudioSource cnt; 10 11 void Start () { 12 //float型からint型へCastし、String型に変換して表示 13 GetComponent<Text>().text = ((int)time).ToString(); 14 this.cnt = GetComponent<AudioSource>(); 15 } 16 void Update (){ 17 //1秒に1ずつ減らしていく 18 time -= Time.deltaTime; 19 20 //3秒になったらカウントする 21 if(time <= 3) 22 { 23 this.cnt.PlayOneShot(this.countSE); 24 } 25 26 //マイナスは表示しない 27 if (time < 0) time = 0; 28 GetComponent<Text> ().text = ((int)time).ToString (); 29 } 30}

試したこと

対象のオブジェクトにAudioSourceとTimeScriptを追加
time<=3だと3秒以下の場合ずっと実行され続けてしまうようなのでtime==3にすると音が鳴らず
time==1 || time==2 || time==3でも音は鳴りませんでした

補足情報(FW/ツールのバージョンなど)

エディターバージョン
2020.0.24f1

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

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

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

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

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

guest

回答1

0

ベストアンサー

time==1 || time==2 || time==3でも音は鳴りません

考え方としては、この考え方が一番正しいのですが、Time.deltaTimeはキリのいい数字とは限らないので、timeからTime.deltaTimeを引いても、ぴったり1や2や3になることはぼぼありえません。
なので、考え方をちょっと変える必要があります。

残り3秒の場合を例にすると、3ぴったりにならないのであれば、

「Time.deltaTimeを引く前のtimeの値が3以上」かつ「Time.deltaTimeを引いた後のtimeの値が3未満」

の時に音を鳴らせば良いと思います。
こうすれば、上記の条件を満たすのは、たかだか一度きりなので、ずっと音が鳴り続けることもないはずです。

2秒や1秒のときも同様の考え方でオッケーです。

投稿2021/12/07 05:05

JunSuzukiJapan

総合スコア314

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

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

rururu_ru

2021/12/07 06:14

ありがとうございます!解決しました! 以下のようにプログラムを追記し、ゲーム内で3秒のところからカウント音を出せるようになりました using UnityEngine; using UnityEngine.UI; using System.Collections; public class TimeScript : MonoBehaviour { private float time = 20; //▼追加 private float cntTime = 0; private int cntNum = 4; //▲追加 public AudioClip countSE; AudioSource cnt; void Start () { //float型からint型へCastし、String型に変換して表示 GetComponent<Text>().text = ((int)time).ToString(); this.cnt = GetComponent<AudioSource>(); } void Update (){ //▼追加 cntTime = time; //▲追加 //1秒に1ずつ減らしていく time -= Time.deltaTime; //3秒になったらカウントする if(time <= 3) { this.cnt.PlayOneShot(this.countSE); } //▼追加 if (time < cntNum && cntTime > cntNum && cntNum > 0) { this.cnt.PlayOneShot(this.countSE); cntNum--; } //▲追加 //マイナスは表示しない if (time < 0) time = 0; GetComponent<Text> ().text = ((int)time).ToString (); } }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問