Unity , ADX2 実験室メモ

非エンジニアのサウンドデザイナーがUnityでなにかをつくる

ユニティちゃんに足音をつけた その2

音のバリエーションを増やす

前回、「走る音」しかつけなかったので「歩く音」「着地音」を追加したよ。

走る音しかなかったときと比べてみてほしい。 だいぶ印象が変わったんじゃないかな?

状態の切り替え方

ADX2のセレクタラベルというのを指定して、鳴らす音を切り替えている。

state というセレクタの下に状態を示すラベルが3つ、以下のような感じで用意してある。

  • state
    • run
    • walk
    • landing

指定の仕方は以下のような感じ。

ADX2LEプラグインのソースを一部書き換えているのでこのままでは正しく動きません 変更部分とかは今後、改めて書くよ。 雰囲気を感じてもらえれば。

初期化するとこ

private CriAtomSource sound_manager;       // ADX2制御用

void Start ()
{
    // 歩く、走る、着地制御用にADX2 CriAtomSourceコンポーネントを取得
    sound_manager = GameObject.FindGameObjectWithTag ("SoundManager").GetComponent<CriAtomSource>();
}

指定するところ

sound_manager.player.SetSelectorLabel ("state", "run");

走る、歩くの判別

今回の場合「走る」「歩く」とかの判定はユニティちゃんのコントローラースクリプトを見て、適当なところで状態を切り替えている。

  • 前に進むとき走るモーションしかないので、上入力時に「走る」判定
  • 後ろに歩くときは走らないので、下入力時に「歩く」判定

改変後のスクリプトはこんな感じ。

//以下のvの閾値は、Mecanim側のトランジションと一緒に調整する
if (v > 0.1) {
    velocity *= forwardSpeed;       // 移動速度を掛ける
    if (currentBaseState.nameHash != jumpState) {
        sound_manager.player.SetSelectorLabel ("state", "run");   // 前進しつつジャンプ中でないとき音の状態をrunに変更
    }
} else if (v < -0.1) {
    velocity *= backwardSpeed;  // 移動速度を掛ける
    if (currentBaseState.nameHash != jumpState) {
        sound_manager.player.SetSelectorLabel ("state","walk");   // 音の状態をwalkに変更
    }
}

割といい加減ですが、これ以上モーションを増やさない場合は特に問題ないはず。気になる人は移動速度とか複数の要素を見て切り替えると良いよ。

着地音に関してはジャンプ中のみ処理する部分があるから適当に追加しよう!(若干問題があるけど、その7くらいで解決予定)

次回予告

サウンドデータの作り方を紹介するよ!

これが作れたらADX2中級者以上を名乗っていい。たぶん。