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

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

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

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

Unity

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

Q&A

1回答

2008閲覧

audio sourceの終了判定と再生時間に合わせて動くsliderの作り方。

tadahix

総合スコア0

C#

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

Unity

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

0グッド

0クリップ

投稿2021/09/29 07:26

やりたいこと
現在、audio sourceとtextオブジェクトを使ってaudio sourceの再生時間の表示を行なっているのですが、終了判定がうまくいきません。具体的に言うと再生し終わったら再生時間が0になってしまいます。 再生したaudio sourceが5秒だとしたら再生終了した後にも5秒と表示させておく方法はありませんか?? また、audio sourceの再生時間に合わせて動く、sliderもつけたいのですが付け方わかる方いらっしゃいますか?

以下のコードが私が現在作っている再生時間を表示するコードです。inspectorでaudio sourceのところにaudiosourceオブジェクト、text boxのところに再生時間を表示したいテキストオブジェクトを格納すれば使えます。

C#

1 2using UnityEngine; 3using UnityEngine.UI; 4using UnityEngine.Events; 5using UnityEngine.EventSystems; 6 7public class AudioSeek : MonoBehaviour 8{ 9 10 public AudioSource AudioSource; 11 public Text textbox; 12 private int a, b,minute, hour, minute2, hour2; 13 14 void Update() 15 { 16 a = (int)AudioSource.time; 17 minute = (int)a / 60; 18 hour = (int)minute / 60; 19 b = (int)AudioSource.clip.length; 20 minute2 = (int)b / 60; 21 hour2 = (int)minute / 60; 22 textbox.text = minute.ToString("d1")+":"+a.ToString("d2")+" / "+minute2.ToString("d1") + ":"+b.ToString("d2"); 23 24 if (!AudioSource.isPlaying) 25 { 26 textbox.text = minute.ToString("d1") + ":" + a.ToString("d2") + " / " + minute2.ToString("d1") + ":" + b.ToString("d2"); 27 } 28 29 } 30} 31

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

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

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

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

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

tadahix

2021/09/29 13:20 編集

現在、実行時に一度音楽(audio source)が再生されて、その際に再生時間はうまく表示されるということは、bboydaisuke様のご回答より可能になりました。しかし、もう一度、同じaudio sourceを実行中に流しても再生時間は最初から始まらないという問題が発生しています。(「実行時の時に最初に流れたaudio sourceが終了した再生時間」のところで止まったままになってしまう。) よって、audio sourceの再生時間と連動させたいのですが方法わかる方いらっしゃいましたらご回答の方、何卒よろしくお願いいたします。 また、audio sourceの再生時間と連動しているsliderの作り方についても分かる方いましたら教えていただけますと幸いです。(YouTubeなどの再生バーみたいなものを作りたい)
bboydaisuke

2022/03/01 15:25

ここは「質問への追記・修正の依頼」欄なので、ほとんどの方は見ないと思いますよ…
guest

回答1

0

こんな感じでいけると思います。

C#

1using System; 2using System.Collections; 3using UnityEngine; 4 5public class Audio : MonoBehaviour 6{ 7 [SerializeField] AudioSource _audio = default; 8 [SerializeField] UnityEngine.UI.Text _text = default; 9 10 void Start() 11 { 12 Play(); 13 } 14 15 public void Play() 16 { 17 StopAllCoroutines(); 18 StartCoroutine(PlayRoutine()); 19 } 20 21 IEnumerator PlayRoutine() 22 { 23 _audio.Play(); 24 float startTime = Time.time; 25 TimeSpan ts = default; 26 27 while (_audio.isPlaying) 28 { 29 ts = new TimeSpan(0, 0, 0, (int)(Time.time - startTime)); 30 _text.text = ts.ToString(@"mm\:ss"); 31 yield return null; 32 } 33 } 34}

投稿2021/09/29 12:46

bboydaisuke

総合スコア5308

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

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

tadahix

2021/09/29 13:15

ご回答くださりまして、誠にありがとうございます。また、コードまで書いてくださりまして大変ありがたいです。 書いていただきましたコードを試させていただきました。ご提案していただきましたコードを試してみたところ、実行時に一度音楽(audio source)が再生されて、その際に再生時間はうまく表示されたのですが、もう一度、同じaudio sourceを実行中に流しても再生時間は最初から始まりませんでした。(「実行時の時に最初に流れたaudio sourceが終了した再生時間」のところで止まったままになってしまう。) つまり、audio sourceの再生時間と連動させたいのですが方法わかったりしますか?? また、audio sourceの再生時間と連動しているsliderの作り方についても分かったりしますか??(YouTubeなどの再生バーみたいなものを作りたい) お手数をおかけしますがよろしくお願いいたします。
bboydaisuke

2021/09/29 13:32 編集

Audio.Play() を呼んで再生すれば期待通りの挙動になりますよ。Slider については他の人の回答を待つか、別の質問を立ててください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問