1.0.9 • Published 8 years ago
@umm/cafu_music v1.0.9
CAFU Music
What
- BGM を再生するための UseCase を提供します
Requirement
- CAFU Core v2.0.0
Install
npm install github:umm-projects/cafu_musicUsage
スクリプト準備編
1. BGM の AudioClip を表現する enum を定義
public static class Enumerates {
public enum MusicName {
Title,
Menu,
Game,
}
}2. CAFU.Music.Data.Entity.MusicEntity<TEnum> を継承した Entity クラスを作成
using System;
using CAFU.Music.Data.Entity;
namespace SampleProject.Data.Entity {
[Serializable]
public class MusicEntity : MusicEntity<MusicName> {}
}- Unity の仕様により Generic クラスを Serialize できないため、プロジェクトごとに継承する必要があります😢
3. CAFU.Music.Data.DataStore.MusicDataStore***<TMusicEntity> を継承した DataStore クラスを作成
- Unity の仕様により Generic クラスを Serialize できないため、プロジェクトごとに継承する必要があります😢
シーン内で単一の BGM を再生する場合
using CAFU.Music.Data.DataStore;
using SampleProject.Data.Entity;
namespace SampleProject.Data.DataStore {
public class MusicDataStore : MusicDataStoreSingle<MusicEntity> {}
}シーン内で複数の BGM を切り替えて再生する場合
using CAFU.Music.Data.DataStore;
using SampleProject.Data.Entity;
namespace SampleProject.Data.DataStore {
public class MusicDataStore : MusicDataStoreMultiple<MusicEntity> {}
}シーン準備編
1. CAFU.Music.Presentation.View.IMusicController<TMusicEntity> を Controller クラスに実装
using CAFU.Core.Presentation.View;
using CAFU.Music.Presentation.View;
using SampleProject.Data.Entity;
using UnityEngine;
namespace SampleProject.Presentation.View.SampleScene {
public class Controller : Controller<SampleScenePresenter, SampleScenePresenter.Factory>, IMusicController {
[SerializeField]
private MusicDataStore musicDataStore;
public IMusicDataStore MusicDataStore => this.musicDataStore;
}
}- Component の
Awake()実行順制御を行う関係で必要になります。
2. CAFU.Music.Presentation.Presenter.IMusicPresenter を Presenter クラスに実装
using CAFU.Core.Presentation.Presenter;
using CAFU.Music.Presentation.Presenter;
namespace SampleProject.Presentation.Presenter {
public class SampleScenePresenter : IPresenter, IMusicPresenter {
public IMusicUseCase MusicUseCase { get; private set; }
}
}- 拡張メソッドから利用します。
- Factory の記述は省略しています。
- Zenject 使うと楽かな。
3. Scene の任意の GameObject に MusicDataStore をアタッチ
- Hierarchy ルートの
DataStoreとかがヨサソウです。
4. アタッチされている Controller の Music Data Store フィールドに 3. の GameObject を D&D
- これにより、実行順制御が可能になります。
5. Scene で用いる BGM を MusicDataStore のフィールドに設定
- 上のスクショは
MusicDataStoreがMusicDataStoreSingle<TMusicEntity>を継承しているケース
利用編
再生
this.GetPresenter().PlayMusic(MusicName.Title, true, true);引数
- 再生する BGM を表す enum
- ループするかどうか (default:
true) - 既に同一の BGM が再生中の場合は、再生を止めずにそのままキープするかどうか (default:
true)
停止
this.GetPresenter().Stop();中断
this.GetPresenter().Pause();再開
this.GetPresenter().Resume();ボリューム操作
this.GetPresenter().SetVolume(0.5f);License
Copyright (c) 2018 Tetsuya Mori
Released under the MIT license, see LICENSE.txt