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

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

ただいまの
回答率

90.52%

  • C#

    7080questions

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

  • Unity

    3972questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity2D

    874questions

BGMを、決めたシーンでストップさせたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 283

Buddha_san2

score 19

 前提

Unityでクイズゲームを作っています。クイズを解くシーン(1シーンで問題を出題し、正解不正解を出す、を繰り返します)で音楽を流し、次のシーン(スコアを表示するシーン)で音楽と止めようと考えています。
そのために、シーンを遷移してもBGMを継続して再生する方法を使ってみました。

 問題

元のシーンに戻った時に多重再生されないようにするコード

using UnityEngine;
using System.Collections;

public class MainSoundScript: MonoBehaviour {

    public bool dontDestroyEnabled = true;

    private static Sound instance = null;

    public static Sound Instance {
        get { return instance; }
    }

    void Awake () {
         if (instance != null && instance != this) {
             Destroy(this.gameObject);
             return;
         } else {
             instance = this;
         }
         DontDestroyOnLoad(this.gameObject);
    }

}


を使うことで、同じシーンで多重再生されなくなったのですが、次のシーンに移るときも同じBGMが流れ続けます。
次のシーンでこのBGMを消すためにはどうすればよろしいでしょうか?

 補足

上のコード(Singletonパターン?)が、難解でよく理解していません、すいません。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

instanceをDestroy()すればよろしいと思います。
具体的には、以下のような関数を追加し、これを音楽を止めたいときにこの関数を実行すればよいです。

    public static void DeleteInstance() {
        if (instance != null)
        {
            Destroy(instance.gameObject);
            instance = null;
        }
    }

ついでに言っておくと、Singletonが難解と言っておりますが、やっていることは単純で、以下の通りになります。

  • 生成時にinstanceにSoundを格納する。ただし、すでにinstanceが存在する場合は、複数存在することになるため直ちに破棄する
  • Instanceからinstanceを取得できるようにする
  • DontDestroyOnLoad()でシーン切り替え時に破棄しないようにする

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/15 09:06

    丁寧な説明で初心者の自分でも理解しました!本当にありがとうございます!

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    BGM

    ただいま単調なゲームを作っているのですがそれにBGMを流そうと思っています。 それでAVFoundationを使ってAppDelegateの applicationDidBec

  • 解決済

    JavaScriptでクイズを作成したい

    前提・実現したいこと javaScriptで、クイズを作成したいと思っています。 問題表示→正誤・解説表示→次の問題…というようにページが遷移してくようにつくりたいです。また、

  • 解決済

    MVC モデルのバリデーションについて

    モデルでアノテーション(Required)を指定しているプロパティが4つあります。 [Required] public string A { get; set;

  • 解決済

    JavaScriptでクイズ作成(結果によりボタンを表示)

    前提・実現したいこと JavaScriptで以下のようなクイズを作成したいと思っています。 問題を表示(ラジオボタン)→ 正解を選択→ 結果によりボタンを表示 【2問とも正解を

  • 解決済

    PHP クイズについて

    初めまして、現在PHPでクイズを作成しています。 10問連続で問題が出題されるのですが、ランダムに問題を出題しようと思っています。 現在はmt_rand関数でランダムに1~10まで

  • 解決済

    GameObject.Findを使わないで、DontDestroyOnLoadしたシーン遷移後のオブ...

     前提・実現したいこと GameObject.Find系は使いたくないので、GameObject.Find系を使わずに、 DontDestroyOnLoadして、シーン遷移後に引き

  • 解決済

    PlayerPrefsで音量がセーブ、ロードできない

     前提 Unity,C#でゲームを作っています。 前の質問が複雑になってしまったので、ここで清書します、すいません。 Sliderを使っています。 シーンが変わっていても音量を

  • 解決済

    UnityでシーンによってBGMを消したりつけたりしたい。

    Unityでブロック崩しを作っています。SceneはTitle,Menu,Mainの3つを作っていて、TitleとMenuでは同じBGMを流し(これは出来ました。)、MenuからM

同じタグがついた質問を見る

  • C#

    7080questions

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

  • Unity

    3972questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity2D

    874questions