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

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

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

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

Unity

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

Q&A

0回答

918閲覧

unity BGMを停止したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity

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

0グッド

0クリップ

投稿2021/07/05 09:24

編集2021/07/05 12:57

unityで、プレイヤーがゴールしたとき、死んだときにBGMをストップさせたいと考えています。
https://qiita.com/OKsaiyowa/items/d1a131f6b3e356c19388
このサイトを参考にしたところ、AudioSourceをストップするときはaudioSource.Stop(); を書けばいいと思うのですが、BGMは続いています。
ストップするオーディオを指定するのかと思いましたけど、別のサイトでみたところAudioSource内のすべてがストップの対象とのことでした。
何が悪いのかを教えてください。
以下、インスペクターの画面とスクリプトです。
イメージ説明

クリア前のコンソール
イメージ説明

クリア後のコンソール
イメージ説明

クリア後の全体のコンソール
イメージ説明

using UnityEngine; using UnityEngine.SceneManagement; public class PlayerManager : MonoBehaviour { //public public float xspeed; public float jumpPower; public GroundCheck ground; public GameManager gameManager; public AudioSource audioSource; //SE [SerializeField] AudioClip jumpSE; public Traps trap1; public Trap2 trap2; public Trap3 trap3; //private private bool isGround = false; float speed; float x; bool isDead = false; public enum DIRECTION_TYPE { STOP, RIGHT, LEFT } DIRECTION_TYPE direction = DIRECTION_TYPE.STOP; Rigidbody2D rigidbody2D; Rigidbody2D trapSpike1; Animator animator; private void Start() { rigidbody2D = GetComponent<Rigidbody2D>(); trapSpike1 = GetComponent<Rigidbody2D>(); animator = GetComponent<Animator>(); audioSource = GetComponent<AudioSource>(); Debug.Log("audioSource1は"+audioSource);//<====================================== // デバッグ用 //Debug.Log("trap1 " + trap1); //Debug.Log("trap2 " + trap2); // Debug.Log("trap3 " + trap3); } void Update() { isGround = ground.IsGround(); if (isDead) { return; } //接地判定を得る //float x = Input.GetAxis("Horizontal"); //speedというパラメータにxを代入 //animator.SetFloat("speed", Mathf.Abs(x)); /* if (x == 0) { //止まっている direction = DIRECTION_TYPE.STOP; } else if (x > 0) { //右に動く direction = DIRECTION_TYPE.RIGHT; } else if (x < 0) { //左に動く direction = DIRECTION_TYPE.LEFT; } switch (direction) { case DIRECTION_TYPE.STOP: speed = 0; break; case DIRECTION_TYPE.RIGHT: speed = xspeed; transform.localScale = new Vector3(1, 1, 1); break; case DIRECTION_TYPE.LEFT: speed = -xspeed; transform.localScale = new Vector3(-1, 1, 1); break; } */ } public void GoLeft() //ボタンをクリックしたら右へ移動 { rigidbody2D.velocity = new Vector2(-xspeed, rigidbody2D.velocity.y); transform.localScale = new Vector3(-1, 1, 1); animator.SetFloat("speed", Mathf.Abs(1)); } public void GoRight() //ボタンをクリックしたら左へ移動 { rigidbody2D.velocity = new Vector2(xspeed, rigidbody2D.velocity.y); transform.localScale = new Vector3(1, 1, 1); animator.SetFloat("speed", Mathf.Abs(1)); } public void StopHorizontalMovement() //ボタンを離したら停止 { rigidbody2D.velocity = new Vector2(0, rigidbody2D.velocity.y); animator.SetFloat("speed", Mathf.Abs(0)); } public void Jump() //ボタンをクリックしたら右へ移動 { if (isGround) { //上に力を加える rigidbody2D.AddForce(Vector2.up * jumpPower); animator.SetBool("isJumping", true); audioSource.PlayOneShot(jumpSE); // Debug.Log("ジャンプしました"); } }  private void OnTriggerEnter2D(Collider2D collision) { Debug.Log("OnTriggerEnter2D内のaudioSource=" + audioSource);//<==================== if (isDead) { return; } if (collision.gameObject.tag == "Trap") { Debug.Log("GameOver"); gameManager.GameOver(); PlayerDeath(); Debug.Log("死んだ後のaudioSource=" + audioSource); audioSource.Stop(); } if (collision.gameObject.tag == "Finish") { Debug.Log("GameClear"); gameManager.GameClear(); Invoke("GameClear",4f); audioSource.Stop(); Debug.Log("ゴールした後のaudioSource=" + audioSource);//<======================= } //トラップSwitchのタグ if (collision.gameObject.tag == "Switch1") { Debug.Log("罠1起動"); trap1.Trap1Activate(); } if (collision.gameObject.tag == "Switch2") { trap2.Trap2Activate(); // Debug.Log(trap2); } if (collision.gameObject.tag == "Switch3") { Debug.Log("罠3起動"); // Debug.Log(trap3); Invoke("AppearblocInvokek", 2.0f);//ブロック出現 } } void AppearblocInvokek()//ブロック出現のためのInvoke { trap3.Appearblock(); } void GameClear()//ブロック出現のためのInvoke { SceneManager.LoadScene("Title"); } void PlayerDeath() { BoxCollider2D boxCollider2D = GetComponent<BoxCollider2D>(); Destroy(boxCollider2D); rigidbody2D.velocity = new Vector2(0, 0); rigidbody2D.AddForce(Vector2.up * 400); animator.Play("PlayerDeathAnimation"); gameManager.GameOver(); isDead = true; } }

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

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

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

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

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

sakura_hana

2021/07/05 09:52 編集

Debug.Logを見て、目的の行まで正しく到達しているかを確認してください。
退会済みユーザー

退会済みユーザー

2021/07/05 09:55

回答ありがとうございます。 わかりました。確認します。
退会済みユーザー

退会済みユーザー

2021/07/05 10:56 編集

audioSource.Stop();の直前の private void OnTriggerEnter2D(Collider2D collision) { } までは来ているようです。 audioSource.Stop();を含めたif文の中に入ったとたん消えています。 すみません、もうちょっと確認してみます。 再確認しましたが、private void OnTriggerEnter2D(Collider2D collision)まで来ています。 ただ、private void OnTriggerEnter2D(Collider2D collision)の中でなぜか2つaudioSourceが来ています。 さらにゴールした後、audioSourceが2つ追加されます。 少し分かりづらいので、画像を載せておきます。
sakura_hana

2021/07/05 11:31

はっきりしませんがPlayerManagerが付いたオブジェクトが2つ存在しているとかですかね。 質問のスクリプトを検証したコードにしてもらえると何か分かるかもしれません。
退会済みユーザー

退会済みユーザー

2021/07/05 11:42

確認しましたが、PlayerManagerが付いたオブジェクトは一つだけです。 検証したコードというのはどういうふうに書いたものでしょうか。 左右に動いたりジャンプしたり、というのをすべて省いたもの、ということですか?
sakura_hana

2021/07/05 12:21

>検証したコード 現在の質問のコードには「audioSource1はPlayer」と「OnTriggerEnter2D内のaudioSource=Player」を出すDebug.Logが見当たらない為、これらがどこに書かれているのか確認したかった次第です。(Debug.Logの場所によってはこういう結果になるのが正しい可能性があります) あと念の為、他にAudioSourceが存在していないか・そこでBGMを流していないかも確認してみてください。(うっかりGameObjectやコンポーネントをコピーしている可能性もある為)
退会済みユーザー

退会済みユーザー

2021/07/05 12:58 編集

了解しました。質問のところに追加しておきます。 AudioSourceにつきまして確認したところ、プレイヤーに付いていますが、ジャンプしたときの音を出すためのもので、BGMは流していません。 1万字を超えたらしいので、元のコードは削除しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問