kaburanegi

twitterのつぶやきのまとめ

ポーズモードで停止・ポーズモードから抜けるとき再生

初めてUniRxを使ってプログラムを書いた記念。

UniRXを使って、ポーズモードの時にミュージックを停止してポーズモードを抜けるときは再生するプログラムを作りました。

※音楽をループする箇所と、ポーズ処理の箇所は省略してあります。

 

【Musicをループするスクリプト(抜粋)】

using UnityEngine;
using UniRx;
using UniRx.Triggers;

public class Music_LoopPlayer : MonoBehaviour
{
(~省略~)
 AudioSource audioSource;

 void OnEnable()
 {
 (~省略~)
  MusicStart();
  MusicPause();
 }

 (~省略~)

 //ポーズモード時を抜けるときは音楽を流す
 public void MusicStart()
 {
  this.UpdateAsObservable()
  .Where(_ => pauseUI.activeSelf == false)
  .First()
  .Subscribe(x => audioSource.Play());
 }

 //ポーズモード時はミュージック停止
 public void MusicPause()
 {
  this.UpdateAsObservable()
  .Where(_ => pauseUI.activeSelf == true)
  .Subscribe(x => audioSource.Stop());
 }
}

 

【Musicをループするスクリプトを表示・非表示するスクリプト(抜粋)】

(~省略~)

 public class PauseUIScript : MonoBehaviour
 {
 (~省略~)

 private void Start()
 {

  this.UpdateAsObservable()
  .Where(_ => Input.GetKeyDown(KeyCode.Escape) ||    Input.GetKeyDown("p") || Input.GetMouseButtonDown(2))
  .Subscribe(x => Pause());
 }

 //Pボタン・マウスの右ボタン、Pキー、エンターキーを押したとき
 public void Pause()
 {
 (~省略~)

  // ポーズUIが表示されてる時は停止
  if (pauseUI.activeSelf)
  {
  (~省略~)
  music_LoopPlayer.enabled = false;
  }

 }
 //ゲームに戻るボタン
 public void Resume()
 {
  music_LoopPlayer.enabled = true;
 }

 //Pボタン
 public void PauseButton()
 {
  Pause();
 }

}