初めて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();
}
}