LoginSignup
1
2

More than 5 years have passed since last update.

Eliasでインタラクティブミュージック Unity組み込み編(2)

Last updated at Posted at 2017-12-02

前回でレベル変化部分をやってしまったので残るはActionPreset。ただしこの機能はEliasPlayer.RunActionPreset関数のみで完結するので、例のHPによる変化部分の処理についても書きます。

ActionPresetの実行

PresetActionはEliasPlayerにたいしてRunActionPresetでPreset名を実行すればいける。

SoundManager.cs
    public static void RunActionPreset(string actionName)
    {
        if (null == instance_ || null == instance_.elias_player_)
        {
            return;
        }
        instance_.elias_player_.RunActionPreset(actionName);
    }

ただし、RunActionPresetで実行できるPresetは現在アクティブなThemeのみ。別のThemeに属するPresetを実行しようとするとエラーとなる。

スクリーンショット 2017-12-02 21.21.47.png

このエラーが出た場合はEliasStudioでPreset名とそのPresetが属するThemeを確認すると幸せになれるかも。

残りHPにあわせたBGM変化実装例

SoundManager.cs
    /// <summary>
    /// 現在再生しているThemeの最大レベルをえる
    /// </summary>
    /// <returns>最大レベル</returns>
    static public int GetGreatestLevelInActiveTheme () {
        if (null == instance_|| null == instance_.elias_player_)
        {
            return 1;
        }
        var elias = instance_.elias_player_;
        var theme = elias.GetActiveTheme ();
        var greatest_level = elias.GetGreatestLevelInTheme (theme);
        return greatest_level;
    }

まず現在再生中のThemeの最大レベルを確認する。
この値をキャッシュしてもいいし、Level設定頻度がそれほど多くないなら毎回問い合わせてもいい。

BossMonster.cs
    void ControlMusic()
    {
        var max_lv = SoundManager.GetGreatestLevelInActiveTheme();
        // 適当に敵のダメージ量割合を計算する
        var ratio = (float)((MAXHP - HP) / MAXHP);
        // lv=0にしてしまうとミュートになるので1~maxの間にclampする
        var lv = (int) Mathf.Clamp(ratio*(float)max_lv , 1.0f, (float)max_lv);
        SoundManager.SetLevel(lv);
    }

この関数を敵ボスがダメージを受けるたびに実行する。
たったこれだけでインタラクティブミュージックが実現できる。

まとめ

EliasStudioによるインタラクティブミュージックは簡単すぎて説明することがない。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2