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

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

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

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

Unity

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

Q&A

解決済

1回答

5730閲覧

UnityでのBGMのランダム再生方法

DDDzinma

総合スコア6

C#

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

Unity

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

0グッド

0クリップ

投稿2020/01/16 01:59

編集2020/01/17 01:36

BGMをランダムに一曲選んでそれを再生する方法がわかりません。

https://teratail.com/questions/125769

過去にこちらの質問がされていますが、こちらの方法で実装してみたら音が同時に流れてしまいます。

この方法、またはそれ以外でよい実装方法はありますか?

今の自分のメインでのスクリプトはこのようになっています。

C#

1public class BGM : MonoBehaviour { 2 3 private GameObject[] audioObjects; 4 5 public AudioClip[] audios; 6 7 private int i; 8 9 10 // Use this for initialization 11 private void Start () { 12 13 audioObjects = GameObject.FindGameObjectsWithTag("AudioObject"); 14 } 15 16 // Update is called once per frame 17 private void Update () { 18 19 if (Input.anyKey) 20 { 21 var audioObject = audioObjects[Random.Range(0, audios.Length)]; 22 23 audioObject.GetComponent<AudioSource>().PlayOneShot(audios[i]); 24 25 var audioSourceId = audioObject.GetComponent<AudioSourceID>().audioSourceID; 26 print(audioSourceId); 27 } 28 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

public AudioClip[] audiosで宣言し、ランダムにならしたい音源をインスペクターからセット
pravate int i をi = Random.Range(0,audios.Length);にして取得したAudioSource audioSource;に
audiosorce.PlayOneShot(audios[i]);で可能だと思います。
ランダム数値を変更したい際は再度i = Random.Range(0,audios.Length);を行えば都度数値が変化します。

追記
if文の条件は個人で設定してください、このままコピペしてもエラーになります。
if文を消してUpadateの中でPlayOneShotをそのままにすると毎フレーム音が再生されるので気を付けてください。

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class RandomAudioPlay : MonoBehaviour 6{ 7 public AudioClip[] audios; 8 private AudioSource audioSource; 9 private int i; 10 11 void Start() 12 { 13 audioSource = this.GetComponent<AudioSource>(); 14 if(audios != null) 15 { 16 i = Random.Range(0,audios.Length); 17 } 18 } 19 20 void Upadate() 21 { 22 if(/*何らかの条件、例えばボタンが押されたときであったり、物を取った時など*/) 23 { 24 audioSource.PlayOneShot(audios[i]); 25 } 26 } 27}

投稿2020/01/16 02:58

編集2020/01/17 04:26
Y0241-N

総合スコア1066

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

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

DDDzinma

2020/01/17 01:21

申し訳ないのですが自分はかなりプログラム初心者なため、お教え頂いた命令を、どこの場所に書き加えたり変更を加えたりすればいいのかわかりませんでした。お手数おかけしますがお教えいただければ幸いです。
Y0241-N

2020/01/17 04:29

追記しました、C#は他の言語に比べて分かりやすいと思うので頑張って勉強してください。
DDDzinma

2020/01/19 03:22

解答ありがとうございます、自分も学校で先生や先輩から教えて貰いながら覚えていきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問